0%

MySQL Replication 主从复制 配置

介绍

Replication 可以使数据从一个MySQL数据库(master)复制到一个或多个MySQL数据库(slave)中,默认情况下该复制过程是异步的。我们可以通过配置来实现复制所有的database或者指定的database

MySQL Replication 的优点如下:

  • 横向扩展:可以将负载分布在多个slave上以提高性能。所有的写操作都必须在master上进行,但是读操作可以分布在一个或多个slave上。这样的模型可以提高写入性能,因为master专注于数据更新,同时多个slave可以显著的提高读取速度。
  • 数据安全:定期备份是保护数据的重要手段之一,若在master上进行数据备份则需要使master处于readonly状态,这将影响写操作 。而salve可以暂停复制的过程,所以slave上进行数据备份而不会影响到master。
  • 分析:数据是从master上实时写入的,数据分析可以在slave上进行而不影响master的性能。
  • 远程数据分发:如果master的物理位置距离较远,我们可以在临近的地方创建slave,方便使用数据使用,而不需要总是访问远端的master。

原理

作为master 的MySQL实例将数据的变更操作作为”事件”记录到binary log中,slave 的MySQL实例被被指为读取master的binary log,slave将读取到的binary log写入自己的中继日志中,然后slave回把相关的事件进行执行。slave具体执行哪些事件由slave决定。

配置

创建用于复制的账号

进入master的MySQL实例,执行以下操作:

执行以下命令创建账号,其中172.20.254.176为slave的MySQL的ip,liuqitech@2020为密码。

1
CREATE USER 'slave'@'172.20.254.176' IDENTIFIED BY 'liuqitech@2020';

分配权限,其中replication slave 表示 主从复制权限

1
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'172.20.254.176';

刷新权限

1
flush privileges;
master配置

开启二进制日志并设置唯一的server-id。修改my.cnf,添加如下配置

1
2
3
[mysqld]
log-bin=mysql-bin #表示开启binlog,并且指定二进制日志文件名为mysql-bin
server-id=1 #唯一的服务ID

重启MySQL使之生效

slave配置

被指唯一的server-id。修改my.cnf,添加如下配置

1
2
[mysqld]
server-id=2

重启MySQL使之生效

获取master的二进制日志文件坐标

master上执行以下操作

1
2
3
4
5
6
mysql > SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 67 | | |
+------------------+----------+--------------+------------------+

记录File、Position的值

连接slave到master

slave上执行以下操作

1
2
3
4
5
6
mysql> CHANGE MASTER TO
MASTER_HOST='172.20.254.175',
MASTER_USER='slave',
MASTER_PASSWORD='liuqitech@2020',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=67;
1
mysql> start slave;
查看状态

slave 中执行 查看状态

1
mysql> SHOW SLAVE STATUS \G

观察是否正常运行中

1
2
Slave_IO_Running: Yes
Slave_SQL_Running: Yes