MySQL的复制功能,是构建基于MySQL的大规模、高性能应用的基础,通过为服务器配置一个或多个备库的方式来进行数据同步。复制功能不仅有利于构建高性能的应用,同时也是高可用性、可扩展性、灾难恢复、备份、以及数据仓库等工作的基础。本文记录搭建一个最基本的MySQL一主一从架构的详细步骤。
创建复制账号
在主库和备库上都创建复制账号:
1
|
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@'172.16.0.%' IDENTIFIED BY 'p4ssword';
|
配置主库和备库
主库my.cnf
1
2
|
log_bin = mysql-bin
server_id = 10
|
设置完毕后重启mysql
使用 SHOW MASTER STATUS 命令,检查输出是否与如下一致:
备库my.cnf
1
2
3
4
5
6
7
|
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 该选项会阻止任何没有特权的线程修改数据
|
导出主库并导入备库
对于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 文件后,将其导入备库
启动复制
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 语句检查复制是否正确执行
开启复制:
测试复制是否正常工作
在主库上执行增删改命令, 查看备库上数据是否同步更新