# MySQL主从复制配置步骤(数据已一致场景) ## 📋 前置条件 ✅ **数据已同步**:两个数据库中的`hzdyjs_xg`数据库数据已经一致 ✅ **网络互通**:两台机器可以互相访问 ✅ **MySQL运行正常**:两台机器的MySQL服务都在运行 --- ## 🚀 配置步骤 ### 第一步:在主库(67)配置主库 ```bash # 1. 进入部署脚本目录 cd /path/to/部署脚本/ # 2. 赋予执行权限 chmod +x setup-mysql-replication.sh # 3. 执行主库配置脚本 ./setup-mysql-replication.sh ``` **脚本会自动完成以下操作:** - ✅ 配置主库的`/etc/my.cnf`(添加binlog配置) - ✅ 重启MySQL服务 - ✅ 创建复制用户`repl@172.16.0.68` - ✅ 显示`SHOW MASTER STATUS`的输出 **⚠️ 重要:记录输出的binlog信息** 脚本执行后会显示类似以下输出: ``` File: mysql-bin.000001 Position: 154 ``` **请记录这两个值:** - `MASTER_LOG_FILE`: `mysql-bin.000001` - `MASTER_LOG_POS`: `154` --- ### 第二步:在从库(68)配置从库 ```bash # 1. 进入部署脚本目录 cd /path/to/部署脚本/ # 2. 赋予执行权限(如果还没执行过) chmod +x setup-mysql-replication.sh # 3. 执行从库配置脚本 ./setup-mysql-replication.sh ``` **脚本会提示输入主库的binlog信息:** ``` 请输入主库的 MASTER_LOG_FILE 和 MASTER_LOG_POS: MASTER_LOG_FILE: mysql-bin.000001 MASTER_LOG_POS: 154 ``` **输入第一步记录的值后,脚本会自动完成:** - ✅ 配置从库的`/etc/my.cnf`(添加从库配置) - ✅ 重启MySQL服务 - ✅ 配置主从复制关系 - ✅ 启动从库复制 - ✅ 显示从库状态 --- ### 第三步:验证主从复制状态 #### 3.1 在从库检查复制状态 ```bash # 检查从库IO和SQL线程是否运行 mysql -u root -p -e "SHOW SLAVE STATUS\G" | grep -i "slave_io_running\|slave_sql_running\|seconds_behind_master" ``` **正常输出应该是:** ``` Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0 ``` #### 3.2 在主库检查连接 ```bash # 查看主库的连接信息 mysql -u root -p -e "SHOW PROCESSLIST;" | grep repl ``` 应该能看到从库的连接。 #### 3.3 测试数据同步 ```bash # 在主库插入测试数据 mysql -u root -p hzdyjs_xg -e "CREATE TABLE IF NOT EXISTS test_replication (id INT PRIMARY KEY, name VARCHAR(50));" mysql -u root -p hzdyjs_xg -e "INSERT INTO test_replication VALUES (1, 'test');" # 在从库查询测试数据 mysql -u root -p hzdyjs_xg -e "SELECT * FROM test_replication;" # 如果能看到数据,说明主从复制正常 # 清理测试数据 mysql -u root -p hzdyjs_xg -e "DROP TABLE test_replication;" ``` --- ## 🔧 手动配置方法(如果脚本执行失败) ### 主库手动配置 #### 1. 编辑主库配置文件 ```bash # 编辑 /etc/my.cnf vi /etc/my.cnf ``` 添加以下配置: ```ini [mysqld] # 主从复制配置 server-id = 1 log-bin = mysql-bin binlog-format = ROW binlog-do-db = hzdyjs_xg expire_logs_days = 7 max_binlog_size = 500M # 性能优化配置 sync_binlog = 0 binlog_cache_size = 2M max_binlog_cache_size = 512M ``` #### 2. 重启MySQL ```bash systemctl restart mysqld sleep 5 ``` #### 3. 创建复制用户 ```bash mysql -u root -p < 0) **可能原因:** - 从库性能不足 - 网络延迟 - 主库写入压力大 **解决方法:** ```bash # 1. 检查从库性能 top iostat -x 1 # 2. 检查网络延迟 ping -c 10 172.16.0.67 # 3. 优化从库配置(增加缓冲) # 在从库 /etc/my.cnf 中添加: # relay_log_recovery = 1 # slave_parallel_workers = 4 ``` ### 问题4:binlog位置不匹配 **解决方法:** ```bash # 1. 在主库获取当前binlog位置 mysql -u root -p -e "SHOW MASTER STATUS;" # 2. 在从库重新配置 mysql -u root -p <