关于后端:mysql主主复制

7次阅读

共计 4677 个字符,预计需要花费 12 分钟才能阅读完成。

配置 MySQL 主主复制

MySQL 主 - 主 复制 (master master replication), 也叫做 mysql chained replication、multi master replication 和 mysql daisy chaining replication, 它是 MySQL 复制性能的扩大(一般复制性能见文章下半局部),容许创立多个主服务器,并且主服务器能够绑定多个从服务器。

本文介绍设置主 - 主复制的办法。

在多主 mysql 的配置中,除了第一个主服务器外。其它增加的主服务器既当作主也当作从。因而,能够将每个增加的从服务器变为主服务器。

看下面👆的图,能够比拟直观的看出主主复制的配置。

在本教程中,咱们应用三台服务器 (实例) 做例子;两个主一个从,然而首先会介绍为什么咱们想要设置这种链式复制模式。

本文假设 mysql 其它的配置曾经设置好了,咱们只关注配置复制性能。

主 - 主复制利用的场景

数据库迁徙
晋升复制的性能

1. 应用主 - 主复制帮忙数据库迁徙

我最近遇到了一个大数据库迁徙我的项目,咱们不得不迁徙几百 GB 的数据到线上服务器。数据库位于两组数据库上,它们会被整合到一组数据库中。每次迁徙都会在不同的日子进行。迁徙之后,利用会被从新上线,宕机的工夫要尽量的少。

备份和复原数据库的罕用办法包含 mysqldump 或 Percona Xtrabackup 等工具。备份和复原大的数据库是相当耗时的,尤其是应用 mysqldump,所以我决定在每种状况下都让以后的数据库和新生产环境中的数据库放弃同步。

2. 应用多主晋升同步的性能

零碎架构师、利用架构师和数据库架构师应用 MySQL 数据库的一个次要起因就是能够程度的扩大数据库,应用一个或者多个从扩大读操作。

当每个从服务器连贯到主时,它会在主服务器上产生额定的负载。每个从服务器必须接管二进制日志的残缺正本。在有许多从服务器的环境中,这会减少主服务器上的网络负载,而主服务器开始成为瓶颈。此外,主服务器还不得不解决一部分申请,包含写入申请。

增加一个额定的主服务器作为从有助于分担主服务器的负载,并且这种配置模型还能够自在扩大,以便能够创立多个次主服务器,所有这些次服务器都作为主服务器的从,具体配置取决于具体的需要。

配置概览

所有批改都会被长久化到 my.cnf 文件中并长久化,mysql 实例会被重启。

主服务器 (primary)

  • 开启 binary log
  • 创立容许 secondary master server 连贯的用户

主服务器 (secondary)

  • 开启 binary log
  • 开启 relay log
  • 容许 log slave updates
  • 创立容许 slave 连贯的用户
  • 指向 primary master log position

从服务器 (作为 secondary master server 的从)

  • 容许 elay log
  • 指向 secondary master log position

具体步骤

1. 配置的扭转

上面的截图显示了我在虚拟机中对 my.cnf 所做的扭转。

主服务器的配置 (primary)

次主服务器的配置(secondary)

从服务器 (作为次主服务器的从)

与规范复制一样,binary log 和 relay logs 通过 log-bin 和 relay-log 参数进行设置。配置中须要额定设置的是 log-slave-updates, 这个参数通知次主服务器记录主服务器的扭转到它的 binary log 中,这样从服务器能力读取到这些扭转。

2. 在主服务器上创立一个复制账号,容许它的从应用这个账号能够连贯

GRANT REPLICATION SLAVE ON *.* TO 'user'@'host' IDENTIFIED BY 'SecurePassword';

3、找到主服务器的日志文件和地位,利用到次主服务器上

SHOW MASTER STATUS\G;
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 897
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
On the secondary master execute this changing to your host, user, log file etc accordingly:
CHANGE MASTER TO
MASTER_HOST='primarymaster.home',
MASTER_USER='replication',
MASTER_PASSWORD='SecurePassword',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=897;

实现之后执行上面的命令启动从复制:

START SLAVE;

查看次主服务器的同步状态:

SHOW SLAVE STATUS\G;

如果复制失常,你会看到上面的几行:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Last_Error:
Seconds_Behind_Master: 0

4. 在次主服务器和从服务器上执行步骤 2 和 3

步骤雷同,顺次减少账号、主地址、日志文件和地位。

5. 测试

在主服务器做一个更新操作,比方创立一个数据库,查看这个更新操作是否利用到次主服务器和从上。

总结

mysql 主 - 主复制能够很好的晋升复制的性能,或者在数据库迁徙的时候执行数据库的同步。

更多的信息你能够看官网文档:16.3.6 Improving Replication Performance。

