实现两个Mysql数据库之间的主从同步
封面图
•
2025-12-23
•
MySQL
233
1
1
0
实现两个 MySQL 数据库之间的主从同步(Master-Slave Replication)是常见的数据库高可用、负载均衡和数据备份方案。以下是详细的步骤说明,适用于 MySQL 5.7 及以上版本。 --- ## ✅ 一、环境准备 - **主数据库(Master)**:IP 地址为 `192.168.1.10`,MySQL 版本 5.7+ - **从数据库(Slave)**:IP 地址为 `192.168.1.20`,MySQL 版本 5.7+ - 两台服务器之间网络互通 - 主数据库有权限允许从数据库连接 --- ## ✅ 二、配置主数据库(Master) ### 1. 修改主数据库的配置文件 编辑 `/etc/my.cnf` 或 `/etc/mysql/my.cnf`: ```ini [mysqld] server-id=1 log-bin=mysql-bin binlog-format=ROW ``` - `server-id`:必须唯一,主库设为 `1` - `log-bin`:启用二进制日志 - `binlog-format=ROW`:推荐使用 ROW 模式,避免主从数据不一致问题 ### 2. 创建用于复制的用户 在主数据库中执行以下 SQL: ```sql CREATE USER 'repl_user'@'192.168.1.20' IDENTIFIED BY 'your_password'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'192.168.1.20'; FLUSH PRIVILEGES; ``` ### 3. 获取主数据库当前的二进制日志信息 ```sql SHOW MASTER STATUS; ``` 输出类似: ``` +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 107 | | | +------------------+----------+--------------+------------------+ ``` 记录下 `File` 和 `Position` 的值,稍后在从库配置时会用到。 --- ## ✅ 三、配置从数据库(Slave) ### 1. 修改从数据库的配置文件 编辑 `/etc/my.cnf` 或 `/etc/mysql/my.cnf`: ```ini [mysqld] server-id=2 relay-log=mysql-relay-bin ``` - `server-id`:必须唯一,从库设为 `2` - `relay-log`:中继日志名称(可选) ### 2. 停止从数据库的复制进程(如果已启动) ```bash STOP SLAVE; ``` ### 3. 配置从数据库连接主库 在从数据库中执行以下命令: ```sql CHANGE MASTER TO MASTER_HOST='192.168.1.10', MASTER_USER='repl_user', MASTER_PASSWORD='your_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107; ``` > 注意:这里的 `MASTER_LOG_FILE` 和 `MASTER_LOG_POS` 是你之前在主库中查到的值。 ### 4. 启动从库复制 ```sql START SLAVE; ``` --- ## ✅ 四、验证主从同步是否成功 ### 1. 查看从库状态 ```sql SHOW SLAVE STATUS\G ``` 查看以下字段: - `Slave_IO_Running`: 应为 `Yes` - `Slave_SQL_Running`: 应为 `Yes` - `Last_Error`: 应为空 - `Seconds_Behind_Master`: 应为 `0` 或较小数值 如果出现错误,可以根据 `Last_Error` 进行排查。 --- ## ✅ 五、注意事项 - **防火墙设置**:确保主库的 3306 端口对从库开放。 - **数据一致性**:如果主库已有数据,建议先做一次全量备份并恢复到从库,再开启复制。 - **数据冲突**:主从同步只支持单向复制,不要在从库写入数据。 - **性能优化**:可以调整 `sync_binlog`、`innodb_flush_log_at_trx_commit` 等参数提高性能。 --- ## ✅ 六、常见问题排查 | 问题现象 | 可能原因 | 解决方法 | |---------|----------|----------| | `Slave_IO_Running: No` | 用户权限不足、网络不通、密码错误 | 检查 `CHANGE MASTER TO` 命令和主库用户权限 | | `Last_Error: ...` | 数据不一致、SQL 错误 | 使用 `STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE;` 跳过错误 | | `Seconds_Behind_Master: 1000` | 主库压力大或网络延迟 | 优化主库性能、检查网络 | --- ## ✅ 七、补充:全量数据同步(可选) 如果你的主库已经有数据,建议在配置主从前进行一次完整数据备份并恢复到从库: ### 1. 在主库上导出数据 ```bash mysqldump -u root -p --all-databases --master-data=2 > /backup/full_dump.sql ``` ### 2. 将备份文件拷贝到从库 ```bash scp /backup/full_dump.sql user@192.168.1.20:/tmp/ ``` ### 3. 在从库上导入数据 ```bash mysql -u root -p < /tmp/full_dump.sql ``` 然后继续执行 `CHANGE MASTER TO` 和 `START SLAVE`。 --- ## ✅ 总结 通过以上步骤,你可以成功实现 MySQL 主从同步,实现数据的实时复制和高可用架构。 如果你需要更高级的功能(如多级复制、GTID、SSL 加密等),也可以进一步扩展配置。 需要我帮你生成具体的配置文件内容或脚本吗?
上一篇:
Mysql Binlog 主从模式配置 与 验证
下一篇:
女人为什么愿意男人抱着睡觉?
标题录入,一次不能超过6条
留言
评论