mysql主主复制

1. 需要有两台主机
假设ip地址分别是192.168.165.135,  192.168.165.136

2. 创建同步用户
在192.168.165.135执行如下命令:
grant replication slave,file on *.* to ' replication '@'192.168.165.136 ' identified by '1234';
flush privileges;
在192.168.165.136执行如下命令:
grant replication slave,file on *.* to ' replication '@'192.168.165.135 ' identified by '1234';
flush privileges;

3. 配置my.cnf
如果不存在 /etc/my.cnf ,则复制 support-files/my-default.cnf 生成 my.cnf ,两台机器的 my.cnf的[mysqld]部分, 分别配置为(不难看到,只有 server_id auto_increment_increment 两项不同):

135机器

136机器

server-id=1

log-bin=mysql-bin

log-slave-updates

slave-skip-errors=all

sync_binlog=1

auto_increment_increment=1

auto_increment_offset=1

server-id=2

log-bin=mysql-bin

log-slave-updates

slave-skip-errors=all

sync_binlog=1

auto_increment_increment=2

auto_increment_offset=1


4. 配置项说明

配置项

配置项说明

server-id

不能相同!唯一标识号,值位于1~2^32-1之间

user

这个可以不指定,则使用mysqld_safe指定的用户,或者mysqld_safe默认的用户mysql

log-bin

启用二进制日志文件

log-slave-updates

配置从库上的更新操作是否写二进制文件,需要和log-bin一起使用

slave-skip-errors

值为all表示让从库跳过所有错误(但不能跳过所有DDL所引起的主从错误),也可以只跳过指定的错误,如:--slave-skip-errors=1062,1053;也可以配置只跳过DDL错误,如:--slave-skip-errors=ddl_exist_errors,这等同于:

--slave-skip-errors=1007,1008,1050,1051,1054,1060,1061,1068,1094,1146

sync_binlog

值为1表示主机每次提交事务的时候把二进制日志的内容同步到磁盘上

auto_increment_increment

auto_increment_offset

和auto_increment_offset一起用于主主同步,用来错开自增,防止键值冲突,所以auto_increment_increment和auto_increment_offset两者,至少要有一项值不同。

 

上述配置会导致同步所有的数据库,借助下列配置项也可以选择性的同步或不同步:

配置项

配置项说明

binlog-do-db=test1

binlog-do-db=test2

表示只同步数据库test1和test2,如果还想同步test3,只需要新增一行:binlog-do-db=test3即可

binlog-ignore-db=db1

binlog-ignore-db=db2

表示不同步数据库db1和db2,如果还有db3不想同步,新增一行:binlog-ignore-db=db3即可



5. 设置同步关系(

前提:需要和主从一样,先导出一方的数据库,在另一方的数据库运行,才能执行同步

注意:一个库应该是空的,File和Position用那个非空数据库的即可

分别重启MySQL,进入MySQL Cli,执行命令“show master status\G”,记住“File”和“Position”的值,如:

mysql> show master status\G 

*************************** 1. row ***************************

             Filemysql-bin.000004

         Position682

     Binlog_Do_DB: test

 Binlog_Ignore_DB: mysql

Executed_Gtid_Set: 

1 row in set (0.00 sec)

 设置同步关系(两个主都需要设置):

stop slave;

change master to master_host='192.168.165.136',master_user='replication',master_password='1234',master_log_file='mysql-bin.000004',master_log_pos=682;

如果不先执行“stop slave;”,则可能遇到如下错误:

ERROR 3021 (HY000): This operation cannot be performed with a running slave io thread; run STOP SLAVE IO_THREAD FOR CHANNEL '' first.

这里,peeruserpassword三者的取值为“创建同步用户”时指定的值。设置示例:

stop slave;

change master to master_host='192.168.165.135',master_user='replication',master_password='1234',master_log_file='mysql-bin.000004',master_log_pos=682;

 由于前面一步调用“stop slave;”,停止了复制。在完成后,需再启动复制:

start slave;

注意:为了能让从服务器登录mysql,要关闭centos的防火墙

[root@dbServer ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
[root@dbServer ~]# service firewalld stop
Redirecting to /bin/systemctl stop  firewalld.service


6. 验证

执行命令“show slave status\G”查看复制状态,如果出现“Slave_IO_Running: Yes”和“Slave_SQL_Running: Yes”,则表示状态正常。

进一步,可以分别创建一个表,如:create table test1 (a int)create table test2 (b int)。再分别使用show tables查看是否同步过去。

7. 常见错误

Got fatal error 1236 from master when reading da ta from binary log: 'Could not find first log file name in binary log index file'系列一:
主库添加log-bin-index 参数后,从库报这个错误:Got fatal error 1236 from master when reading da ta from binary log: 'Could not find first log file name in binary log index file'

Got fatal error 1236 from master when reading da ta from binary log: 'could not find next log'

可以

stop slave;
reset slave;
start slave;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值