MySQL 8 Configuring Replication
最近使用了MySQL 8的主从复制,利用数据同步,实现数据备份。
1. 概述
关于MySQL主从复制的原理和各种部署方式,参考:看完这篇还不懂 MySQL 主从复制,可以回家躺平了~。本文采用“一主一从”方式部署。
参考文章:
- 搭建Mysql主从复制
- MySQL 主从复制,双机热备
- mysql8.0 主从复制 Authentication plugin ‘caching_sha2_password‘ Error_code: MY-002061解决办法
官方文档:
- MySQL :: MySQL 8.0 Reference Manual :: 17 Replication
- MySQL :: MySQL 8.0 Reference Manual :: 13.4 Replication Statements
注意:从MySQL 8.0.22开始,大量涉及“SLAVE”的配置和命令,都改为“REPLICA”字样,详见官网说明。
2. 主服务器配置
主服务器是安装在Debian 12的MySQL 8,假设其IP地址为192.168.0.100。修改MySQL的配置文件/etc/mysql/conf.d/mysqld.cnf
,在[mysqld]
下添加以下配置。保存配置文件后重启MySQL服务。
[mysqld]
# 主从复制,设为主服务器
# 服务器ID
server-id = 1
# 开启二进制日志。事务提交时写日志到对应文件
log-bin = mysql-bin
# 日志过期删除的天数,延迟严重的话会导致日志文件占用磁盘
expire_logs_days = 14
利用mysql
命令,连上MySQL主服务器,并执行以下语句。注意: MySQL 8 默认身份验证插件是caching_sha2_password
,详见变量default_authentication_plugin
的配置。
-- 创建用户,提供给从服务器访问
CREATE USER 'repl'@'%' IDENTIFIED WITH caching_sha2_password BY 'password';
-- 授权用户拥有所有数据库表的同步数据权限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
再执行以下语句,显示主服务器的配置,记下File
和Position
的值。
SHOW MASTER STATUS\G;
3. 从服务器配置
从服务是安装在Debian 12的MySQL 8,假设其IP地址为192.168.0.101。修改MySQL配置文件/etc/mysql/conf.d/mysqld.cnf
,在[mysqld]
下添加以下配置。保存配置文件后重启MySQL服务。
# 主从复制,设为从服务器
# 服务器ID
server-id = 2
# 同步的数据库。多个数据库需配置多行
#replicate-do-db = db1
#replicate-do-db = db2
# 服务重启后自动开始同步数据,默认OFF
#skip-replica-start = false
利用mysql
命令,连上MySQL从服务器,并执行以下语句。
- 由于主服务器的身份验证插件采用
caching_sha2_password
,从服务器需要配置GET_SOURCE_PUBLIC_KEY=1
才能通过身份验证。 SOURCE_LOG_FILE
对应主服务器的File
的值。SOURCE_LOG_POS
对应主服务器的Position
的值。
-- 从服务器配置
STOP REPLICA;
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.0.100'
,SOURCE_PORT=3306
,SOURCE_USER='repl'
,SOURCE_PASSWORD='password'
,SOURCE_LOG_FILE='mysql-bin.000001'
,SOURCE_LOG_POS=123
,GET_SOURCE_PUBLIC_KEY=1
;
START REPLICA;
执行以下语句,查看从服务器的状态,检查从服务器是否正常运行。如果Replica_IO_Running
和Replica_SQL_Running
都显示Yes
,则表示正常运行。
SHOW REPLICA STATUS\G;