MySQL之复制环境搭建与线程管理实战指南
一、前言
大家好!MySQL复制是构建高可用、可扩展数据库架构的核心技术。写作本文的初衷,是希望与各位开发者、运维人员分享复制环境的搭建流程、线程管理技巧及常见问题解决方案,通过通俗易懂的解析和实战案例,帮助大家快速掌握复制功能的落地细节。文中将结合配置步骤、线程原理和代码实例,助力读者构建稳定可靠的复制系统。欢迎随时交流探讨!
二、复制环境搭建:从准备到启动
2.1 环境规划与前提条件
假设主库(Master)和备库(Replica)的配置如下:
角色 | IP地址 | 数据库版本 | 数据目录 | 复制账号 |
---|---|---|---|---|
主库 | 192.168.0.10 | 5.7.36 | /data/mysql | repl:Repl@123 |
备库 | 192.168.0.11 | 5.7.36 | /data/mysql | repl:Repl@123 |
前提条件:
- 主备库网络互通,主库开放3306端口。
- 主库已创建业务数据库(如
myapp
)并开启Binlog。
2.2 主库配置:启用日志与创建账号
2.2.1 配置文件(my.cnf)
[mysqld]
server-id = 10 # 唯一标识主库
log-bin = mysql-bin # 二进制日志文件名前缀
binlog-format = ROW # 使用基于行的复制模式
binlog-do-db = myapp # 仅复制myapp数据库(可选)
- 重启主库:
systemctl restart mysql
- 验证日志:执行
SHOW MASTER STATUS
,确保输出类似:+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 154 | myapp | | +------------------+----------+--------------+------------------+
2.2.2 创建复制账号
CREATE USER 'repl'@'192.168.0.%' IDENTIFIED BY 'Repl@123';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'192.168.0.%';
FLUSH PRIVILEGES;
2.3 备库配置:初始化与参数调整
2.3.1 配置文件(my.cnf)
[mysqld]
server-id = 20 # 唯一标识备库,不可与主库重复
relay-log = mysql-relay # 中继日志文件名前缀
log-slave-updates = 1 # 允许备库将重放事件写入Binlog(如需级联复制)
read-only = 1 # 设为只读,避免非特权用户写入
slave-parallel-workers = 4 # 开启并行复制(5.7+,线程数建议为CPU核心数50%)
slave-parallel-type = LOGICAL_CLOCK # 基于组提交的并行模式
- 重启备库:
systemctl restart mysql
2.3.2 数据初始化(XtraBackup方式)
- 主库备份(在主库执行):
xtrabackup --backup --host=192.168.0.10 --user=root --password=Root@123 --target-dir=/backup
- 备份传输(到备库):
scp -r /backup/* 192.168.0.11:/data/backup
- 备库恢复:
xtrabackup --prepare --target-dir=/data/backup xtrabackup --copy-back --target-dir=/data/backup chown -R mysql:mysql /data/mysql
三、启动复制:从连接主库到验证状态
3.1 配置备库连接主库
在备库执行以下命令,关联主库信息:
CHANGE MASTER TO
MASTER_HOST='192.168.0.10',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@123',
MASTER_LOG_FILE='mysql-bin.000001', -- 主库当前Binlog文件名(通过SHOW MASTER STATUS获取)
MASTER_LOG_POS=154; -- 主库当前Binlog位置