MySQL(93)什么是MySQL复制?

37 阅读4分钟

MySQL复制是一种将一个MySQL数据库服务器的数据和改动同步到另一个MySQL数据库服务器的机制。它主要用于以下场景:

  1. 数据备份:通过复制,确保数据在多个服务器上都有副本,提高数据的可用性和可靠性。
  2. 负载均衡:读操作可以分布到多个从服务器上,减轻主服务器的负载。
  3. 数据分布:将数据同步到地理上分散的多个服务器,以提高访问速度和容灾能力。

1. 复制类型

MySQL提供了多种复制类型:

  1. 异步复制:主服务器将数据变更记录到二进制日志文件中,从服务器定期读取并应用这些日志。
  2. 半同步复制:主服务器在提交事务后等待至少一个从服务器确认接收到日志,然后才返回确认给客户端。
  3. 组复制:一种多主复制,通过Paxos协议或Raft协议实现强一致性和高可用性。

2. 配置主从复制

以下是配置MySQL异步复制的步骤,包括主服务器(Master)和从服务器(Slave)的设置。

2.1 主服务器配置(Master)

首先,在主服务器的配置文件my.cnf中添加以下配置:

[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = row

重启MySQL服务:

sudo service mysql restart

在主服务器上创建一个用于复制的用户,并授予权限:

CREATE USER 'replicator'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;

获取主服务器的二进制日志位置:

SHOW MASTER STATUS;

以上命令会返回类似以下的信息:

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

记下FilePosition,以便在从服务器上配置。

2.2 从服务器配置(Slave)

在从服务器的配置文件my.cnf中添加以下配置:

[mysqld]
server-id = 2
relay-log = mysql-relay-bin

重启MySQL服务:

sudo service mysql restart

在从服务器上配置主服务器的连接信息:

CHANGE MASTER TO
MASTER_HOST='主服务器IP地址',
MASTER_USER='replicator',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;

启动从服务器的复制线程:

START SLAVE;

可以通过以下命令检查从服务器的复制状态:

SHOW SLAVE STATUS\G

输出中Slave_IO_RunningSlave_SQL_Running应该都显示为Yes,这表示复制正在正常进行。

3. 配置半同步复制

半同步复制在主服务器确认事务提交前,等待至少一个从服务器确认接收到日志。需要在主从服务器上安装半同步复制插件。

3.1 安装插件

在主服务器和从服务器上分别运行:

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

3.2 配置主服务器

在主服务器的配置文件my.cnf中添加:

[mysqld]
rpl_semi_sync_master_enabled = 1

重启MySQL服务后,启用半同步复制:

SET GLOBAL rpl_semi_sync_master_enabled = 1;

3.3 配置从服务器

在从服务器的配置文件my.cnf中添加:

[mysqld]
rpl_semi_sync_slave_enabled = 1

重启MySQL服务后,启用半同步复制:

SET GLOBAL rpl_semi_sync_slave_enabled = 1;

4. 配置组复制

组复制是一种实现多主复制的高可用方案,基于Paxos协议或Raft协议。

4.1 配置主服务器

在每个主服务器的配置文件my.cnf中添加:

[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = row
plugin-load = group_replication.so
group_replication_group_name = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
group_replication_start_on_boot = off
group_replication_local_address = "主服务器IP:33061"
group_replication_group_seeds = "主服务器IP:33061,从服务器IP:33061"
group_replication_bootstrap_group = off

重启MySQL服务:

sudo service mysql restart

4.2 启动组复制

在每个服务器上启动组复制:

SET GLOBAL group_replication_bootstrap_group = ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group = OFF;

检查组复制状态:

SELECT * FROM performance_schema.replication_group_members;

小结

MySQL的复制功能提供了多种不同的方式来实现数据的高可用性和扩展性。通过主从复制、半同步复制和组复制等配置,可以满足不同的业务需求。根据具体的场景和要求,选择适合的复制方案,并进行合理的配置和调优,以确保系统的稳定性和高效运行。