我们现在:(1)已有正在运行的单台数据库实例,(2)需要添加从库,形成主从复制,(3)并且我们不希望出现数据库停机;
环境概述
| 属性 | 参数 |
|---|---|
| 操作系统: | Debian GNU/Linux 10 (buster) |
| 软件版本: | Master – MySQL 5.7;Slave – MySQL 5.7; |
第二步、导出主库数据,并导入从库 | 导出主库数据,并导入从库 | Export and Import
How To Set Up Master Slave Replication in MySQL
第一步、从主库导出数据
使用 Xtrabackup 创建全量备份:
#!/bin/sh xtrabackup --backup --user=root --password --target-dir=/data/backups/
对全量备份数据进行预备操作:
#!/bin/sh xtrabackup --prepare --target-dir=/data/backups/
第二步、将数据导入从库
数据导入:将数据复制到目标主机,将数据导入 MySQL 数据目录(详细过程略过)。
调整权限:修改数据目录权限,以允许 MySQL 访问。
启动服务:启动数据库服务,并检查 MySQL 能够成功启动。
其他方法:使用 mysqldump 导出
锁定所有的表,防止数据更新:
mysql> FLUSH TABLES WITH READ LOCK;
查看在主库中 binlog 位置(这是从库复制开始的位置,需要记住这些数字):
mysql> SHOW MASTER STATUS; +---------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+--------------+------------------+-------------------+ | binlog.000001 | 497120 | | | | +---------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
使用 mysqldump 命令导出数据,并导入从库中(详细过程略过)。
解锁之前锁定的表,以允许数据写入:
mysql> UNLOCK TABLES;
第三步、在从库中,调整配置以启用复制 | Enable Replication on Slave
第一步、配置复制功能
修改配置文件:
[mysqld] server_id = 93 relay_log = /var/log/mysql/relaylog log_bin = /var/log/mysql/binlog
重启数据库服务(略过)。
第二步、查找 binlog 位置
在 Xtrabackup 备份目录中,xtrabackup_binlog_info 文件保存 binlog 位置:
# cat /path/to/backup/xtrabackup_binlog_info binlog.000051 2499643
第三步、启动从库复制
STOP SLAVE;
CHANGE MASTER TO master_host='<ip address>', master_port=3306,
master_user='replication', master_password='<your password>',
master_log_file='binlog.000051', master_log_pos=2499643;
START SLAVE;
注意事项:
1)参数 master_log_pos、master_port 不要使用引号,否则会产生语法错误;
注意事项
最小配置:在本笔记中涉及的配置文件是 MySQL 最小化配置,旨在表述意图,请根据需要自行调整;
细节精简:见对于非关键步骤(比如配置文件位置、编辑方式等等),我们只进行简述,旨在缩短篇幅并清晰结构;
重点内容:添加从库必须保证数据一致性,这是需要重点关注的部分;
技能要求:在笔记中,涉及 XtraBackup 使用,需要读者具备这些技能;