MySQL双机热备同步
主主模式配置说明手册
1 MySQL热备配置 2
1.1 环境说明 2
1.2 配置前准备 2
1.2.1 停止当前同步 2
1.2.2 数据同步 3
1.3 配置热备 3
1.3.1 配置A作为主机, B作为从机 3
1.3.2 配置B作为主机, A作为从机 7
1MySQL热备配置
1.1 环境说明
系统:RedHat 6.5
MySQL版本:5.6.15 使用两台MySQL服务器(以下对两台MySQL服务器分别简称为A、B):
A:10.0.42.221 B:10.0.42.228 需要同步的数据库:
A服务器上的现存数据库 test221
1.2配置前准备
1.2.1停止当前同步
分别检查A、B 两台MySQL 服务器的主备状态,并停止同步。
#mysql>show slave status\G;
#mysql>stop slave;
1.2.2数据同步
以A的数据库数据为基准,将A的数据同步到B,保证配置热备前A和B的数据一致。具体的步骤如下:
- 对A要热备的数据库加读锁
#mysql>use test221;
#mysql>flush tables with read lock; - 使用mysqldump 工具导出数据
备份特定数据库(如test221):
#mysqldump -u root -pXXXX test221> /home/dataBak.dump
或备份所有的数据库:
#mysqldump -u root -pXXXX --all-databases > /home/dataBak.dump - 解锁数据库
#mysql>unlock tables; - 将A备份的文件dataBak.dump拷贝到B服务器上,并导入
#mysql -u root -pXXXX < dataBak.dump
1.3配置热备
1.3.1配置A作为主机, B作为从机
配置A主机
- 给其它服务器赋予权限
#mysql>GRANT REPLICATION SLAVE,RELOAD,SUPER ON . TO ‘kmailBack’@‘10.0.42.228’ IDENTIFIED BY ‘KmailBackUp2018!’ WITH GRANT OPTION;
kmailBack 和KmailBackUp2018!为在远程机器上访问本主机的用户名和密码,配置从机B时会用到;10.0.42.228为被授权访问本数据库的IP地址(也就是B的IP地址),若从机个数过多,可以配置为%。
- 修改/etc/my.cnf文件
参数名称 修改后的值 描述 必填
bind-address 10.0.42.228 配置为B的IP,以保证该主机可以被B访问。如果需要被多个机器访问,可以配置成0.0.0.0 是
server-id 221 指定主机ID,不可为0,不可与其他服务器的该配置重复 是
log-bin mysql-bin 开启binary log日志 是
binlog-do-db test221 配置为要同步的数据库名称。配置该项只会将该数据库的改动记录到binary log日志中。不配置则默认把A(包括新建数据库等)引起的变化记录到binary log。 否
auto-increment-increment 2 主键自增增量值,建议配置为主机总个数值。
主从模式下不需要配置该项。若主主模式下,同一个时间只有一个主机对数据库进行改动,可不配置该项。 否
auto-increment-offset 1 主键初始值,建议设置为主机的序号值。不可超过auto-increment-increment的值。
主从模式下不需要配置该项。若主主模式下,同一个时间只有一个主机对数据库进行改动,可不配置该项。 否
A主机修改后配置如下
-
重启MySQL服务
#service mysqld restart
-
查看Master状态
#mysql> show master status;
±---------------±---------±------------------±---------------------±-----------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±---------------±---------±------------------±----------------------±----------------------+
| mysql-bin.000004 | 120| test221 | | |
±-----------------±---------±-------------±-----------------±------------------------------+
1 row in set (0.00 sec)
记录File 和 Position的值,在配置从服务器的时候需要用到。
配置B主机
- 修改/etc/my.cnf文件
参数名称 修改后的值 描述 必填
server-id 228 指定主机ID,不可与其他主机的该配置重复,不可为0 是
replicate-do-db test221 指定要复制的数据库。如不需要指定要备份的数据库或A配置了binlog-do-db参数,此处可不配置。 否
B主机修改后配置如下
-
重启MySQL服务
#service mysqld restart -
配置Master主机
#mysql>CHANGE MASTER TO MASTER_HOST=‘10.0.42.221’, MASTER_USER=‘kmailBack’,MASTER_PASSWORD=‘KmailBackUp2018!’, MASTER_LOG_FILE=‘mysql-bin.000004’,MASTER_LOG_POS=120;
‘mysql-bin.000004’ 和 120 的具体值分别对应于A主机执行#mysql> show master status; 命令得到的File 和 Position的值
- 开启主从同步,并查看slave线程启动状态
#mysql>start slave;
#mysql>show slave status\G;
1. row
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.42.221
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 120
Relay_Log_File: mail-relay-bin.000004
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: test221
···
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
···
其中,当Slave_IO_Running 和 Slave_SQL_Running 的值都为Yes时,才表示配置成功。如果有任一个出现问题,可查看查询结果下面的错误信息进行定位。
- 测试
A主机在test221数据库新建表TB_USER并向TB_USER表中插入1000条数据,B主机可正常同步。
1.3.2配置B作为主机, A作为从机
配置B主机
-
给其它服务器赋予权限
#mysql>GRANT REPLICATION SLAVE,RELOAD,SUPER ON . TO ‘kmailBack’@‘10.0.42.221’ IDENTIFIED BY ‘KmailBackUp2018!’ WITH GRANT OPTION; -
修改/etc/my.cnf文件
参数名称 修改后的值 描述 必填
bind-address 0.0.0.0 保证B主机可以A主机访问。如果主机过多,可以配置成0.0.0.0
log-bin mysql-bin 开启binary log日志 是
binlog-do-db test221 配置为要同步的数据库名称。配置该项只会将配置的数据库的改动记录到binary log日志中。不配置则默认把A上做的所有操作(包括新建数据库等)引起的变化记录到binary log。 否
log-slave-updates 1 binary log日志执行之后,这些变化是否需要记入自己的binary log。当B主机需要作为另外一个主机的主服务器的时候需要打开。 单主主模式下该参数可不配置。双主互相备份,或者多主循环备份时需要配置。(eg:当A 和B配置了主主复制,B同时又作为C的主机时,若希望A做的修改能够同步到C,需要在B配置该项) 否
auto-increment-increment 2 主键自增增量值,可配置为主主模式的主机个数。如果主主模式下,同一个时间只有一个主机对数据库进行改动,可不配置
auto-increment-offset 2 主键初始值,建议第几个主机则配置为几,不可超过auto-increment-increment的值。如果主主模式下,同一个时间只有一个主机对数据库进行改动,可不配置。
B主机修改后配置如下:
- 重启MySQL服务
#service mysqld restart - 查看Master状态
#mysql> show master status;
±---------------±---------±------------------±---------------------±-----------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±---------------±---------±------------------±----------------------±----------------------+
| mysql-bin.000004 | 120 | test221 | | |
±-----------------±---------±-------------±-----------------±------------------------------+
1 row in set (0.00 sec)
记录File 和 Position的值,在配置从服务器的时候需要用到。
配置A主机
-
配置Master主机
#mysql>CHANGE MASTER TO MASTER_HOST=‘10.0.42.228’, MASTER_USER=‘kmailBack’,MASTER_PASSWORD=‘KmailBackUp2018!’, MASTER_LOG_FILE=‘mysql-bin.000004’,MASTER_LOG_POS=120; -
开启主从同步,并查看slave线程启动状态
#mysql>start slave;
#mysql>show slave status\G;
1. row
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.42.228
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000005
Read_Master_Log_Pos: 120
Relay_Log_File: mail-relay-bin.000004
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: test221
···
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
··· -
测试
在B主机,向test221数据库TB_USER表中插入1000条数据,A主机可正常同步。
在A主机,向test221数据库TB_USER表中插入1000条数据,B主机可正常同步。
至此,主主模式配置完成。