MYSQL一主二从复制配置备忘
mysql

192.168.31.7
192.168.31.8
这两台是从服务器
192.168.31.107
这一台是主服务器
修改主服务器中的my.cnf
首先一定要开启bin-log日志
设置 binlog_format=mixed
server-id 要设置好,有唯一性(重要)
从服务器照上面一样设置
在主服务器中创建从服务器的授权账号登陆
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO nosay@'192.168.31.7' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO max@'192.168.31.8' IDENTIFIED BY '123456';
主服务器为从服务器开启防火墙端口
sudo iptables -I INPUT -s 192.168.31.7 -p tcp --dport 3306 -j ACCEPT
sudo iptables -I INPUT -s 192.168.31.8 -p tcp --dport 3306 -j ACCEPT
登录主服务器的mysql,查询master的状态
mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 308 | | |
+------------------+----------+--------------+------------------+
注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化
配置从服务器Slave
192.168.31.7:
change master to master_host="192.168.31.107",master_user='nosay',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=308;
192.168.31.8:
master_host="192.168.31.107",master_user='max',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=308;
启动从服务器复制功能 start slave;
检查从服务器复制功能状态
mysql> show slave status\G
测试的时候发现当一台从服务器同步的时候,另一台会报错:
Got fatal error 1236 from master when reading data from binary log: 'A slave with the same server_uuid as this slave has connected to the master; the first event 'mysql-bin.000046' at 578, the last event read from './mysql-bin.000050' at 515, the last byte read from './mysql-bin.000050' at 515.'
错的大概意思是说,Slave的server_uuid 有冲突,导致一主多从的主从复制有问题,随后登录主库检查,发现只有一个slave server_uuid
登录分别登录两个从库检查auto.cnf,发现两个slave节点的server_uuid一致,到此问题大概已经确认了,由于第二个slave节点是虚拟机复制过来的,因此mysql目录下的auto.cnf也一起复制过来,导致两个slave节点auto.cnf内容相同
在对auto.cnf进行备份后,尝试对其进行删除,然后重新启动mysql,
MYSQL>start slave;
解决
今天启动的时候, 发现有一个从服务器无法启动,报这个错误
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
原因:检查my.cnf,原来没指定relay_log,MySQL默认产生的relay_log名被该server上的另一个mysql slave占用了。
解决方法:
1.在my.cnf中添加
relay_log=/db/mysql56/logs/relay_98_3326
然后重启mysql 并start slave即可
slave_skip_errors选项有四个可用值,分别为:off,all,ErorCode,ddl_exist_errors。
默认情况下该参数值是off,我们可以列出具体的error code,也可以选择all,mysql5.6及MySQL Cluster
NDB 7.3以及后续版本增加了参数ddl_exist_errors,该参数包含一系列error
code(1007,1008,1050,1051,1054,1060,1061,1068,1094,1146)
一些error code代表的错误如下:
1007:数据库已存在,创建数据库失败
1008:数据库不存在,删除数据库失败
1050:数据表已存在,创建数据表失败
1051:数据表不存在,删除数据表失败
1054:字段不存在,或程序文件跟数据库有冲突
1060:字段重复,导致无法插入
1061:重复键名
1068:定义了多个主键
1094:位置线程ID
1146:数据表缺失,请恢复数据库
1053:复制过程中主服务器宕机
1062:主键冲突 Duplicate entry '%s' for key %d