mysql主从配置升级,从mysql5.7升级到mysql8.4
一. 升级前准备
-
备份mysql主库的数据文件,核心配置文件my.cnf
# 选定一个目录,在该目录下执行以下命令,备份文件会生成在当前目录下,以便后续恢复时方便查找 # 备份所有数据库 mysqldump -u root -p --all-databases > mysql_5.7_backup.sql # 备份指定的数据库(如果不想备份全部数据库的话,这里可以指定库) 命令:mysqldump -u [用户名] -p [数据库名称] > backup_file.sql mysqldump -u root -p zqx-nj > zqx-nj.sql # 备份配置文件,一定要先备份 cp /etc/my.cnf /etc/my.cnf.backup -
备份从库的数据文件、核心配置文件
操作步骤和主库同步一直,在从库操作一遍即可。
恢复数据的时候采用的都升级完成后先正确搭建主从关系,然后在主库恢复数据,数据会自动同步到从库。此处保险起见,先备份下数据。
但是从库的核心配置文件my.cnf一定要备份
# 备份配置文件,一定要先备份 cp /etc/my.cnf /etc/my.cnf.backup -
查看当前数据库版本,什么升级后可通过此处对比是否升级成功
[root@localhost soft]# mysql --version
-
先关闭从库服务器
# 在从库上执行 # 停止从库(slave)的复制线程,使从库不再接收和应用来自主库(master)的 binlog 数据 [root@localhost mysqlCopyData]# mysql -u root -p -e "STOP SLAVE" # 停止服务器 systemctl stop mysql
-
关闭主库服务器
# 在主库上执行 systemctl stop mysql
二. 获取要升级的mysql安装包
-
mysql官网下载路径:https://dev.mysql.com/downloads/,具体下载步骤在另一篇博文
-
通过linux命令进行安装:
# 进行想要保存安装包的目录下,执行下载命令: [root@localhost soft]# wget https://dev.mysql.com/get/mysql-8.4.7-1.el7.x86_64.rpm-bundle.tar # 解压: [root@localhost mysql]# tar -xvf mysql-8.4.7-1.el7.x86_64.rpm-bundle.tar
三. 安装,主库从库以下安装步骤一致
-
由于安装时报错,所以我这边先把旧版的全都卸载了
未卸载时安装报错:

# 执行以下命令卸载后就可以正常安装了 [root@localhost mysqlTar8]# yum remove mysql-community-server mysql-community-client mysql-community-common mysql-community-libs mysql-community-devel [root@localhost mysqlTar8]# yum remove mariadb-libs -
导入 GPG 密钥消除警
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 -
安装顺序:
# 按以下安装顺序,否则有可能报错 [root@localhost mysqlTar8]# rpm -ivh mysql-community-common-8.4.7-1.el7.x86_64.rpm [root@localhost mysqlTar8]# rpm -ivh mysql-community-client-plugins-8.4.7-1.el7.x86_64.rpm [root@localhost mysqlTar8]# rpm -ivh mysql-community-icu-data-files-8.4.7-1.el7.x86_64.rpm [root@localhost mysqlTar8]# rpm -ivh mysql-community-libs-8.4.7-1.el7.x86_64.rpm [root@localhost mysqlTar8]# rpm -ivh mysql-community-client-8.4.7-1.el7.x86_64.rpm [root@localhost mysqlTar8]# rpm -ivh mysql-community-server-8.4.7-1.el7.x86_64.rpm
四. 主从库核心文件my.cnf配置
-
查看目前默认配置文件,备份一下,然后用将之前复制的主库my.cnf文件替换默认的配置文件
# 备份初始默认的配置文件 [root@localhost etc]# cp /etc/my.cnf /etc/my.cnf.backup
# 用之前备份的主库my.cnf.backup文件替换当前my.cnf文件 [root@localhost etc]# cp /home/mysql8.4.7/mysqlCopyData/my.cnf.backup /etc/my.cnf
-
我是指定了数据存储目录所以需要修改默认配置
如果不想指定目录,默认的存储路径就是/var/lib/mysql
# 修改basedir、datadir目录为新目录,比如我有个对应版本的mysql8.4.7的文件夹,就将位置设置为这个 # 没有指定目录的,需要先创建 mkdir -p /home/mysql8.4.7 mkdir -p /home/mysql8.4.7/share # 授权,确保整个 MySQL 目录都有正确权限 chown -R mysql:mysql /home/mysql8.4.7 chmod -R 755 /home/mysql8.4.7 -
主库my.cnf文件配置
[mysqld] basedir=/home/mysql8.4.7 datadir=/home/mysql8.4.7/data ... # log_bin log_bin=mysql-bin # 开启binlog功能,设置名称为mysql-bin server-id=1 # 不可重复 sync-binlog=1 # 每次执行一些写入操作就与磁盘同步 binlog-ignore-db=performance_schema # 设置不同步哪些库 binlog-ignore-db=information_schema binlog-ignore-db=sys #binlog-do-db=lagou #设置同步哪些库 # -
从库my.cnf文件配置
[mysqld] basedir=/home/mysql8.4.7 datadir=/home/mysql8.4.7/data ... # log_bin server-id=2 # 不可重复 relay_log=mysql-relay-bin # 设置relay_log名称,不设置会有默认值 read_only=1 # 设置为只读 # # Remove leading # to set options mainly useful for reporting servers.
五. 数据库初始化
-
初始化数据目录
# 重新初始化, 指定目录:/home/mysql8.4.7/data mysqld --initialize --user=mysql --datadir=/home/mysql8.4.7/data 或者 # 重新初始化, 使用默认的 mysqld --initialize --user=mysql初始化会生成默认登录密码,需要记住,用户后面登录

