mysql数据库主主复制Linux中的整体流程
**
mysql主主复制
**
上传正式服务器(服务器一为(mysql11)、服务器二为(mysql12))–两个主从为主主!!
将两台服务器中的mysql安装成相同版本的数据库;
例:如果服务器1为mysql5.6.40,则服务器2也一定为mysql5.6.40;同版本号!!!
准备在两台服务器的配置文件my.cnf
(一般Linux中的MySQL配置文件都在/etc/my.cnf(windows中的配置文件为mysql.ini)
除非特殊情况的配置文件在mysql的根目录下)
在第一台服务器中配置:
#任意自然数n,只要保证两台MySQL主机不重复就可以了。
server-id=11
#开启二进制日志
log-bin=mysql-bin
#步进值auto_imcrement一般有n台主MySQL就填n
auto_increment_increment=2
#起始值。一般填第n台主MySQL。此时为第一台主MySQL
auto_increment_offset=1
#忽略mysql库【可不写】
binlog-ignore=mysql
#忽略information_schema库【可不写】
binlog-ignore=information_schema
#要同步的数据库,默认所有库
replicate-do-db=demo
relay_log=mysql-relay-bin
log-slave-updates=on
在第二台服务器中配置:
任意自然数n,只要保证两台MySQL主机不重复就可以了。
server-id=12
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=2
要同步的数据库,默认所有库
replicate-do-db=demo
relay_log=mysql-relay-bin
log-slave-updates=on
开始构建服务器配置
①在服务器一中执行(mysql11):
登录数据库:mysql -u root -p
#选择将要复制的数据库
mysql>use demo;
mysql>FLUSH PRIVILEGES;
mysql>GRANT REPLICATION SLAVE ON *.* TO 'mysql12'@'192.168.1.1' IDENTIFIED BY 'mysql12';
mysql>FLUSH PRIVILEGES;
mysql>show master status;
在服务器二中执行(mysql12):
mysql>CHANGE MASTER TO
MASTER_HOST='192.168.1.2',
MASTER_USER='mysql12',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=3617472;
开启主从复制
mysql>start slave;
查看主从复制是否配置成功
mysql>SHOW SLAVE STATUS\G
②在服务器二中执行(mysql12):
登录数据库: mysql -u root -p
#选择将要复制的数据库
mysql>use demo;
mysql>FLUSH PRIVILEGES;
mysql>GRANT REPLICATION SLAVE ON *.* TO 'mysql11'@'192.168.1.2' IDENTIFIED BY '123456';
mysql>FLUSH PRIVILEGES;
mysql>show master status;
在服务器一中执行(mysql11):
mysql>CHANGE MASTER TO
MASTER_HOST='192.168.1.1',
MASTER_USER='mysql11',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000004',
MASTER_LOG_POS=120;
开启主从复制
mysql>start slave;
查看主从复制是否配置成功
mysql>SHOW SLAVE STATUS\G
完成主主复制,下面来进行测试:
在第一台服务器(mysql11)中执行:
INSERT INTO `demo`.`captcha`(`id`, `createTime`, `expiresIn`, `mobile`, `value`) VALUES ('873', '2019-01-10 14:30:12', 1, '1', '1');
Select * from captcha;
在第二台服务器(mysql12)中执行:
Select * from captcha;
在第二台服务器(mysql12)中执行:
INSERT INTO `demo`.`captcha`(`id`, `createTime`, `expiresIn`, `mobile`, `value`) VALUES ('1888', '2019-01-10 16:03:12', 1, '1', '1');
在第一台服务器(mysql11)中执行:
Select * from captcha;
第一台服务器配置:
use demo;
FLUSH PRIVILEGES;
GRANT REPLICATION SLAVE ON *.* TO 'mysql12'@'192.168.1.1' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
show master status;
CHANGE MASTER TO
MASTER_HOST='192.168.1.2',
MASTER_USER='mysql12',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=3632194;
第二台服务器配置:
use demo;
FLUSH PRIVILEGES;
GRANT REPLICATION SLAVE ON *.* TO 'mysql11'@'192.168.1.2' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
show master status;
CHANGE MASTER TO
MASTER_HOST='192.168.1.1',
MASTER_USER='mysql11',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000009',
MASTER_LOG_POS=3074547;
mysql -umysql12 -h 192.168.1.1 -p 123456
测试:
INSERT INTO `demo`.`captcha`(`id`, `createTime`, `expiresIn`, `mobile`, `value`) VALUES ('111', '2019-01-10 18:30:12', 1, '1', '1');
INSERT INTO `demo`.`captcha`(`id`, `createTime`, `expiresIn`, `mobile`, `value`) VALUES ('4', '2019-01-10 14:33:12', 1, '1', '1');
异常处理
[ERROR] Slave SQL: Slave failed to initialize relay log info structure from the repository, Error_code: 1872
原因:检查my.cnf,原来没指定relay_log,mysql默认产生的relay_log名被该server上的另一个mysql slave占用了。
解决方法:
1.在my.cnf中添加
relay_log=/db/mysql56/logs/relay_98_3326
reset slave
mysql>reset slave
mysql>change master to
master_host='192.168.0.38',
master_user='repl',
master_password='slave',
master_port=3306,
master_log_file='mysql-bin.001229',
master_log_pos=15970007;
mysql>start slave;
5.7以上的版本在重启数据库 之后不必重新配置双主从,如果是5.7以下的数据库在重启之后需要重新配置主从;
可查看数据库5.6与5.7配置说明网站有说明~~