MySQL主从复制实战指南(基于二进制日志)

发布于:2025-04-18 ⋅ 阅读:(20) ⋅ 点赞:(0)

一、环境准备

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等工具实现自动故障转移。


网站公告

今日签到

点亮在社区的每一天
去签到