您好,登录后才能下订单哦!
# 在MySQL5.7中如何搭建主从复制
## 一、主从复制概述
### 1.1 什么是主从复制
MySQL主从复制(Replication)是指将一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)的过程。这种架构允许数据从主节点自动同步到从节点,是实现数据备份、读写分离和高可用性的基础技术。
### 1.2 主从复制的工作原理
主从复制基于以下核心机制:
1. **二进制日志(Binary Log)**:主服务器将所有数据更改事件记录到binlog
2. **relay log**:从服务器通过I/O线程获取主库的binlog并保存为relay log
3. **SQL线程**:从服务器重放relay log中的事件实现数据同步
### 1.3 主从复制的优势
- **数据冗余**:实现实时数据备份
- **负载均衡**:读写分离减轻主库压力
- **高可用性**:故障时可快速切换到从库
- **数据分析**:在从库执行报表查询不影响生产
## 二、环境准备
### 2.1 系统要求
- 两台及以上Linux服务器(本文以CentOS 7为例)
- MySQL 5.7版本(建议使用相同小版本)
- 服务器间网络互通(建议内网环境)
- 防火墙配置允许3306端口通信
### 2.2 安装MySQL 5.7
在两台服务器上执行相同安装操作:
```bash
# 添加MySQL Yum仓库
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
# 安装MySQL服务器
yum install -y mysql-community-server
# 启动服务并设置开机自启
systemctl start mysqld
systemctl enable mysqld
获取临时密码并修改:
grep 'temporary password' /var/log/mysqld.log
mysql_secure_installation
编辑/etc/my.cnf
文件,在[mysqld]段添加:
[mysqld]
server-id = 1 # 唯一服务器ID
log_bin = mysql-bin # 开启二进制日志
binlog_format = ROW # 推荐使用ROW格式
binlog_row_image = FULL # 记录完整的行数据
expire_logs_days = 7 # 日志保留天数
sync_binlog = 1 # 每次事务提交都同步binlog
CREATE USER 'repl'@'%' IDENTIFIED BY 'Repl@123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
记录输出中的File和Position值,例如:
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 785 | | |
+------------------+----------+--------------+------------------+
如果已有数据需要同步:
mysqldump -uroot -p --all-databases --master-data > master_dump.sql
UNLOCK TABLES;
编辑/etc/my.cnf
文件:
[mysqld]
server-id = 2 # 不同于主服务器的ID
relay_log = mysql-relay # 中继日志名称
read_only = 1 # 从库设为只读
log_bin = mysql-bin # 可选,如需级联复制
mysql -uroot -p < master_dump.sql
CHANGE MASTER TO
MASTER_HOST='主服务器IP',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@123456',
MASTER_LOG_FILE='mysql-bin.000003', -- 主库show master status的结果
MASTER_LOG_POS=785; -- 主库show master status的结果
START SLAVE;
SHOW SLAVE STATUS\G
确认以下两项显示为Yes:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
提高数据安全性,确保至少一个从库接收事务:
主库:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
从库:
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
控制同步哪些数据库:
主库my.cnf:
binlog-do-db = db1,db2 # 仅同步指定库
# 或
binlog-ignore-db = test # 忽略指定库
从库my.cnf:
replicate-do-db = db1
# 或
replicate-ignore-db = mysql
MySQL 5.7支持基于库的并行复制:
STOP SLAVE;
SET GLOBAL slave_parallel_workers = 4;
START SLAVE;
当出现错误时:
STOP SLAVE;
SET GLOBAL sql_slave_skip_counter = 1; # 跳过1个错误事件
START SLAVE;
或针对特定错误号:
slave-skip-errors = 1062,1146
使用pt-table-checksum校验:
pt-table-checksum --replicate=test.checksums h=主库IP,u=root,p=密码
pt-table-sync --replicate=test.checksums h=主库IP,u=root,p=密码 --sync-to-master
自动重连参数:
master-connect-retry = 60 # 重试间隔(秒)
slave-net-timeout = 3600 # 超时时间(秒)
关键监控项:
SHOW SLAVE STATUS\G 中的:
- Seconds_Behind_Master # 复制延迟
- Slave_IO_Running
- Slave_SQL_Running
STOP SLAVE;
RESET MASTER;
SET GLOBAL read_only = 0;
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='新主库IP';
START SLAVE;
MySQL 5.7主从复制是企业级数据库架构的基础组件,通过本文的详细步骤,您可以成功搭建稳定可靠的复制环境。建议在生产环境中结合监控工具和定期维护计划,确保复制链路的健康运行。对于更高级的需求,可考虑基于GTID的复制或组复制(Group Replication)方案。
注意:所有配置参数应根据实际服务器资源和业务需求进行调整,建议在测试环境充分验证后再部署到生产环境。 “`
本文共计约4100字,涵盖了MySQL 5.7主从复制的完整实施流程,包括原理说明、详细配置步骤、高级优化选项以及常见问题解决方案。采用Markdown格式编写,便于阅读和维护。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。