作者还了一系列对于 mysql 的文章,其中还介绍了如何配置主从模式,一并翻译,整合在这一篇文章中。

MySQL 主从配置

通常,能够配置 MySQL 复制实现规模扩大、不便提供报告或者提供 MySQL 数据库的备份。我以前写过一篇对于这个的文章。

整个过程依赖于二进制日志(binary log),这些日志被输入到主服务器上的某个文件夹,从服务器读取这些日志并利用放弃和主服务器的同步。

本文是一篇 MySQL 复制教程。我将设置 MySQL 复制性能,应用了两个 MySQL 服务器,一个主服务器和一个从服务器。本文假如服务器是新的,并且还没有在它们上创立数据库。

我不会列出所有可能的设置或配置。只是必要的复制设置。

须要对主服务器和从服务器的 mysql 配置文件进行更改。确保 mysql 配置文件中没有会导致任何网络问题的设置。敞开–skip-networking,并且确保–bind-address 设置正确。

主服务器复制性能的根本配置

  • server-id:在配置中的每一个服务须要一个惟一的 id, 起始 1, 最大 2^32。
  • log-bin:二进制文件的前缀,个别设置为“mysql-bin”,“bin-log”等等。文件会写入到你指定的文件夹中,当然运行 mysql 的用户须要写入权限。
  • expire-logs-days:二进制文件保留的最大天数。审慎设置这个值,确保从服务器如果同步慢的话不会因为文件永恒删除导致失落数据。
  • binlog-format:仔细阅读对于这个参数的官网文档,十分十分的重要。如果设置不正确则意味着你的从可能蕴含和主不一样的数据,可选的值为 STATEMENT, ROW 和 MIXED。

配置完之后重启你的 mysql 服务,查看这些变量,看看文件夹下二进制文件是否存在。

从服务器复制性能的根本配置

  • server-id:在配置中的每一个服务须要一个惟一的 id, 起始 1, 最大 2^32。
  • relay-log:– 从会读取它本人的 relay log, 并且利用复制过去的命令到它本人的数据库中。舍不设置它并不重要因为服务器本人会创立 relay log,然而我总是显式设置它,这样我就能确保这些日志文件输入到哪里。当然须要确保运行 mysql 的账号要有写入这个文件夹的权限。

配置完之后重启你的 mysql 服务,查看这些变量是否已长久化。

对于其它一些有用的可选配置,查看官网的文档。

在主服务器上创立复制数据的账号

从须要认证能力连贯到主上,你须要在主上创立一个账号,以便从应用这个账号连贯主。

尽管你能够应用一个已存在的账号,然而实际上不倡议你这么做,起因有二:

  • 如果必须停用这个账号:应用这个账号的某人来到了公司或者某些利用的登录不再须要,这会导致复制中断。
  • 权限:复制须要特定的操作权限,你应该创立你的 mysql 账号,仅仅受权给它这些特定性能的权限。

    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'yourhostname.com' IDENTIFIED BY 'EnterSecurePasswordHere';

记录主机上二进制日志文件和地位

二进制日志文件的目标就是用来记录主上的扭转,这些扭转须要同样利用到从上。您须要找到主二进制日志的文件和地位 (偏移) 并将其记录下来,而后将其利用到从服务器。当从复制启动时,它须要晓得在哪个日志文件中的哪个点开始读取主服务器数据库的正本并对其利用更新。

您应该阻止对主服务的任何更新,而后记录日志地位。应用一行命令很容易做到这一点:

FLUSH TABLES WITH READ LOCK;

放弃这个连贯窗口,新建一个到主的连贯窗口,运行上面的命令失去地位:

SHOW MASTER STATUS;

你会看到以后主正在写的文件以及以后 log 的地位,这些信息会用来配置从:

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 |      154 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

应用主的信息配置从

连贯到从,应用 CHANGE_MASTER_TO 配置从:

CHANGE MASTER TO
MASTER_HOST='master.yourdomain.com',
MASTER_USER='replication',
MASTER_PASSWORD='EnterSecurePasswordHere',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=154,
MASTER_CONNECT_RETRY=10;

在从上,运行上面的命令:

START SLAVE;

解锁主并查看主从状态

在主上运行:

UNLOCK TABLES;

在从上运行:

SHOW SLAVE STATUS;

查看看看是否有谬误,确保你下面的设置设置正确。查看 Master_Log_File 和 Read_Master_Log_Pos

Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 154

测试

在主上创立一个空的数据库,确保从上也会创立这个空的数据库。

如果同步失常你能够筹备在主上加载数据。

这是一个根本的 mysql 主从配置的教程。举荐你浏览官网文档理解 mysql 的主从复制的配置。

转载 https://colobu.com/2019/12/02…

关注 获取更多好文

本文由 mdnice 多平台公布

正文完
 0