MySQL主从复制是将一台MySQL服务器的数据同步到另一台MySQL服务器上,以实现高可用和负载均衡。下面是MySQL主从复制的详细步骤及其常见错误解决方法。
步骤一:配置主库
- 修改
my.cnf
文件,启用二进制日志和自动增量 ID(binlog 和 auto_increment_offset)。
[mysqld]
log-bin=mysql-bin
server-id=1
auto_increment_offset=1
- 创建用于复制的帐户并为其授予 REPLICATION SLAVE 权限(示例用户名是
slave_user
,密码是password
)。
CREATE USER 'slave_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%';
- 锁定主库并执行
show master status;
命令,记录File
和Position
的值(例如,mysql-bin.000001
和12345
)。
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
UNLOCK TABLES;
步骤二:配置从库
- 修改从库的
my.cnf
文件,启用从库复制(replication)和自动增量 ID(auto_increment_offset),并设置 server-id
[mysqld]
server-id = 2
relay-log = mysql-relay-bin
relay-log-index = mysql-relay-bin.index
auto_increment_offset = 2
log_slave_updates = 1
replicate-do-db = db1
-
重启从库服务器
-
在从库服务器上,运行以下命令,用主库的 IP 地址和用户信息初始化从库:
CHANGE MASTER TO MASTER_HOST='master_ip_address',
MASTER_USER='slave_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=12345;
- 启动从库复制
START SLAVE;
- 查看从库复制进程是否正常,在从库服务器上执行:
SHOW SLAVE STATUS \G;
- 如果显示
Slave_IO_Running: Yes
,Slave_SQL_Running: Yes
,这意味着同步已经正常工作,可以通过修改主数据库来测试是否能正常复制到从数据库。 - 如果出现错误,查看错误日志并专门研究常见的错误案例。
常见错误解决方法
1. 问题:无法连接到主库
错误信息:Can’t connect to MySQL server on ‘host_name’ (10061)
解决方法:
- 检查主库主机的防火墙,确保 3306 端口已经打开。
- 检查主库的 my.cnf
文件,确保 bind-address
设置为主库的 IP 地址。
- 检查从库的 CHANGE MASTER TO
语句中的 MASTER_HOST
参数是否正确。
2. 问题:复制进程无法启动
错误信息:Could not parse relay log event entry. The possible reasons are: the master’s binary log is corrupted (you can check this by running ‘mysqlbinlog’ on the binary log), the slave’s relay log is corrupted (you can check this by running ‘mysqlbinlog’ on the relay log), a network problem, or a bug in the master’s or slave’s MySQL code.
解决方法:
- 检查主服务器和从服务器之间的网络连接是否正常,并确保没有重复的 server-id
值。
- 尝试清空从库服务器上的 relay-log
和 relay-log.index
文件,然后重新启动 MySQL。
示例1:
在实际应用中,如果一个大型活动在主数据库中执行了多次数据插入,因此需要在从服务器也能看到这些数据。执行"SHOW MASTER STATUS" SQL命令查看二进制文件和位置,执行"CHANGE MASTER TO"命令初始化从服务器。 然后执行一些数据插入语句,确保在主机上数据一致。 最后,在从库服务器上检查是否有刚刚插入的数据。
示例2:
假设主数据库已经出现了一些问题导致没有连接到主库的情况,所以需要进行修复。 我们尝试通过启动主服务器来解决这个问题,因为不确定在什么时候导致连接到主服务器失败。 然后,终止当前在从库客户端上运行的命令,并清空日志和缓存。 然后我们重新初始化从服务器,重新开始主从复制。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL的主从复制步骤详解及常见错误解决方法 - Python技术站