配置MySQL Master-Master复制

配置MySQL Master-Master复制

概述

我们要在两台主机上设置Mysql双主复制架构,假设两台服务器分别为Server C和Server D

Server C: 3.3.3.3

Server D: 4.4.4.4

Step 1 - 在Server C上安装Mysql

我的主机系统是Centos7

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum update
sudo yum install mysql-server

修改Mysql配置文件/etc/my.cnf,将下面列出几项配置改为如下配置:

[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = example
# bind-address = 127.0.0.1

第一行唯一标识我们的主机

第二行表示我们对数据库和表做的操作都会被记录

第三行设置我们需要复制的数据库,可以指定多个,这里为了简单事例,只写一个

最后一行表示Mysql接受外网的连接

现在,重启Mysql

sudo systemctl restart mysqld

以root用户登录

mysql -u root -p

进入之后,建立一个用于复制数据的用户,我们起名叫“replicator”,password随意指定

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

将复制权限赋予这个用户

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

复制权限不能以数据库粒度赋予,用户只能根据配置文件中制定的来决定复制哪些数据库

执行下面的命令

show master status;

下面的输出在配置Server D的时候要用到

+------------------+----------+--------------+------------------+  
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |  
+------------------+----------+--------------+------------------+  
| mysql-bin.000001 |      120 | example      |                  |  
+------------------+----------+--------------+------------------+  
1 row in set (0.00 sec)

Step 2 - 为Server D安装和配置Mysql

执行与上面同样的步骤,直到下面这条命令(包含)

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

注意, server-id的配置项不能再用1了, 改为2

然后,上面的输出就要用到了,在Mysql的命令行里,执行下面的命令:

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

上面的Host,password,log_file,pos等,换成你自己的

然后,同样的,执行下面的命令

SHOW MASTER STATUS;

输出类似这样的

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

这些内容我们在回头配置Server C的时候要用到

Step 3 - 完成Server C的配置

回到Server C,登入Mysql,执行下面命令

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

上面的Host,password,log_file,pos等,换成你自己的

配置就完成了,下面我们测试一下是否成功

Step 4 - 测试Master-Master配置

在Server C上创建example数据库

create database example;

然后建张表

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

到Server D上看一下

show tables in example;

输出如下

+-------------------+  
| Tables_in_example |  
+-------------------+  
| dummy             |  
+-------------------+  
1 row in set (0.00 sec)

下面我们在Server D上删除这个表

DROP TABLE dummy;

回到Server C上, show tables,发现没有了

Empty set (0.00 sec)

至此,配置完毕

可能遇到的问题

  • 安装后无法启动Mysql,http://stackoverflow.com/questions/9083408/fatal-error-cant-open-and-lock-privilege-tables-table-mysql-host-doesnt-ex
  • show master status命令显示empty,http://serverfault.com/questions/266876/mysql-simple-replication-problem-show-master-status-produces-empty-set

你可能感兴趣的:(配置MySQL Master-Master复制)