「MySQL」- 添加从库(基于位置的复制)

我们现在:(1)已有正在运行的单台数据库实例,(2)需要添加从库,形成主从复制,(3)并且我们不希望出现数据库停机;

环境概述

属性参数
操作系统:Debian GNU/Linux 10 (buster)
软件版本:Master – MySQL 5.7;Slave – MySQL 5.7;

第一步、在主库中,启用 binlog 功能

第二步、导出主库数据,并导入从库 | 导出主库数据,并导入从库 | 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 使用,需要读者具备这些技能;

参考文献

How To Set Up Master Slave Replication in MySQL