MySQL之——双机双向热备份

时间:2022-06-19 06:35:40
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/48353051

一、说明

 目前应用中的mysql并没有采用双机热备的策略,但考虑到系统的高可用性,双机热备份是必要的,另外实现数据热备份后还可进一步实现读写分离,提高应用中访问数据的性能,何乐而不为呢,目前手上有几台空闲的机器,于是动手做起来。
 机器A:(10.0.9.199),机器B:(10.0.9.1)

二、实现步骤

因为是双向热备份,首先设置A上的一个数据库(db1)为master,B上的备份数据库(db2)为slave,这是一个方向;然后配置db2为master,db1为slave

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

log-bin=mysql-0-bin     #设定生成log文件名         #机器A配置
server-id=9199 # 主ID,与从ID不能相同

binlog-do-db=webgps4_0 #设置同步数据库名
binlog-ignore-db=mysql #避免同步mysql用户配置
replicate-do-db=webgps4_0 // 两处webgps4_0是一致的
replicate-ignore-db=mysql
log-bin=mysql-1-bin     #设定生成log文件名          #以下为机器B配置server-id=9001		# 主ID,与从ID不能相同binlog-do-db=webgps4_0   #设置同步数据库名binlog-ignore-db=mysql   #避免同步mysql用户配置replicate-do-db=webgps4_0    // 两处webgps4_0是一致的replicate-ignore-db=mysql

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

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

(3)设置用户权限

grant replication slave,reload,create user, super on *.* to 'test'@'10.0.9.1' IDENTIFIED BY '123456';  //  机器A上执行
grant replication slave,reload,create user, super on *.* to 'test'@'10.0.9.199' IDENTIFIED BY '123456'; // 机器B上执行

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

mysql> change master to
-> master_host = '10.0.9.1',
-> master_port = 3306,
-> master_user = 'test',
-> master_password = '123456'; //机器A上执行,A为slave
mysql> change master to
-> master_host = '10.0.9.199',
-> master_port = 3306,
-> master_user = 'test',
-> master_password = '123456'; //机器B上执行,B为slave

因为是双向备份,所以配置中很多操作是重复的,只是主从顺序不一致,一个正向一个反向。到这里已经实现了双向备份,现在可以在两个库中分别做一些操作看看效果。
目前只配置了db1以及其备份的双向主从,也就是仅保证了一个schema的热备,而实际应用中往往使用多个schema减轻单台服务器的压力,如本文中机器A的schema备份在B上,B的备份在C上,有些备份配置成一个环状。需要注意的是,当在机器B上配置热备时,配置master或者slave不能在之前的数据库实例中进行,同一个端口号上重复配置会将前一个覆盖,因此,需要利用mysqld_multi 单机启动多个mysql 实例,配置时在另一个mysql实例中完成。mysqld_multi的配置查看博文: MySQL之——Linux单机启动多个MySQL实例(mysqld_multi )

三、双向备份说明

  •  主库必须启用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线程,实现这两部分的功能。