MySQL 数据同步 主主设置(互为主备)

 

两台MySQL主机做为服务器:

master-1:192.168.1.99

master-2:192.168.1.113

 

一、创建并授权用户

这一步在每一台(主)服务器上创建一个用户,并为之授权,使它们可以互相访问彼此的数据库

master-1上:

创建一个充许master-2来访问的用户repl,密码为:repl

mysql> GRANT ALL PRIVILEGES ON *.* TO ' repl,'@'192.168.1.113' IDENTIFIED BY ' repl ';

master-2上:

创建一个充许master-1来访问的用户repl,密码为:repl,

mysql> GRANT ALL PRIVILEGES ON *.* TO ' repl,'@'192.168.1.99' IDENTIFIED BY ' repl ';

备注: 为了操作方便,我们在两台服务器上,指定的访问权限时,设定的用户名和密码,一摸一样

二、修改主配置文件

MySQL的主配置文件中修改/添加如下内容:

master-1 上:

[mysqld]

server-id = 1

log-bin = mysql-bin

replicate-do-db = test  # 指定复制操作的数据库

auto-increment-increment = 2

auto-increment-offset = 1

# service mysqld restart

master-2

[mysqld]

server-id = 2

log-bin = mysql-bin

replicate-do-db = test  # 指定复制操作的数据库

auto-increment-increment = 2

auto-increment-offset = 2

# service mysqld restart

注:二都只有server-id不同和 auto-increment- offset不同

auto-increment-offset 是用来设定数据库中自动增长的起点的,回为这两能服务器都设定了一次自动增长值2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突

replicate-do-db 指定同步的数据库,我们只在两台服务器间同步test数据库

另:auto-increment-increment的值应设为整个结构中服务器的总数,本案例用到两台服务器,所以值设为2

 

三、获取两台服务器的二进制日志名和偏移量

master-1上:

mysql> show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000006 |      107 |              |                  |

+------------------+----------+--------------+------------------+

1 row in set

master-2上:

mysql> show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000008 |      107 |              |                  |

+------------------+----------+--------------+------------------+

1 row in set

 

四、两台服务器互相做相应设置

master-1上:

mysql>stop slave;

mysql>

CHANGE MASTER TO

MASTER_HOST='192.168.1.113',

MASTER_USER='repl',

MASTER_PASSWORD='repl',

MASTER_LOG_FILE='mysql-bin.000008',

MASTER_LOG_POS=107;

master-2上:

mysql>stop slave;

mysql>

CHANGE MASTER TO

MASTER_HOST='192.168.1.99',

MASTER_USER='repl',

MASTER_PASSWORD='repl',

MASTER_LOG_FILE='mysql-bin.000006',

MASTER_LOG_POS=107;

五、启动slave线程

在两台主机上分别执行

mysql> START SLAVE;

六、查看slave状态

mysql> show slave status;

+----------------------------------------------

| Slave_IO_State    

| Waiting for master to send event

+ ----------------------------------------------

显示上述信息的时候,说明配置得很好,两台服务器,正在互相等待操作。

配置到此完成!

接下来,可以在两台服务器上,随意操作test数据库。就能看到明显的效果。

备注: 这里我们默认两台服务器,test中的初始数据是相同的。不同的话,则要先从一台机子备份、拷贝