mysql双主互备设置详细记录
1.环境详细信息:
1.1 服务器A
CentOS realse 6.8 final
mysql,5.6.34
192.168.31.133;
1.2 服务器B,
CentOS realse 6.8 final
mysql,5.6.34
192.168.31.132
2.说明
2.1 对于一个mysql服务器,通常有两个线程来负责复制和被复制,当开启复制以后:
2.1.1 做为主服务器Master,会把本身的每一次改动都记录到二进制日志binarylog中。(从服务器会负责来读取这个log, 而后在本身那里再执行一遍。)
2.1.2 做为从服务器Slave,会用master上的帐号登录到master上,读取master的Binarylog,写入到本身的中继日志 relaylog,而后本身的sql线程会负责读取这个中继日志,并执行一遍。到这里主服务器上的更改就同步到从服务器上了。
3.设置详细步骤:
3.1 在服务器A上建立专门用于备份的帐户,在mysql中执行:
grant replication slave on *.* to 'root_save'@'192.168.31.132' identified by 'root_save';
其中192.168.31.132为B服务器的IP地址,前面的root_save为用户名,后面的root_save为密码
3.2 开启主服务器(A服务器)的binarylog(配置my.cnf文件中的相关参数)
#about master-slave
#开启二进制日志
log-bin=mysql-bin
#设置二进制文件模式
binlog_format=mixed
#服务的ID,主从服务须要设置不一样的值
server-id=1mysql
#设置是否只读
read-only=0
#设置须要关注的数据库
#binlog-do-db=i_test
#设置须要忽略的数据库
#which should be ignored
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
#how many db servers
auto-increment-increment = 10
# 设置增加的初始值
auto-increment-offset=2
#end master-slave
3.3 获取主服务器(A服务器)状态,和同步初态。
3.3.1 先锁定须要同步的数据库,好比咱们测试的i_test,在mysql中执行:
use i_test;
FLUSH TABLES WITH READ LOCK;
3.3.2 导出数据库中的数据,在命令行中执行:
mysqldump --master-data -u root -p i_test > i_test.sql
3.3.3 查看A服务器的binary日志位置,在mysql中执行:
show master status\G;
执行结果以下:
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000007 #该参数在启动同步设置MASTER_LOG_FILE参数时使用
Position: 2879 #该参数在启动同步设置MASTER_LOG_POS参数时使用
Binlog_Do_DB:
Binlog_Ignore_DB: mysql,information_schema,performance_schema
Executed_Gtid_Set:
1 row in set (0.00 sec)sql
ERROR:
No query specified数据库
3.3.4 解锁数据库,在mysql中依次执行:
use i_test;
unlock tables;
3.4 设置从服务器(B服务器)须要复制的数据库(配置my.cnf文件中的相关参数)
#about master to slave
log-bin=mysql-bin
binlog-format=mixed
#服务的ID,主从服务须要设置不一样的值
server-id=2服务器
#replicate-do-db=i_test
#能够指定须要复制的数据库
replicate-ignore-db=mysql
#复制时须要排除的数据库
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
#中继日志的名字
relay_log=mysqld-relay-bin
#中继日志执行以后,这些变化是否须要计入本身的binarylog。 当你的B服务器须要做为另一个服务器的主服务器的时候须要打开。 就是双主互相备份,或者多主循环备份。
log-slave-updates=ON
#about master to slave
3.5 配置my.cnf文件以后重启mysql服务
3.6 导入初态,开始同步
在从服务器(B服务器)建立数据库,i_test,在mysql中执行:
create database i_test;
把刚刚从主服务器(A服务器上)导出的i_test.sql导入到从服务器(B服务器)的i_test数据库中,在命令行执行:
mysql -u root -p i_test<i_test.sql
3.7 开启同步
在从服务器(B服务器)上执行
CHANGE MASTER TO
MASTER_HOST='192.***.***.***',#(A服务器IP)
MASTER_USER='repl_user',#(A服务器建立的B服务器访问帐号)
MASTER_PASSWORD='hj3****',#(A服务器建立的B服务器访问帐号的密码)
MASTER_LOG_FILE='mysql-bin.000004',#(A服务器的当前二进制日志文件的名称)
MASTER_LOG_POS=7145;#(A服务器的当前二进制日志文件的位置)
3.8 重启从服务器(B服务器)的mysql服务
3.9 查看从服务器(B服务器)的slave线程状况
show slave status\G;
只有在
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
才说明配置成功,其中任意一个为NO都表示配置不成功,应当查看错误日志,进行查看。
3.10 在主服务器(A服务器)上的i_test数据库中插入一条记录,在从服务器(B服务器)上进行查看,就可以正常的查看到了。
3.11 以上完成A-B的复制,即简单的主从配置,
如今开始配置B-A的复制,即:把B当成主服务器,A当成从服务器,从而实现双主热备.
3.12 在B中建立用于复制的帐户,相似于3.1,在mysql中执行:
grant replication slave on *.* to 'root_save'@'192.168.31.133' identified by 'root_save';
3.13 开启主服务器(B服务器)的binarylog,相似于3.2
read-only=0
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
auto-increment-increment = 10
auto-increment-offset=6
3.14 查看主服务器(B服务器)的master日志状态,相似于3.3.3
show master status\G;
3.15 开启从服务器(A服务器)的中继日志,相似于3.4
#replicate-do-db=i_test
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
relay_log=mysqld-relay-bin
log-slave-updates = ON
3.16 启动同步,在从服务器(A服务器)的mysql下执行:
change master to
master_host='192.168.31.132',
master_user='root_save',
master_password='root_save',
master_log_file='mysql-bin.000006',
master_log_pos=120;
3.17 查看从服务器(A服务器)的slave状态是否正常
show slave status\G;
只有在
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
才说明配置成功,其中任意一个为NO都表示配置不成功,应当查看错误日志,进行查看。
3.18 完成以上操做以后,mysql双主热备就实现了。
4.配置过程当中的注意事项:
4.1 注意参数的拼写,下划线和中划线的书写
4.2 注意查看错误日志
4.3 注意设置的帐号和密码是否正确
4.4 注意对应端口是否开启以及防火墙的状态
4.5 注意在开启从服务器的同步时,应当是即时查看主服务器的master状态
4.6 注意设置mysql服务的开机启动ide