如何设置 MySQL 主站-主站复制

金钱(警告)

** 状态:** 被贬值

此教程已被删除,不再维护。

** 原因:** 本教程涵盖了一种过时的方法来构建一个多大主管 topology. 当本文最初出版时,群组复制尚未在MySQL中实现。

** 参见相反:** 您可以阅读更新的 如何在Ubuntu 16.04上配置MySQL群组复制教程来设置多主复制组

入门

扩展 Web 应用程序的第二部分将列出扩展 mysql 部署在两个 VPS 上所需的步骤。

本系列的第一篇文章列出了在两个VPS上负载平衡nginx所需的步骤,建议您先阅读 该文章

MySQL 复制是将存储在 MySQL 数据库中的单一数据集直接复制到第二个服务器的过程,这种被称为主奴隶复制的配置是典型的设置,我们的设置将比这更好,因为主奴隶复制允许将数据从一个服务器复制到另一个服务器。

本文中的示例将基于两个VPS,名为服务器C和服务器D。

服务器 C: 3.3.3

服务器 D: 4.4.4

步骤 1 - 在服务器 C 上安装和配置MySQL

我们需要做的第一件事是在我们的服务器上安装 mysql-server 和 mysql-client 包,我们可以通过键入以下内容来完成:

1sudo apt-get install mysql-server mysql-client

默认情况下,mysql 过程只会接受 localhost 的连接(127.0.0.1)。 为了更改此默认行为,并更改一些其他设置,以便复制正常工作,我们需要在服务器 C 上编辑 /etc/mysql/my.cnf。

1#server-id              = 1
2#log_bin                = /var/log/mysql/mysql-bin.log
3#binlog_do_db           = include_database_name
4bind-address            = 127.0.0.1

其中第一行是为了在我们的复制配置中独特地识别我们的特定服务器,我们需要通过删除前面的#来解读该行,第二行表示将记录任何MySQL数据库或表的更改的文件。

第三行表示我们希望在我们的服务器之间复制哪些数据库. 您可以添加尽可能多的数据库到此行。 本文将使用一个名为示例的单一数据库,以便简化。 最后一行告诉我们的服务器接受来自互联网的连接(不听 127.0.0.1)。

1server-id               = 1
2log_bin                 = /var/log/mysql/mysql-bin.log
3binlog_do_db            = example
4# bind-address            = 127.0.0.1

现在我们需要重新启动MySQL:

1sudo service mysql restart

接下来我们需要在我们的 mysql 实例中更改一些命令行设置. 回到我们的壳中,我们可以通过键入以下内容来访问我们的 root mysql 用户:

1mysql -u root -p

请注意,这个命令将提示您使用的密码是 root mysql 用户的密码,而不是我们 droplet 上 root 用户的密码。

1mysql>

一旦我们登录,我们需要运行几个命令。

我们需要创建一个伪用户,用于复制我们两个VPS之间的数据. 本文中的示例将假定您将这个用户命名为复制器

1create user 'replicator'@'%' identified by 'password';

接下来,我们需要给这个用户授权复制我们的mysql数据:

1grant replication slave on *.* to 'replicator'@'%';

不幸的是,无法根据数据库提供复制权限. 我们的用户只会复制我们在 config 文件中指示的数据库(数据库)。

对于初始 Server C 配置的最后一步,我们需要获取有关当前 MySQL 实例的一些信息,我们将在以后向 Server D 提供。

以下命令将输出一些重要信息,我们需要注意:

1show master status;

输出将看起来类似于以下,并将有两个关键信息:

1+------------------+----------+--------------+------------------+
2| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
3+------------------+----------+--------------+------------------+
4| mysql-bin.000001 |      107 | example      |                  |
5+------------------+----------+--------------+------------------+
61 row in set (0.00 sec)

我们需要记录下一步将使用的文件和位置。

步骤 2 - 在 Server D 上安装和配置 MySQL

我们需要重复在C服务器上遵循的相同步骤,首先我们需要安装它,我们可以使用以下命令:

1sudo apt-get install mysql-server mysql-client

一旦两个包被正确安装,我们需要以与我们配置服务器C相同的方式配置它,我们将通过编辑 /etc/mysql/my.cnf 文件开始。

