原理:slave 的i/o thread ,不断的去master抓取 bin_log, 写⼊到本地relay_log 然后sql thread不断的更新slave的数据
把主服务器所有的数据复制给从服务器
slave_sql_running 主从的sql进程slave_io_running 主从的io进程
seconds_behind_master 主从的数据延时主从步骤
1.数据库2边同步,设置my.cnf[mysqld]
log-bin=mysql-binbinlog_format=mixedserver-id = 1
expire_logs_days = 10log-bin=master-bin
log-bin-index=master-bin.indexbinlog_ignore_db=mysql
binlog_ignore_db=infomation_schemabinlog_ignore_db=performance_schema
2.在master上建⽴mysql⽤户,给slave⽤
created user 'ruser'@'%' indentified by 'ruserpwd' 建⽴⽤户grant replication slave on *.* to 'ruser'@'%' ⽤户授权
第⼆种⽅法:grant replication client,replication slave on *.* to 'ruser'@'192.168.%.%' identified by '密码123'格式:grant 权限 on 数据库.* to ⽤户名@登录主机 identified by “密码”;grant all privileges on *.* to 'root'@'%' identified by 'wangxiaohu'; 所有权限flush privileges
reset master; 清空masterreset slave; 清空slaveshow master logs; 查看⽇志
show master status \\G 查看master状态,当前⽇志,及位置master_log_file,master_log_pos3.从服务器my.ini 配置 [mysqld]
server-id = 2
expire_logs_days = 10
relay-log-index=slave-relay-bin.indexrelay-log=slave-relay-bin
slave 从服务器上登录mysql运⾏change master 命令show slave status \\G 查看slave状态change master to
MASTER_HOST='192.168.1.1' ,MASTER_USER='' , //主服务器的帐号MASTER_PASSWORD='',MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0;4.start slave;
主主复制时的主键冲突解决
设置my.cnf⾥⾯的2个参数auto_increment_increment,auto_increment_offset让1台服务器 1,3,5,7来增长另1台服务器 2,4,6,8来增长⼀台服务器:
set global auto_increment_increment = 2; // 全局set global auto_increment_offset = 1;
set session auto_increment_increment = 2; //当次连接set session auto_increment_offset = 1;
另⼀台服务器:
set global auto_increment_increment = 2;set global auto_increment_offset = 2;set session auto_increment_increment=2;set session auto_increment_offset = 2;
注:auto-increment-increment 和 auto-increment-offset 要写到配置⽂件 中,防⽌下次重启后失效.
有⼏台服务器,auto_increment_increment就设置⼏,⽐如3台服务器,auto_increment_increment=3, 3台服务器的auto_increment_offset依次开始为,1,2,3
备注:
log-slave-updates是为从库的写操作记录binlog
多主互备和主从复制有⼀些区别,因为多主中的各个库,都可以对服务器有写权限,所以设计到⾃增长重复问题
可以看出,你的auto_increment字段在不同的服务器之间绝对不会重复,所以Master-Master结构就没有任何问题了。当然,你还可以使⽤3台,4台,或者N台服务器,只要保证auto_increment_increment = N 再设置⼀下auto_increment_offset为适当的初始值就可以了,那样,我们的MySQL可以同时有⼏⼗台主服务器,⽽不会出现⾃增长ID重复。
在这⾥我们说的是2台MYSQL服务器,你也可以扩展到多台,实现⽅法类似A -> B -> C-> D ->A
这样⼀个环形的备份结构就形成了,最后可要记住 ⾃增长ID(主键)要设计好哦,否则会出错的。
因篇幅问题不能全部显示,请点此查看更多更全内容