mysql双机热备实现

说明

 机器A:(172.16.1.251),机器B:(172.16.1.252)

两台机器都创建数据库web:create database hello default charset utf8;

实现步骤

双向热备份:首先设置A上数据库为master,B上的备份数据库为slave;然后配置B上的数据库为master,A上数据库为slave

(1)修改 A和B上的 配置文件my.cnf,加入以下内容

 

 #机器A配置 
  1. server-id=7      # 主ID,与从ID不能相同
  2. log-bin=mysql-0-bin     #设定生成log文件名          
  3.   
  4. binlog-do-db=web   #设置同步数据库名  
  5. binlog-ignore-db=mysql   #忽略同步mysql数据库  
  6. replicate-do-db=web    # 两处web是一致的  
  7. replicate-ignore-db=mysql  
  8.  
  9. auto-increment-increment=10      # 插入id增长间隔
  10. auto-increment-offset=1        #从1开始增长

 #机器B配置  
  1. server-id=17      # 主ID,与从ID不能相同  
  2. log-bin=mysql-1-bin     #设定生成log文件名          
  3.   
  4. binlog-do-db=web   #设置同步数据库名  
  5. binlog-ignore-db=mysql   #忽略同步mysql数据库  
  6. replicate-do-db=web   # 两处web是一致的  
  7. replicate-ignore-db=mysql  
  8. auto-increment-increment=10      # 插入id增长间隔
  9. auto-increment-offset=2        #从2开始增长

 

(2)重启A和B上的mysql,两台机器上分别创建一个mysql用户用来同步

 
  1. CREATE USER 'usera'@'172.16.1.252' IDENTIFIED BY '123456';   //usera为账号,172.16.1.252表示账号只能从指定id也就是B机器访问,最后123456是密码,机器A上执行  
  2. CREATE USER 'usera'@'172.16.1.251' IDENTIFIED BY '123456';   //机器B上执行  

 

(3)设置用户权限

 

 
  1. grant replication slave,reload on *.* to 'usera'@'172.16.1.252' IDENTIFIED BY '123456';  //  机器A上执行  
  2. grant replication slave,reload on *.* to 'usera'@'172.16.1.251' IDENTIFIED BY '123456';  // 机器B上执行  

 

(4)设置A和B的主从联系,B和A的主从联系

//机器A上执行,A为slave 

 
  1. mysql> change master to  
  2.     -> master_host = '172.16.1.252',  
  3.     -> master_port = 3306,  
  4.     -> master_user = 'usera',  
  5.     -> master_password = '123456';   

 

//机器B上执行,B为slave

  1. mysql> change master to  
  2.     -> master_host = '172.16.1.251',  
  3.     -> master_port = 3306,  
  4.     -> master_user = 'usera',  
  5.     -> master_password = '123456';   


因为是双向备份,所以配置中很多操作是重复的,只是主从顺序不一致,一个正向一个反向。

 

双向备份说明

  •  主库必须启用Bin log,主库和从库必须有唯一的Server Id
  •  从库必须清楚了解从主库的哪一个Bin log文件的哪一个偏移位置起开始复制
  •  从库可以从主库只复制指定的数据库,或者数据库的某些数据表
  •  主库和从库的数据库名称可以不一样,不过还是推荐使用一样的名称
  •  主库和从库的MySQL版本需保持一致

从MySQL3.23.15以后,MySQL支持单向的异步复制。也就是说,1台MySQL服务器充当Master(主库),1台或多台MySQL服务器充当Slaves(从库),数据从Master向Slaves进行异步复制。注意,这种复制是异步的,有别于MySQL的同步复制实现(这种实现称做MySQL集群,MySQL Cluster)。
当主库有更新的时候,主库会把更新操作的SQL写入二进制日志(Bin log),并维护一个二进制日志文件的索引,以便于日志文件轮回(Rotate)。在从库启动异步复制的时候,从库会开启两个I/O线程,其中一个线程连接主库,要求主库把二进制日志的变化部分传给从库,并把传回的日志写入本地磁盘。另一个线程则负责读取本地写入的二进制日志,并在本地执行,以反映出这种变化。较老的版本在复制的时候只启用一个I/O线程,实现这两部分的功能。

原文地址:https://www.cnblogs.com/rzxiaojia/p/6646091.html