1sudo nano /etc/mysql/my.cnf

我们需要在配置文件中更改相同的四行,就像我们之前更改的那样。

默认值在下面列出,然后是我们需要做的更改。

1#server-id              = 1
2#log_bin                = /var/log/mysql/mysql-bin.log
3#binlog_do_db           = include_database_name
4bind-address            = 127.0.0.1

请注意,与 Server C 不同, Server D 的服务器 ID 不能设置为 1。

1server-id              = 2
2log_bin                = /var/log/mysql/mysql-bin.log
3binlog_do_db           = example
4# bind-address            = 127.0.0.1

保存并停止该文件后,您需要重新启动 mysql:

1sudo service mysql restart

是时候进入MySQL壳并设置一些更多的配置选项了。

1mysql -u root -p

首先,就像在C服务器上一样,我们将创建一个伪用户,负责复制,用您想要使用的密码替换密码

1create user 'replicator'@'%' identified by 'password';

接下来,我们需要创建我们将在我们的VPS中复制的数据库。

1create database example;

我们需要给我们新创建的复制用户权限来复制它。

1grant replication slave on *.* to 'replicator'@'%';

下一步包括将我们先前注意到的信息带到我们的 mysql 实例中,从而允许复制开始。

1slave stop; 
2CHANGE MASTER TO MASTER_HOST = '3.3.3.3', MASTER_USER = 'replicator', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 107; 
3slave start;

您需要用您选择的复制密码代替密码。 MASTER_LOG_FILE 和 MASTER_LOG_POS 的值可能与上面的值不同。

在完成 mysql 主主复制之前,我们必须做的最后一件事是注意主日志文件和将其用于反向复制的位置(从服务器 D 到服务器 C)。

我们可以通过键入以下内容来做到这一点:

1SHOW MASTER STATUS;

结果将类似于以下:

1+------------------+----------+--------------+------------------+
2| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
3+------------------+----------+--------------+------------------+
4| mysql-bin.000004 |      107 | example      |                  |
5+------------------+----------+--------------+------------------+
61 row in set (0.00 sec)

注意文件和位置,因为我们将不得不输入服务器C上的文件,以完成双向复制。

下一步将解释如何做到这一点。

步骤 3 - 在 C 服务器上完成复制

在 Server C 上,我们需要在命令行上完成配置复制,运行此命令将复制来自 Server D 的所有数据。

1slave stop; 
2CHANGE MASTER TO MASTER_HOST = '4.4.4.4', MASTER_USER = 'replicator', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000004', MASTER_LOG_POS = 107; 
3slave start;

请记住,您的值可能与上述值有所不同. 请用您在设置复制用户时创建的密码更换 MASTER_PASSWORD 的值。

结果将类似于以下:

1Query OK, 0 rows affected (0.01 sec)

最后要做的是测试复制是否在两种VPS上工作,最后一步将解释一种简单的方法来测试此配置。

步骤4 - 测试硕士复制

现在已经设置了所有配置,我们现在将测试它. 要做到这一点,我们将在服务器 C 上创建示例数据库中的表,并检查服务器 D 以查看是否出现。

现在我们需要创建数据库,该数据库将在服务器之间复制,我们可以通过在 mysql 壳中键入以下内容来做到这一点:

1create database example;

一旦完成,让我们在C服务器上创建一个愚蠢的表:

1create table example.dummy (`id` varchar(10));

我们现在将检查服务器D,看看我们的表是否存在。

1show tables in example;

我们应该看到类似于以下的输出:

1+-------------------+
2| Tables_in_example |
3+-------------------+
4| dummy             |
5+-------------------+
61 row in set (0.00 sec)

最后一个测试是从服务器D中删除我们的愚蠢表,它也应该从服务器C中删除。

我们可以通过在 Server D 上输入以下内容来做到这一点:

1DROP TABLE dummy;

要确认这一点,在 Server C 上运行显示表命令将不会显示表:

1Empty set (0.00 sec)

和你有它! 工作 mysql大师复制. 像往常一样,任何反馈都超过欢迎。

Published At
Categories with 技术
comments powered by Disqus