mysql主主同步

实现同步前的注意事项

使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动。因此,如果是双主或者多主,就会增加mysql入口,增加高可用。不过多主需要考虑自增长ID问题,这个需要特别设置配置文件,比如双主,可以使用奇偶,总之,主之间设置自增长ID相互不冲突就能完美解决自增长ID冲突问题。

mysql主从同步实现步骤:

  1. 不同服务器上的两个sql创建相同的数据库
  2. 修改主服务器的etc/my.cnf配置文件(如何没有vim 使用命令 yum -y install vim* 安装 没有yum 就 apt-get update 然后 apt-get install vim )
#日志文件名称
log-bin=mast
#二进制日志格式 有row、statement、mixed三种
binlog-format=ROW
#要求各服务器的id不同
server-id=1
#同步的数据库名称
binlog-do-db=training
#生产环境(主机) 的配置
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

server-id = 5
log-bin = mysql-bin
binlog-ignore-db = mysql,information_schema
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2    
auto-increment-offset = 2   
slave-skip-errors = all
  1. 配置从服务器登录主服务器的账号授权
mysql> grant replication slave,replication client on *.* to 'root'@'47.94.19.227' identified by 'root123456';
mysql> flush privileges; //刷新MySQL的系统权限相关表,否则会无法用账号链接
#mysql8以上版本把将创建账户和赋予权限分开了
#创建账户
create user 'root'@'47.94.19.227' identified by  'root123456'

#赋予权限
grant replication slave,replication client on *.* to 'root'@'47.94.19.227';
  1. 从服务器的配置(etc/my.cnf)
#日志文件名称
log-bin=master-a-bin
#二进制日志格式,更主服务器一样
binlog-format=ROW
#要求各服务器的id不同
server-id=2
#中继日志执行之后,这些变化是否需要计入自己的binarylog。 当你的从服务器需要作为另外一个服务器的主服务器时需要打开,就是双主相互备份,或者多主循环备份
log-slave-updates=true
#同步的数据库名称
replicate-do-db=training
#生产环境(从机)的配置
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

server-id = 6  
log-bin = mysql-bin
expire_logs_days = 7  
binlog-ignore-db = mysql,information_schema
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2    
auto-increment-offset = 1   
slave-skip-errors = all
  1. 重启主服务器
service mysqld restart
#查看服务器状态(是否生成日志)
mysql>show master status;
  1. 重启从服务器然后配置
service mysqld restart
#执行sql命令

mysql> change master to 
    ->master_host='47.94.19.227',	#host为主服务器的ip
    ->master_port=9000,	#主服务器mysql端口
    ->master_user='root',	#主服务器mysql用户名
    ->master_password='root123456',	#主服务器mysql密码
    ->master_log_file='master-a-bin.000001', #主服务器show master status后的日志文件名file
    ->master_log_pos=154, #主服务器show master status后的偏移量position
    ->get_master_public_key=1; #mysql8需要拿到server的public key来加密password(mysql8以下可以不执行这一句)
    
#开启从服务器slave
mysql>start slave;

#查看状态,slave_io_running和slave_sql_running应该为yes,其他信息应该上面配置的一样
mysql> show slave status \G;

#如果change master to设置有问题,导致slave启动报错,可以先stop slave; 然后reset slave; 最后start slave;

mysql主主同步实现步骤:

  1. 主主同步事实上就是在主从的基础上,将原先的从机当主机,主机当从机再配置一遍主从同步
在主主同步配置时,需要将两台服务器的:
auto_increment_increment   增长量都配置为2
auto_increment_offset    分别配置为1和2。这是序号,第一台从1开始,第二台就是2,以此类推.....
这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。(针对的是有自增长属性的字段)

一般做主从同步,都是要求以后的数据实现主从同步,而对于旧的数据完全可以使用数据库同步工具先将数据库同步,完了再进行主从同步;好了遇到上面的问题,正确做法是:

1.打开主服务器,进入mysql
2.执行flush logs;//这时主服务器会重新创建一个binlog文件;
3.在主服务上执行show master slave \G;显示如下:
4.来到从服务器的mysql;
5.stop slave;
6.change master to master_log_file='mysql-bin.000012',master_log_pos=154;//这里的file和pos都是上面主服务器master显示的。
7.start slave;//这时候就应可以了
8.show slave status \G;//结果如下: