配置 MySQL 主从复制

MySQL的复制功能,是构建基于MySQL的大规模、高性能应用的基础,通过为服务器配置一个或多个备库的方式来进行数据同步。复制功能不仅有利于构建高性能的应用,同时也是高可用性、可扩展性、灾难恢复、备份、以及数据仓库等工作的基础。本文记录搭建一个最基本的MySQL一主一从架构的详细步骤。

1. 创建复制账号

在主库和备库上都创建复制账号:

1
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@'172.16.0.%' IDENTIFIED BY 'p4ssword';

2. 配置主库和备库

主库my.cnf

1
2
log_bin = mysql-bin
server_id = 10

设置完毕后重启mysql

使用 SHOW MASTER STATUS 命令,检查输出是否与如下一致:

备库my.cnf

1
2
3
4
5
log_bin = mysql-bin
server_id = 2
relay_log = /var/lib/mysql/mysql-relay-bin
log_slave_updates = 1
read_only = 1

log_slave_updates = 1 允许备库将其重放的事件也记录到自身的二进制日志中
read_only = 1 该选项会阻止任何没有特权的线程修改数据

3. 导出主库并导入备库

对于innoDB表, 可以使用一下命令来转储主库数据:

1
mysqldump --single-transaction --all-databases --master-data=1 --host=172.16.0.170 -uroot -p > mysql_master_dump.sql

选项 –single-transaction 使得转储的数据为事务开始前的数据; 如果使用的是非事务型表,可以使用 –lock-all-tables 选项来获得所有表的一致性转储

获得转储 mysql_master_dump.sql 文件后,将其导入备库

4. 启动复制

1
2
3
4
5
CHANGE MASTER TO MASTER_HOST='172.16.0.170',
MASTER_USER='repl',
MASTER_PASSWORD='p4ssword',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=154;

执行完毕后,可以通过 SHOW SLAVE STATUS 语句检查复制是否正确执行

运行

1
START SLAVE

命令开始执行复制

5. 测试复制是否正常工作

在主库上执行增删改命令, 查看备库上数据是否同步更新