目录
在云服务器安装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.
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 data
mkdir tmp
7、创建用户组以及用户和密码,可能会出现mysql用户已经存在,问题不大,不用管。
groupadd mysql
useradd -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/mysql8
datadir = /usr/local/mysql8/data
port = 3306
socket = /usr/local/mysql8/tmp/mysql.sock
#必填项
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
socket = /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.server
chkconfig --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 firewalld
2、查看防火墙规则:显示当前防火墙规则的详细列表,包括允许和拒绝的规则。
sudo firewall-cmd --list-all
3、允许数据库端口:如果发现防火墙规则中没有允许数据库端口的规则,可以添加相应的规则:
sudo firewall-cmd --zone=public --add-port=端口号/tcp --permanent
sudo 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进行远程连接:
测试连接,连接成功!
问题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 firewalld
2、查看防火墙规则:显示当前防火墙规则的详细列表,包括允许和拒绝的规则。
sudo firewall-cmd --list-all
3、允许数据库端口:如果发现防火墙规则中没有允许数据库端口的规则,可以添加相应的规则:
sudo firewall-cmd --zone=public --add-port=端口号/tcp --permanent
sudo firewall-cmd --reload
4、重新测试连接
解决不能远程连接的思路:前提是配置文件是对的,阿里云服务器的入数据的安全组也配置了,数据库也允许远程连接,但是还不能进行远程连接数据库。
1、检查网络连接问题:确保网络连接正常,并且能够与数据库服务器进行通信。
ping 目标主机ip地址 看没有字节可以接受到,如下
56(84) bytes of data.
64 bytes from 目标主机的 IP 地址: icmp_seq=1 ttl=64 time=0.045 ms
64 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 firewalld
2、查看防火墙规则:显示当前防火墙规则的详细列表,包括允许和拒绝的规则。
sudo firewall-cmd --list-all
3、允许数据库端口:如果发现防火墙规则中没有允许数据库端口的规则,可以添加相应的规则:
sudo firewall-cmd --zone=public --add-port=端口号/tcp --permanent
sudo firewall-cmd --reload
4、重新测试连接
上面四个是我检查排查不能远程连接的过程。最后排查出是防火墙没有对3306端口开放,所以添加后,就可以远程连接了。希望对你有帮助!
参考文章:参考文章里面遇到了两个问题,已经在该篇博客文章中解决:
阿里云ECS服务器安装mysql8_阿里云安装mysql8.0_昨日晨曦丶的博客-CSDN博客