-
修改SELinux状态
启动报错:

# 如果启用了SELinux,尝试临时禁用验证是否为原因 [root@localhost mysql8.4.7]# getenforce [root@localhost mysql8.4.7]# setenforce 0
-
启动服务
# 启动命令: systemctl start mysqld # 查看状态 systemctl status mysqld查看版本:

-
登录后台,自定义密码
# 登录就进入mysql,输入上一步查询到的密码: [root@localhost data]# mysql -u root -p自定义密码:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; mysql> SET PASSWORD FOR 'root'@'localhost' = '新密码'; # 以上2种都可以 -
解决外部访问不了mysql:
判断账号权限是否正确,进入mysql中查询账号:
mysql> select user,host,Insert_priv from mysql.user; # 当host为localhost或指定ip地址,说明当前账号只能在本机或对应ip地址主机能登录成功,当 host为"%"时表示当前局域网内任意主机均支持登录。 # 设置允许远程连接: mysql> update mysql.user set host = '%' where user = 'root'; 刷新系统权限相关表: mysql> flush privileges;
-
进行从库的安装,重复以上步骤
六. 进行主从配置
-
主库master配置,用新账户进入mysql,创建用于slave复制的用户
-- 创建复制用户 CREATE USER 'repl'@'%' IDENTIFIED BY 'replication_password'; -- 授予复制权限 GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; -- 刷新权限 FLUSH PRIVILEGES;
-
查看主服务器状态
# 锁定数据库(只读),防止数据变更 FLUSH TABLES WITH READ LOCK; # 查看主服务器状态,记录File和Position值,用于从库复制参数使用 SHOW BINARY LOG STATUS;
-
从库slave配置,进行同步初始化命令设置
进行同步前查看从库状态:
SHOW REPLICA STATUS\G
# 配置主服务器信息 mysql> CHANGE REPLICATION SOURCE TO SOURCE_HOST='xx.xx.xx.xx',SOURCE_USER='repl',SOURCE_PASSWORD='replication',SOURCE_PORT=3306,SOURCE_LOG_FILE='mysql-bin.000002',SOURCE_LOG_POS=1337; # 参数说明: SOURCE_HOST: 主服务器IP地址 SOURCE_USER: 复制用户名称 SOURCE_PASSWORD: 复制用户密码 SOURCE_PORT: 主服务器端口号 SOURCE_LOG_FILE: 二进制日志文件名,在主库中查看到的File SOURCE_LOG_POS: 二进制日志位,在主库中查看到的Position # 启动复制 mysql> START REPLICA; # 其它备用命令 STOP REPLICA; -- 停止备份 SHOW REPLICA STATUS; -- 查看备份状态

-
查看slave状态
SHOW REPLICA STATUS\G
七. 在主库进行数据恢复
-
自己可以先在主库创建一个数据验证是否同步到主库了,如果同步了,可以开始进行数据恢复
-
执行数据恢复命令
## 命令: mysql -u [username] -p[password] [database_name] < backup_file.sql [root@localhost mysqlCopyData]# mysql -u root -p zqx-nj < zqx-nj20251107.sql -
在从库中查看,此时数据已经同步过去了。
Complete!
参考
-
mysql调用报错max_connect_errors
# 清除主机阻塞列表: 解除因连接错误过多而被MySQL服务器阻塞的客户端主机 # 重置连接错误计数: 清空 max_connect_errors 的累计计数 mysqladmin flush-hosts -u root -p -u [username] -p[password] [database_name] < backup_file.sql