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中的初始数据是相同的。不同的话,则要先从一台机子备份、拷贝


https://blog.51cto.com/developers/852550