Mysql Binlog 主从模式配置 与 验证
封面图
•
2025-10-03
•
MySQL
156
0
0
0
MySQL 的 **Binlog(二进制日志)** 是 MySQL 用于记录所有对数据库进行更改的事件(如增删改操作)的日志文件。**主从复制(Master-Slave Replication)** 就是基于 Binlog 实现的,主库将 Binlog 发送给从库,从库应用这些日志来保持数据同步。 --- ## 一、MySQL 主从模式配置 ### 1. 环境准备 - **主库(Master)**:IP 地址为 `192.168.1.100` - **从库(Slave)**:IP 地址为 `192.168.1.101` - 使用 MySQL 5.7 或更高版本(推荐 8.0) --- ### 2. 配置主库(Master) #### 2.1 修改主库的 MySQL 配置文件(`/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 日志。 - `binlog-format=ROW`:推荐使用 ROW 模式,避免主从不一致问题。 #### 2.2 创建用于复制的用户 ```sql CREATE USER 'repl_user'@'%' IDENTIFIED BY 'your_password'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'; FLUSH PRIVILEGES; ``` #### 2.3 查看主库的 Binlog 信息 ```sql SHOW MASTER STATUS; ``` 输出示例: ``` +------------------+----------+ | File | Position | +------------------+----------+ | mysql-bin.000001 | 154 | +------------------+----------+ ``` 记录下 `File` 和 `Position`,后续在从库配置时会用到。 --- ### 3. 配置从库(Slave) #### 3.1 修改从库的 MySQL 配置文件(`/etc/my.cnf` 或 `/etc/mysql/my.cnf`) ```ini [mysqld] server-id=2 relay-log=relay-bin log-slave-updates=1 read-only=1 ``` - `server-id`:必须唯一,从库设为 2。 - `relay-log`:中继日志名称。 - `log-slave-updates`:允许从库自己写入日志(可选)。 - `read-only`:设置为只读,防止误操作。 #### 3.2 配置主从连接 ```sql CHANGE MASTER TO MASTER_HOST='192.168.1.100', MASTER_USER='repl_user', MASTER_PASSWORD='your_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154; ``` > 注意:这里的 `MASTER_LOG_FILE` 和 `MASTER_LOG_POS` 要与主库的 `SHOW MASTER STATUS` 输出一致。 #### 3.3 启动从库复制进程 ```sql START SLAVE; ``` --- ### 4. 验证主从状态 #### 4.1 查看从库状态 ```sql SHOW SLAVE STATUS\G ``` 检查以下关键字段: ``` Slave_IO_Running: Yes Slave_SQL_Running: Yes Last_Error: No ``` 如果都显示 `Yes`,说明主从同步正常。 --- ## 二、主从验证 ### 1. 在主库执行操作 ```sql USE test; CREATE TABLE t1 (id INT); INSERT INTO t1 VALUES (1); ``` ### 2. 在从库查看是否同步 ```sql USE test; SELECT * FROM t1; ``` 如果能看到 `1`,说明主从同步成功。 --- ## 三、常见问题排查 | 问题现象 | 原因 | 解决方法 | |----------|------|----------| | Slave_IO_Running: No | 网络不通或权限错误 | 检查网络和用户权限 | | Last_Error: Error code 1236 | Binlog 文件不匹配 | 重新配置主从,确保 `MASTER_LOG_FILE` 和 `MASTER_LOG_POS` 正确 | | Slave_SQL_Running: No | SQL 执行错误 | 查看 `Last_SQL_Error`,修复后 `START SLAVE` | --- ## 四、补充说明 - **Binlog 格式**: - `STATEMENT`:记录 SQL 语句(可能有主从不一致风险) - `ROW`:记录行级变更(推荐,更安全) - `MIXED`:混合模式(默认) - **GTID(全局事务标识符)**:适用于 MySQL 5.6+,可简化主从配置,但需额外配置。 --- ## 五、总结 | 步骤 | 内容 | |------|------| | 1 | 配置主库 `my.cnf`,启用 Binlog | | 2 | 创建复制用户并授权 | | 3 | 配置从库 `my.cnf`,设置 `server-id` | | 4 | 使用 `CHANGE MASTER TO` 配置主从关系 | | 5 | 启动从库复制进程 `START SLAVE` | | 6 | 验证主从状态 `SHOW SLAVE STATUS` | --- 如果你需要我帮你生成完整的配置脚本或者处理特定版本的 MySQL,请告诉我你的 MySQL 版本和具体需求!
上一篇:
卸载mysql后重装,原来的用户名密码还在,是怎么回事
下一篇:
实现两个Mysql数据库之间的主从同步
标题录入,一次不能超过6条
返回顶部
留言
留言
评论