一、环境准备
1.1 服务器角色规划
角色 功能 IP示例
主服务器 处理写操作、生成binlog 10.1.1.6
从服务器 处理读操作、应用relaylog 10.1.1.5
1.2 系统要求
版本一致性:主从服务器MySQL版本需严格一致(推荐MySQL 8.0+)
网络互通:使用ping和telnet验证3306端口连通性
防火墙配置:
# 主服务器开放3306端口
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
二、MySQL安装与初始化
2.1 Rocky Linux 9.5安装
# 添加官方仓库(若系统未自带)
rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
# 安装MySQL
dnf install mysql-server
# 启动服务
systemctl start mysqld
systemctl enable mysqld
2.2 安全初始化
mysql_secure_installation
# 建议设置root密码、删除匿名用户、禁止远程root登录
三、主服务器配置
3.1 修改配置文件
[mysqld]
server-id=1 # 主服务器唯一ID
log-bin=mysql-bin # 启用二进制日志
log-slave-updates=true
binlog-do-db=your_db_name # 需要复制的数据库(可选)
重启 MySQL 服务
sudo systemctl restart mysqld
3.2 创建复制账户
sql
CREATE USER 'yy'@'10.1.1.5' IDENTIFIED WITH mysql_native_password BY 'xxxxxx';
GRANT REPLICATION SLAVE ON *.* TO 'yy'@'10.1.1.5';
FLUSH PRIVILEGES;
3.3 获取初始binlog位置
sql
SHOW MASTER STATUS;
# 记录 File 和 Position 值(示例:mysql-bin.000003 和 157)
四、从服务器配置
4.1 修改配置文件
# /etc/my.cnf
[mysqld]
server-id=2 # 从服务器唯一ID,不能与主服务器相同
relay-log=mysql-relay-bin # 启用中继日志
relay-log-index=mysql-relay-bin.index
read-only=1 # 设置从服务器为只读模式
4.2 配置主从关系
sql
CHANGE MASTER TO
MASTER_HOST = '10.1.1.6',
MASTER_USER = 'yy',
MASTER_PASSWORD = 'password',
MASTER_LOG_FILE = 'mysql-bin.000003',
MASTER_LOG_POS = 157;
4.3 启动复制
sql
START SLAVE;
-- MySQL 8.0+ 使用 START REPLICA;
五、验证复制状态
sql
SHOW SLAVE STATUS\G
# 关键检查项:
# - Slave_IO_Running: Yes
# - Slave_SQL_Running: Yes
# - Last_IO_Error: 空
# - Last_SQL_Error: 空
# - Seconds_Behind_Master: 0(无延迟)
验证主从
在主mysql 上
mysql> create database yyh;
Query OK, 1 row affected (0.01 sec)
在从mysql 上
mysql> show databases;
查看说明主从复制功能实现;
六、故障处理
6.1 复制中断处理
sql
-- 从库执行
STOP SLAVE;
RESET SLAVE ALL;
-- 重新配置主从关系
CHANGE MASTER TO ...;
START SLAVE;
6.2 数据不一致修复
主库执行:
sql
FLUSH TABLES WITH READ LOCK;
从库执行:
sql
STOP SLAVE;
主库导出数据:
mysqldump -u root -p --databases your_db > master_dump.sql
从库导入数据:
mysql -u root -p < master_dump.sql
主库解锁:
sql
UNLOCK TABLES;
出现报错
STOP REPLICA IO_THREAD FOR CHANNEL '';
七、最佳实践
监控工具:使用Percona Toolkit或pt-heartbeat监控复制延迟
备份策略:定期在主库执行FLUSH LOGS轮转binlog
安全加固:
使用SSL加密复制通道
限制复制账户访问IP范围
性能优化:
主库设置sync_binlog=1确保数据不丢失
从库调整innodb_flush_log_at_trx_commit=2平衡性能与可靠性
注意事项:
生产环境建议使用CHANGE MASTER TO时显式指定MASTER_AUTO_POSITION=1启用GTID复制
MySQL 8.0+版本命令已改为START REPLICA,注意版本差异
建议使用mysql_config_editor工具安全存储复制凭证
通过以上步骤,您可以快速搭建一个具备基础故障恢复能力的MySQL主从复制环境。实际生产环境中,建议结合MHA或Orchestrator等工具实现自动故障转移。