MySQL主从复制配置
本次测试使用VirtualBox+centos7.9+mysql8.0.42,两台虚拟机,主机192.168.1.100,从机192.168.200。从机是通过复制主机生成,故从机启动后首先修改本机ip,然后修改mysql实例的uuid。
find / -name auto.cnf 修改从机mysql的uuid。
1、MySQL主从复制实现原理

2、配置示例(简化版):
-- 主库 my.cnf server-id=1 -- log-bin=mysql-bin
-- 创建复制用户 CREATE USER 'repl'@'从库IP' IDENTIFIED BY 'pwd'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从库IP'; FLUSH PRIVILEGES; SHOW MASTER STATUS;
-- 从库 my.cnf server-id=2 -- relay-log=relay-log-bin
-- 配置主从关系 CHANGE MASTER TO MASTER_HOST='主库IP', MASTER_USER='repl', MASTER_PASSWORD='pwd', MASTER_LOG_FILE='记录的File', MASTER_LOG_POS=记录的Position;
START SLAVE; SHOW SLAVE STATUS\G;
当Slave_IO_Running和Slave_SQL_Running均为Yes时,表示复制成功。
应用场景:
读写分离:主库处理写请求,从库分担读请求,提升并发能力。
高可用与容灾:主库故障时可快速切换到从库。
备份与延迟复制:防止误操作导致数据不可恢复。
这种机制在高并发和高可用架构中非常关键,但需根据业务在性能与一致性之间权衡选择复制模式。
2.1、配置过程


2.2、解决SHOW SLAVE STATUS的报错
报错一:Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection
通常是由于 MySQL 8.0 默认的 caching_sha2_password 插件需要安全连接,而当前连接未满足安全要求。
方法一:修改用户认证插件为 mysql_native_password
将用户的认证方式从 caching_sha2_password 修改为 mysql_native_password。
示例:
ALTER USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
方法二:启用 get_master_public_key
在从库配置中添加 get_master_public_key=1 参数,请求主库的 RSA 公钥以支持加密。
示例:
CHANGE MASTER TO MASTER_HOST='host', MASTER_USER='username', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=120, GET_MASTER_PUBLIC_KEY=1;
报错二:The replica I/O thread stops because source and replica have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
解决:找到auto.cnf文件,修改里面的uuid值,保证各个db的uuid不一样,重启db即可。
3、docker配置示例
3.1. 配置主库
启动主库并开启二进制日志:
docker run -d \ --name mysql-master \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -v /opt/mysql-master/conf:/etc/mysql/conf.d \ -v /opt/mysql-master/data:/var/lib/mysql \ mysql:8.0
创建配置文件 /opt/mysql-master/conf/my.cnf:
[mysqld] server-id=1 log-bin=mysql-bin binlog-do-db=testdb
重启容器以使配置生效:
docker restart mysql-master
创建复制用户:
CREATE USER 'repl'@'%' IDENTIFIED BY 'replpass'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; SHOW MASTER STATUS;
记录 File 和 Position,例如:mysql-bin.000001 和 154。
3.2. 配置从库
启动从库容器:
docker run -d \ --name mysql-slave1 \ -p 3307:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -v /opt/mysql-slave1/conf:/etc/mysql/conf.d \ -v /opt/mysql-slave1/data:/var/lib/mysql \ mysql:8.0
创建配置文件 /opt/mysql-slave1/conf/my.cnf:
[mysqld] server-id=2 relay-log=relay-log read-only=1
重启容器:
docker restart mysql-slave1
3.3. 设置主从连接
进入从库容器并配置主库信息:
docker exec -it mysql-slave1 bash mysql -uroot -p123456
CHANGE MASTER TO MASTER_HOST='主库IP', MASTER_USER='repl', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
START SLAVE; SHOW SLAVE STATUS\G;
确保 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes。
3.4. 测试同步效果
在主库创建测试数据:
CREATE DATABASE testdb; USE testdb; CREATE TABLE t_user (id INT PRIMARY KEY, name VARCHAR(20)); INSERT INTO t_user VALUES (1, 'TestUser');
在从库验证数据是否同步:
SELECT * FROM testdb.t_user;
如果数据一致,说明主从复制配置成功。
最佳实践与注意事项
防止延迟:优化 SQL 查询,避免慢查询和大事务。
网络优化:确保主从服务器之间的网络稳定性。
监控状态:定期检查 SHOW SLAVE STATUS\G,确保复制正常运行。
通过以上步骤,您可以成功搭建 MySQL 主从复制环境,实现高效的数据同步与管理。
posted on 2025-12-22 22:39 wenbin_ouyang 阅读(0) 评论(0) 收藏 举报
浙公网安备 33010602011771号