目录

在云服务器安装MySQL8.0(详细版):

安装过程中遇到的两个问题的解决方式

无法获取’support-files/mysql.server’ 的文件状态(stat): 没有那个文件或目录

解决不能进行远程连接,报错Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.


在云服务器安装MySQL8.0(详细版):

1、下载Linux安装包:MySQL :: Download MySQL Community Server (Archived Versions)

2、安装libaio依赖

libaio 是一个用于异步输入/输出操作的库,它提供了对异步 I/O 接口的支持。它是许多应用程序和数据库引擎所需的依赖项之一。在安装MySQL等数据库引擎时,通常需要安装 libaio 作为其依赖项,因为这些数据库引擎通常会使用异步 I/O 操作来提高数据读写的效率和性能。

yum install libaio

3、将下载的mysql压缩包放到 /usr/local/目录,我是使用finalshell进行云服务器的连接的,所以可以直接把刚刚下载的压缩包上传到云服务器:

cd /usr/local/

4、解压MySQL

tar -xvf mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz

5、重新命名文件夹

mv mysql-8.0.27-linux-glibc2.12-x86_64 mysql8

6、在刚刚重新命名的mysql8文件夹下创建两个新的文件夹

mkdir datamkdir tmp

7、创建用户组以及用户和密码,可能会出现mysql用户已经存在,问题不大,不用管。

groupadd mysqluseradd -g mysql mysql

8、对mysql用户进行文件授权

chown -R mysql.mysql /usr/local/mysql8/

9、编辑my.cnf文件 vi /etc/my.cnf

vi /etc/my.cnf 

配置:直接复制进行就行

[mysqld]basedir = /usr/local/mysql8datadir = /usr/local/mysql8/dataport = 3306socket = /usr/local/mysql8/tmp/mysql.sock#必填项sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES[client]# 设置mysql客户端连接服务端时默认使用的端口port=3306default-character-set=utf8mb4socket = /usr/local/mysql8/tmp/mysql.sock

10、切换到mysql8的bin目录下,进行初始化

cd bin或者是sd /usr/local/mysql8/bin./mysqld --initialize --user=mysql 初始化mysql

初始化后会出现一个随机密码,这个用来登录用的,需要记录下来,方便后面进行密码的修改.

11、添加mysqld服务到系统

先切换到support-files目录:

先查询刚刚解压包中mysql.server文件的位置:find / -name mysql.server

进行文件的复制:

cp /usr/local/mysql8/support-files/mysql.server /etc/init.d/mysql.server

为文件进行授权和添加mysql服务:

chmod +x /etc/init.d/mysql.serverchkconfig --add mysql.server

查看是否添加成功:

chkconfig --list

12、将mysql命令添加到服务

ln -sf /usr/local/mysql8/bin/mysql /usr/bin

13、启动服务

service mysql.server start

14、查看MySQL的启动状态

service mysql.server status

15、登录MySQL

mysql -uroot -p 密码是刚刚生成的随机密码

修改root密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';flush privileges;

16、切换到mysql库进行远程连接的权限设置:

use mysql;select host,user,plugin from user;update user set host = '%' where user ='root';flush privileges;select host,user,plugin from user;

17、在阿里云服务器配置安全组,开放3306端口

18、在防火墙开放3306端口

1、检查防火墙状态:如果防火墙处于活动状态,将显示相关信息,包括防火墙是否正在运行。sudo systemctl status firewalld2、查看防火墙规则:显示当前防火墙规则的详细列表,包括允许和拒绝的规则。sudo firewall-cmd --list-all3、允许数据库端口:如果发现防火墙规则中没有允许数据库端口的规则,可以添加相应的规则:sudo firewall-cmd --zone=public --add-port=端口号/tcp --permanentsudo firewall-cmd --reload

19、远程连接测试:

创建数据库进行测试:

