MySQL主从复制通过配置主库开启二进制日志、创建复制用户、锁定并备份数据,从库导入数据后配置主从连接信息并启动复制线程实现;需确保server-id唯一、日志格式一致,通过SHOW SLAVE STATUS检查复制状态,常见问题包括网络、权限、延迟等,可通过优化硬件、SQL、启用多线程复制及读写分离解决,数据冲突可借助pt-table-sync或手动修复。

MySQL主从复制,简单来说,就是让一台MySQL服务器(主服务器)的数据自动同步到另一台或多台MySQL服务器(从服务器)。这样可以实现读写分离、数据备份、负载均衡等目的,提高数据库的可用性和性能。
解决方案
配置MySQL主从复制,主要涉及以下几个步骤:
主服务器配置:
开启二进制日志: 这是主从复制的基础。在主服务器的
my.cnf
my.ini
[mysqld]
log_bin=mysql-bin # 开启二进制日志,并指定日志文件的前缀 binlog_format=ROW # 设置二进制日志格式为ROW,推荐使用 server-id=1 # 设置服务器ID,主服务器ID必须唯一
binlog_format
STATEMENT
ROW
MIXED
ROW
server-id
创建复制用户: 创建一个专门用于从服务器连接的MySQL用户,并授予复制权限。
CREATE USER 'replication'@'%' IDENTIFIED BY 'your_password'; GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%'; FLUSH PRIVILEGES;
replication
your_password
%
%
重启MySQL服务: 修改配置文件后,必须重启MySQL服务才能使配置生效。
锁定主服务器: 在开始复制之前,需要锁定主服务器,防止数据发生变化,保证数据一致性。
FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;
SHOW MASTER STATUS
File
Position
备份数据: 可以使用
mysqldump
mysqldump -u root -p --all-databases --master-data > backup.sql
--master-data
CHANGE MASTER TO
解锁主服务器: 备份完成后,解锁主服务器。
UNLOCK TABLES;
从服务器配置:
修改配置文件: 在从服务器的
my.cnf
my.ini
[mysqld]
server-id=2 # 设置服务器ID,从服务器ID必须唯一,且不能与主服务器相同 relay-log=relay-log # 设置中继日志文件的前缀 log_slave_updates=1 # 允许从服务器记录自己的更新 read_only=1 # 设置从服务器为只读模式,防止误操作
relay-log
log_slave_updates
read_only
重启MySQL服务: 修改配置文件后,必须重启MySQL服务才能使配置生效。
导入数据: 将主服务器备份的数据导入到从服务器。
mysql -u root -p < backup.sql
配置主从关系: 在从服务器上执行
CHANGE MASTER TO
CHANGE MASTER TO MASTER_HOST='master_ip', # 主服务器的IP地址 MASTER_USER='replication', # 复制用户名 MASTER_PASSWORD='your_password', # 复制密码 MASTER_LOG_FILE='mysql-bin.000001', # 主服务器的二进制日志文件名 MASTER_LOG_POS=154; # 主服务器的二进制日志位置
将
master_ip
your_password
mysql-bin.000001
154
SHOW MASTER STATUS
File
Position
启动复制: 启动从服务器的复制线程。
START SLAVE;
检查复制状态: 使用
SHOW SLAVE STATUS
SHOW SLAVE STATUS\G
重点关注
Slave_IO_Running
Slave_SQL_Running
Yes
Last_Error
Last_Errno
常见问题排查:
pt-table-sync
主从复制延迟过高怎么办?
主从复制延迟是一个常见的问题,主要原因是主服务器的写入速度超过了从服务器的处理速度。以下是一些常用的解决方案:
优化硬件: 升级从服务器的硬件配置,例如CPU、内存、磁盘等,提高从服务器的处理能力。特别是磁盘IO,对复制性能影响很大。
优化SQL语句: 优化主服务器上的SQL语句,减少写入量,降低从服务器的压力。
使用多线程复制: MySQL 5.6及以上版本支持多线程复制,可以提高从服务器的复制速度。在
my.cnf
my.ini
slave_parallel_workers=4 # 设置复制线程数,根据服务器配置调整
线程数不宜设置过大,否则可能会导致锁竞争,反而降低性能。
延迟复制: 如果允许一定的数据延迟,可以配置延迟复制,让从服务器延迟一段时间再进行复制。
STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = N; # 跳过N个事件 START SLAVE;
或者直接在
CHANGE MASTER TO
CHANGE MASTER TO MASTER_DELAY = N; # 延迟N秒
延迟复制可以用于数据恢复,防止误操作导致的数据丢失。
读写分离: 将读请求分发到从服务器,降低主服务器的压力,提高整体性能。可以使用MySQL Router、ProxySQL等工具实现读写分离。
如何监控MySQL主从复制状态?
监控主从复制状态对于及时发现问题至关重要。以下是一些常用的监控方法:
SHOW SLAVE STATUS
SHOW SLAVE STATUS
监控的关键指标包括:
Slave_IO_Running
Slave_SQL_Running
Seconds_Behind_Master
Last_Error
Last_Errno
Relay_Log_Space
如何处理MySQL主从复制中的数据冲突?
数据冲突是指在主服务器和从服务器上同时修改了同一行数据,导致数据不一致。以下是一些常用的处理方法:
ON DUPLICATE KEY UPDATE
ON DUPLICATE KEY UPDATE
pt-table-sync
pt-table-sync
在实际应用中,应该根据具体情况选择合适的处理方法。通常情况下,避免冲突是最好的选择,如果无法避免,可以使用
pt-table-sync
以上就是MySQL安装后如何主从复制_MySQL主从复制配置详细教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号