MySQL主从复制
MySQL 主从复制是一种常用的数据复制机制,它允许在一个或多个从属服务器上复制来自主服务器的数据更改。这种机制对于实现数据备份、负载均衡、读写分离等多种应用场景都非常有用。下面是关于 MySQL 主从复制的详细说明:
MySQL 主从复制的概念
- 主服务器:主服务器接收所有的写操作(INSERT、UPDATE、DELETE 等),并将这些操作记录到二进制日志(Binary Log)中。
- 从服务器:从服务器通过读取主服务器的二进制日志,并在本地执行相同的更改来复制数据。
MySQL 主从复制的工作原理
- 写操作记录:当主服务器接收到写操作时,这些操作会被记录到二进制日志中。
- 日志传输:从服务器定期轮询主服务器的二进制日志,并将这些日志文件复制到自己的中继日志(Relay Log)中。
- 日志执行:从服务器从中继日志中读取这些操作,并在本地执行同样的更改,以使数据保持一致。
MySQL 主从复制的配置步骤
以下是在一个典型的 MySQL 主从复制环境中配置主从复制的基本步骤。假设我们有一个主服务器(Master)和一个从服务器(Slave)。
步骤 1: 准备主服务器
- 开启二进制日志:确保主服务器的二进制日志功能已开启。
[root@mysql-node1 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
log-bin=mysql-bin
server-id=1
/etc/init.d/mysqld restart
#记得重启使配置生效
2. 创建复制用户:在主服务器上创建一个用于复制的用户。
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
- 获取二进制日志的位置:记录当前的二进制日志文件名和位置,稍后从服务器需要用到这些信息。
SHOW MASTER STATUS;
示例:
步骤 2: 准备从服务器
- 配置从服务器:确保从服务器的配置正确。
[root@mysql-node2 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=2
/etc/init.d/mysqld restart
#记得重启使配置生效
2. 初始化从服务器:从主服务器导出数据并导入到从服务器。
# 在主服务器上
mysqldump --all-databases > all-databases.sql
# 将 all-databases.sql 复制到从服务器
# 在从服务器上
mysql < all-databases.sql
- 配置复制:在从服务器上配置复制。
CHANGE MASTER TO
#该示例中的host为172.25.254.10
```sql
MASTER_HOST='$master_host',
MASTER_USER='repl',
MASTER_PASSWORD='password',
#该处的二进制日志文件需要对应实际上获取的二进制日志名称
MASTER_LOG_FILE='mysql-bin.000001',
#该处的端口号同样的需要对应实际表中给出的端口号
MASTER_LOG_POS=$position;
其中 MASTER_LOG_FILE
和 MASTER_LOG_POS
是之前从主服务器获取的信息。
- 启动复制:启动从服务器上的复制进程。
START SLAVE;
步骤 3: 验证复制状态
-
查看复制状态:在从服务器上检查复制状态。
SHOW SLAVE STATUS\G
如果复制正常工作,您应该能看到类似
Slave_IO_Running: Yes
和Slave_SQL_Running: Yes
的输出。
示例:
-
解决复制问题:如果遇到问题,可以查看错误日志或使用
SHOW SLAVE STATUS\G
查找错误信息。
MySQL 主从复制的类型
- 基于语句的复制 (SBR):在主服务器上执行的 SQL 语句直接被复制到从服务器上执行。
- 基于行的复制 (RBR):只复制实际受影响的数据行,而不是整个 SQL 语句。
- 混合模式复制 (MBR):结合了 SBR 和 RBR 的优点,对于大多数情况,使用 RBR,但对于无法可靠复制的语句(如函数或触发器),使用 SBR。
MySQL 主从复制的注意事项
- 数据类型兼容性:确保主服务器和从服务器的数据类型兼容,特别是在使用基于行的复制时。
- 唯一键约束:如果表中有唯一键约束,确保主服务器和从服务器上的数据不会导致唯一键冲突。
- 性能监控:定期检查复制延迟和性能指标,以确保复制过程的效率。