您好,登录后才能下订单哦!
# MySQL中怎样实现主从同步
## 一、主从同步概述
MySQL主从同步(Replication)是指将一个MySQL数据库服务器(主服务器/Master)的数据复制到一个或多个MySQL数据库服务器(从服务器/Slave)的过程。这种架构设计主要带来以下优势:
1. **读写分离**:主库负责写操作,从库承担读请求
2. **数据备份**:实时备份主库数据
3. **负载均衡**:分散数据库访问压力
4. **高可用性**:主库故障时可快速切换
## 二、主从同步原理
MySQL主从同步基于三种核心日志实现:
1. **二进制日志(Binary Log)**:
- 记录所有修改数据的SQL语句
- 包含数据变更和结构变更
- 三种格式:STATEMENT(语句)、ROW(行)、MIXED(混合)
2. **中继日志(Relay Log)**:
- 从库I/O线程从主库获取的二进制日志
- 临时存储在从库上的日志文件
3. **工作原理流程**:
主库数据变更 → 写入Binary Log → 从库I/O线程请求日志 → 写入Relay Log → 从库SQL线程重放日志 → 数据同步完成
## 三、环境准备
### 1. 服务器要求
- 主从服务器MySQL版本建议一致(至少前两个版本号相同)
- 网络互通,建议内网环境
- 示例环境:
- 主库:192.168.1.100,MySQL 8.0
- 从库:192.168.1.101,MySQL 8.0
### 2. 配置账号权限
在主库创建复制专用账号:
```sql
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'Repl@1234';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
FLUSH PRIVILEGES;
[mysqld]
server-id = 1 # 必须唯一
log_bin = mysql-bin # 开启二进制日志
binlog_format = ROW # 推荐使用ROW格式
binlog_row_image = FULL # 记录完整的行数据
sync_binlog = 1 # 每次事务提交都同步binlog
expire_logs_days = 7 # 日志保留天数
binlog_do_db = mydb # 可选:指定同步的数据库
systemctl restart mysqld
SHOW MASTER STATUS;
输出示例:
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 785 | mydb | |
+------------------+----------+--------------+------------------+
[mysqld]
server-id = 2 # 必须唯一且不同于主库
relay_log = mysql-relay-bin # 中继日志名称
read_only = ON # 从库只读(super用户除外)
log_slave_updates = ON # 级联复制时需要
replicate_do_db = mydb # 可选:指定复制的数据库
systemctl restart mysqld
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@1234',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=785;
START SLAVE;
SHOW SLAVE STATUS\G
关键指标检查: - Slave_IO_Running: Yes - Slave_SQL_Running: Yes - Seconds_Behind_Master: 0(表示无延迟)
配置方法:
# 主库安装插件
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
# 从库安装插件
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
# 主库配置
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_master_timeout = 3000; # 3秒超时
# 从库配置
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
解决方案:
# 在主库生成校验SQL
pt-table-checksum --replicate=test.checksums h=master,u=root,p=password
# 在从库同步差异
pt-table-sync --replicate=test.checksums h=master,u=root,p=password --print
常见错误处理:
# 跳过指定数量错误
STOP SLAVE;
SET GLOBAL sql_slave_skip_counter = 1;
START SLAVE;
# 或忽略特定错误码
[mysqld]
slave_skip_errors = 1062,1146
自动重连参数:
[mysqld]
slave_net_timeout = 60 # 网络超时时间(秒)
master-connect-retry = 60 # 重试间隔(秒)
-- 查看从库状态
SHOW SLAVE STATUS\G
-- 查看复制线程
SHOW PROCESSLIST;
-- 查看二进制日志
SHOW BINARY LOGS;
定期清理过期日志:
PURGE BINARY LOGS BEFORE '2023-01-01 00:00:00';
主从切换演练: “`sql – 主库设置只读 SET GLOBAL read_only = ON;
– 从库停止复制 STOP SLAVE; RESET SLAVE ALL;
## 九、GTID复制模式
### 1. GTID优势
- 全局事务标识符(Global Transaction Identifier)
- 简化故障恢复和主从切换
- 自动定位复制位置
### 2. 配置方法
```ini
[mysqld]
gtid_mode = ON
enforce_gtid_consistency = ON
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@1234',
MASTER_AUTO_POSITION = 1;
MySQL主从同步是企业级数据库架构的基础组件,正确配置和维护可显著提升系统可用性。实际生产环境中还需注意:
通过本文介绍的配置方法和问题处理技巧,您可以构建稳定可靠的MySQL复制环境。对于更高级的需求,可进一步研究MySQL Group Replication或InnoDB Cluster方案。 “`
注:本文实际约2150字,包含了主从同步的完整实现流程、配置细节、问题排查和高级特性。可根据实际MySQL版本和具体环境调整参数配置。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。