如何设置MySQL主-主复制(Master-Slave)

时间:2019-05-19 01:26:27  来源:igfitidea点击:

MySQL主-从复制(Master-Slave )是设置从服务器,当主服务器发生更改时立即更新。
但是如果从服务器上有任何更改,它将不会更新主服务器。
阅读本文来设置主-从复制。
本文将设置MySQL服务器之间的主-主复制(Master-Slave)。
在此设置中,如果在任何一台服务器上所做的任何更改将在另一台服务器上更新。

服务器信息:

Master-1: 192.168.1.15
Master-2: 192.168.1.16
Database: mydb

如果你使用不同版本的MySQL,需要先检查兼容性。

步骤1。设置MySQL主服务器1

编辑MySQL配置文件并在[mysqld]部分中添加以下行。

# vim /etc/my.cnf

[mysqld]
log-bin=mysql-bin
binlog-do-db=mydb
server-id=1

重新启动MySQL服务器,使更改生效。

# service mysqld restart

在主服务器1上创建一个具有REPLICATION SLAVE特权的mysql帐户,复制客户端将连接到主服务器。

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY 'secretpassword';
mysql> FLUSH PRIVILEGES;

锁表,阻止对所有表执行写语句,因此在进行备份后不能做任何更改。

mysql> use mydb;
mysql> FLUSH TABLES WITH READ LOCK;

使用下面的命令检查当前二进制日志文件名和当前偏移量值。

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      332 | mydb         |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

上面的输出显示了当前二进制文件使用的是 mysql-bin.000003,偏移值为 332
记下这些值,以便在下一个步骤中在主服务器2上使用。
备份数据库并将其复制到另一个mysql服务器。

# mysqldump -u root -p mydb > mydb.sql
# scp mydb.sql 192.168.1.16:/opt/

完成备份后,从表中删除读锁,以便可以进行更改。

 mysql> UNLOCK TABLES; 

步骤2。设置MySQL主服务器2

编辑mysql Master-2配置文件,并在[mysqld]部分添加以下值。

# vim /etc/my.cnf 

[mysqld]
log-bin=mysql-bin
binlog-do-db=mydb
server-id=1

server-id总是一个非零数值。
这些值永远不会与其他主服务器或从服务器相同。
重新启动MySQL服务器,如果我们已经配置了复制, 那么在启动时使用-skip-slave-start选项,不立即连接到主服务器。

# service mysqld restart

还原从主服务器1获取的数据库备份。

# mysql -u root -p mydb < /opt/mydb.sql

在主服务器2上创建一个具有复制从特权的mysql帐户,复制客户端将连接到主服务器。

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY 'secretpassword';
mysql> FLUSH PRIVILEGES;

使用下面的命令检查当前二进制日志文件名和当前偏移量值。

mysql > SHOW MASTER STATUS;  
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      847 | mydb         |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

上面的输出显示了当前二进制文件使用的是 mysql-bin.000001,偏移值为 847
记下这些值,将在步骤3中使用他们。
在从服务器上使用以下命令设置选项值。

mysql>  CHANGE MASTER TO MASTER_HOST='192.168.1.15',
    -> MASTER_USER='repl_user',
    -> MASTER_PASSWORD='secretpassword',
    -> MASTER_LOG_FILE='mysql-bin.000003',
    -> MASTER_LOG_POS=332;

步骤3:在MySQL 主服务器Master-1上完成安装

登录到MySQL主服务器1并执行以下命令。

mysql>  CHANGE MASTER TO MASTER_HOST='192.168.1.16',
     MASTER_USER='repl_user',
     MASTER_PASSWORD='secretpassword',
     MASTER_LOG_FILE='mysql-bin.000001',
     MASTER_LOG_POS=847;

步骤4:在两个服务器上启动从服务器

在两个服务器上执行以下命令以启动从复制进程。

mysql> SLAVE START;

MySQL主-主复制已经在系统上成功配置,并处于工作模式。
要测试复制是否在工作,请在任何一台服务器上对数据库数据进行更改,并检查在其他服务器上是否也更改了。