create database reggie;use reggie;CREATE TABLE `user` (`id` bigint NOT NULL COMMENT '主键',`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '姓名',`phone` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '手机号',`sex` varchar(2) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '性别',`id_number` varchar(18) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '身份证号',`avatar` varchar(500) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '头像',`status` int DEFAULT '0' COMMENT '状态 0:禁用,1:正常',PRIMARY KEY (`id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC COMMENT='用户信息';INSERT INTO reggie.`user`(id, name, phone, sex, id_number, avatar, status)VALUES(1526738180875788289, '小白', '115874605588', NULL, NULL, NULL, 1);

使用dbeaver进行远程连接:

测试连接,连接成功!

安装过程中遇到的两个问题的解决方式

无法获取’support-files/mysql.server’ 的文件状态(stat): 没有那个文件或目录

问题1:执行cp support-files/mysql.server /etc/init.d/mysql.server 命名复制mysql.server到指定的文件时,会出现:无法获取’support-files/mysql.server’ 的文件状态(stat): 没有那个文件或目录

解决方法:使用find / -name mysql.server 来查找mysql.server文件的路径,找到后替换上面指令的路径,重新执行上面的cp指令即可。

第二个问题:不能使用远程连接这个服务器中的MySQL,通过下面的各种排查后发现是云服务器没有对3306这个端口进行开放。

使用Dbeaver进行远程连接报错:Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. connect timed out connect timed out

网上的查询资料后,各种说法都有,比如:服务器上的MySQL没有启动,配置文件中的端口写错了,阿里云的安全组没有开放3306连接权限,驱动类名中没有加cj(com.mysql.cj.jdbc.Driver)。如果是根据上面的参考文章来进行安装的话,都不是这些原因导致不能远程连接的,经过各种排查后发现是服务器的防火墙没有开放3306这个端口。

解决方法:

1、检查防火墙状态:如果防火墙处于活动状态,将显示相关信息,包括防火墙是否正在运行。sudo systemctl status firewalld2、查看防火墙规则:显示当前防火墙规则的详细列表,包括允许和拒绝的规则。sudo firewall-cmd --list-all3、允许数据库端口:如果发现防火墙规则中没有允许数据库端口的规则,可以添加相应的规则:sudo firewall-cmd --zone=public --add-port=端口号/tcp --permanentsudo firewall-cmd --reload4、重新测试连接

解决不能进行远程连接,报错Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

解决不能远程连接的思路:前提是配置文件是对的,阿里云服务器的入数据的安全组也配置了,数据库也允许远程连接,但是还不能进行远程连接数据库。

1、检查网络连接问题:确保网络连接正常,并且能够与数据库服务器进行通信。

ping 目标主机ip地址 看没有字节可以接受到,如下56(84) bytes of data.64 bytes from 目标主机的 IP 地址: icmp_seq=1 ttl=64 time=0.045 ms64 bytes from 目标主机的 IP 地址: icmp_seq=2 ttl=64 time=0.056 ms...

2、查看数据库服务器是否成功未运行:

ps -ef | grep mysqld检查MySQL数据库是否在运行netstat -tuln | grep 3306检查数据库监听的端口

3、检查数据库服务器的配置,确保它正在监听正确的端口并允许远程连接:

telnet 目标主机 端口正确的回应应该如下:Trying 目标主机的 IP 地址...Connected to 目标主机的 IP 地址.Escape character is '^]'.如果无法连接到该端口,则表示该端口可能未被监听或存在连接问题。

4、防火墙问题:如果数据库服务器位于防火墙后面,请确保防火墙已正确配置以允许远程连接(用的是CentOS 操作系统)。通常MySQL 默认的端口 3306。

1、检查防火墙状态:如果防火墙处于活动状态,将显示相关信息,包括防火墙是否正在运行。sudo systemctl status firewalld2、查看防火墙规则:显示当前防火墙规则的详细列表,包括允许和拒绝的规则。sudo firewall-cmd --list-all3、允许数据库端口:如果发现防火墙规则中没有允许数据库端口的规则,可以添加相应的规则:sudo firewall-cmd --zone=public --add-port=端口号/tcp --permanentsudo firewall-cmd --reload4、重新测试连接

上面四个是我检查排查不能远程连接的过程。最后排查出是防火墙没有对3306端口开放,所以添加后,就可以远程连接了。希望对你有帮助!

参考文章:参考文章里面遇到了两个问题,已经在该篇博客文章中解决:

阿里云ECS服务器安装mysql8_阿里云安装mysql8.0_昨日晨曦丶的博客-CSDN博客