如何在MySQL中设置主从复制

原作者:Etel Sverdlov 转载&翻译:https://www.digitalocean.com/community/tutorials/how-to-set-up-master-slave-replication-in-mysql

如何在MySQL中设置主从复制

关于MySQL复制

MySQL复制是一个允许您通过将MySQL数据从主数据库自动复制到从数据库来轻松维护MySQL数据的多个副本的过程。这可能有很多原因,包括为数据设置备份,在不使用主数据库的情况下对其进行分析,或仅仅作为向外扩展的方法。

本教程将介绍一个非常简单的mysql复制示例 - 一个master将向单个slave发送信息。要使进程正常工作,您需要两个IP地址:一个主服务器和一个从服务器。

本教程将使用以下IP地址:

12.34.56.78-主数据库

12.23.34.45-从属数据库

PS:请自行更改IP地址 , 并事先配置好主从服务器的网段Subnet、网关GateWay、地址IPAdress、DNS。

 

建立

本文假设您拥有具有sudo权限的用户并安装了MySQL。如果您没有mysql,可以使用以下命令安装它:

sudo apt-get install mysql-server mysql-client

RHEL/Fedora/CentOS/Oracle系统的使用下面命令:

# 默认包管理命令,这里没有写版本号,目前来看默认是mysql8.0,如果需要安装特定版本,请 yum search mysql-server 查找
sudo yum install mysql-server mysql-client

# 如果您已经安装了dnf包管理器,也可以使用下面命令:
sudo dnf install mysql-server mysql-client

第一步 - 配置主数据库

打开主服务器上的mysql配置文件。

sudo nano /etc/mysql/my.cnf

进入该文件后,我们需要进行一些更改。

第一步是找到看起来像这样的部分,将服务器绑定到本地主机:

bind-address = 127.0.0.1

将标准IP地址替换为服务器的IP地址。

bind-address = 12.34.56.78

下一个配置更改是指位于[mysqld]部分中的server-id。您可以为此位置选择任意数字(从1开始可能更容易),但该数字必须是唯一的,并且不能与复制组中的任何其他服务器ID匹配。我要继续设置为 1号 节点。

# 确保取消注释此行。

server-id = 1

转到log_bin行。这是保留复制的真实细节的地方。从站将复制日志中注册的所有更改。对于此步骤,我们只需要取消注释引用log_bin的行:

log_bin = /var/log/mysql/mysql-bin.log

最后,我们需要指定将在从属服务器上复制的数据库。您可以通过为所需的所有数据库重复此行来包含多个数据库。

binlog_do_db = newdatabase

完成所有更改后,继续保存并退出配置文件。

刷新MySQL。

sudo service mysql restart

接下来的步骤将在MySQL shell中进行。

打开MySQL shell。

mysql -u root -p

我们需要为奴隶授予特权。您可以使用此行命名您的从站并设置其密码。该命令应采用以下格式:

GRANT REPLICATION SLAVE ON *。* to'slave_user'@'%'  Identified by  'password' ;

接着输入下列命令:

flush privileges;

下一部分有点挑剔。要完成此任务,您需要打开一个新窗口或选项卡,以及您已经使用了几步的新窗口或选项卡

当前选项卡中 切换到“newdatabase”。

use newdatabase;

然后,锁定数据库以防止任何新的更改:

  FLUSH TABLES WITH READ LOCK;

然后键入:

  SHOW MASTER STATUS;

你会看到一个看起来像这样的表:

mysql> SHOW MASTER STATUS; 
+ ------------------ + ---------- + -------------- + ---- -------------- + 
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
+ ------------------ + ---------- + -------------- + ---- -------------- + 
| mysql-bin.000001 | 107 | newdatabase | | 
+ ------------------ + ---------- + -------------- + ---- -------------- + 
1行(0.00秒)

这是从数据库开始复制的位置。记录这些数字,它们将在以后有用。

如果在同一窗口中进行任何新更改,数据库将自动解锁。因此,您应该打开新选项卡或窗口,然后继续执行后续步骤。

继续使用数据库仍然锁定,在新窗口中使用mysqldump导出数据库(确保在bash shell中输入此命令,而不是在MySQL中)。

mysqldump -u root -p --opt newdatabase> newdatabase.sql

现在,返回到原始窗口,解锁数据库(使其再次可写)。完成退出shell。

  UNLOCK TABLES;
  QUIT;

现在,您已完成master数据库的配置。

 

第二步 - 配置从属数据库

配置master数据库后。您可以搁置一段时间,我们现在将开始配置从属数据库。

登录到从属服务器,打开MySQL shell并创建将从主服务器复制的新数据库(然后退出):

CREATE DATABASE newdatabase;
  EXIT;

导入先前从master数据库导出的数据库。

mysql -u root -p newdatabase </path/to/newdatabase.sql

现在我们需要以与主服务器相同的方式配置从服务器配置:

sudo nano /etc/mysql/my.cnf

我们必须确保在此配置中设置了一些内容。第一个是server-id。如前所述,这个数字必须是唯一的。由于它是默认设置(仍为1),因此请务必更改它的不同之处。

server-id = 2

在此之后,请确保您已正确填写以下三个条件:

relay-log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = newdatabase

您将需要添加relay-log行:默认情况下不存在。完成所有必要的更改后,保存并退出从属配置文件。

再次重启MySQL:

sudo service mysql restart 

下一步是从MySQL shell中启用复制。

再次打开MySQL shell并输入以下详细信息,替换值以匹配您的信息:

CHANGE MASTER TO MASTER_HOST='12.34.56.78',MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107;

该命令同时完成了几件事:

  1. 它将当前服务器指定为主服务器的从属服务器。
  2. 它为服务器提供正确的登录凭据
  3. 最后,它让从服务器知道从哪里开始复制; 主日志文件和日志位置来自我们之前写下的数字。

有了这个 ,您已经配置了主服务器和从服务器,激活从服务器:

  START SLAVE;

您可以通过键入此命令来查看从复制的详细信息。\ G重新排列文本以使其更具可读性。

  SHOW SLAVE STATUS\G

如果在连接时出现问题,您可以尝试使用命令启动slave以跳过它:

  SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; SLAVE START; 

全部完成。

 

看更多

MySQL复制有很多不同的选择,这只是一个简短的概述。

 

英文原作者:Etel Sverdlov  翻译作者:Miazzy Chaos 英文原文:https://www.digitalocean.com/community/tutorials/how-to-set-up-master-slave-replication-in-mysql

猜你喜欢

转载自blog.csdn.net/Aria_Miazzy/article/details/84872388