关键词:mysql复制(异步复制),mysql异步复制

 

#mysql主从基本实验

前提:

  (0)测试环境:2台centos6.5,都装有单实例 mysql5.26

  (1)网络可以互相ping通:ping 192.168.135.158

  (2)双方端口是否侦听开启:netstat -an|grep 3306

  (3)防火墙策略:service iptables stop;(这里只是测试,我就直接关闭了哈)

  (4)selinux策略:getenforce(查看状态) setenforce 0 (关闭)

  (5)彻底关闭开机自启:

  防火墙 ~~ chkconfig iptables off  

    

mysql查询语句并复制insert语句_数据

  selinux~~ vim /etc/selinux/config ,然后把selinux=disabled,如下图

    

mysql查询语句并复制insert语句_mysql_02

 

#【0】主从均开启binlog,设置server-id



## replication
log-bin=mysql-bin
server-id=1 #从设置为server-id=2
binlog_format= ROW
#gtid_mode = on
#enforce_gtid_consistency = 1
log_slave_updates = 1   #是否复制日志写入从库的Binlog中
master-info-repository=TABLE
relay-log-info-repository=TABLE



#【1】准备复制账户

  mysql下操作:(这里的host ip是从库IP)
  主:grant replication slave on *.* to 'repl'@'192.168.135.159' identified by '123456'; 

  -- 可以顺道测试一下使用该账户是否能在从库上连接上主库。

#【2】在主库上,设置读锁定有效。以便获取一个一致性的快照

  mysql下操作:(锁表,获取一致性)
  flush tables with read lock;

#【3】show master status;获取主库当前的二进制名和偏移量pos位置。

  show master status;
  -- 查看到的日志名:mysql-bin.000002  , postion: 881

#【4】备份主库还原到从库
  物理备份 直接cp,逻辑备份 mysqldump。然后scp拷贝过去。

删除拷贝过来data/下的auto.cnf,否则uuid会一样,导致无法复制出现故障【8】。

#【5】跳过从线程启动Mysql
  mysqld_safe --skip-slave-start &

#【6】在mysql下配置从库复制线程



-- mysql环境下
change master to
master_host='192.168.135.158',
master_port=3306,
master_user='repl',
master_password='123456',
master_log_file='mysql-bin.000002',
master_log_pos=881;



#【7】在mysql下启动从线程并验证
  start slave;

#【8】开始验证

  show processlist; -- 一般有2个如下线程,基本就是没有问题了,但是要确认的话,还是得用下面的命令;

    

mysql查询语句并复制insert语句_数据_03

 

  show slave status\G -- 这种带error字样的字段没有信息或者是0,那才是正确的!

    

mysql查询语句并复制insert语句_linux_04

去主库上做操作,然后从库上验证数据是否同步过来(比如给一个表插入一条数据,注意如果没开自动提交记得commit)

#【9】故障诊断
【9.1】The slave I/O thread stops because master and slave have equal MySQL server UUIDs
原因就是直接用主库的文件覆盖到从库的,导致auto.cnf中的uuid相同;

 

#【10】主从挂了怎么快速切换恢复

1.备份主库上的data目录 mv data data.org

2.从库上scp data目录到主库上 scp -r data 主库:/databases/data/3306/

3.检查my.cnf配置文件,主要保证innodb_log_file_size和innodb_log_files_in_group要和从库设置一致。

4.注意修改data目录里的auto.cnf文件,里面记录的是服务器的uuid,请修改回主库data.org目录下的auto.cnf文件。

5.启动mysql,看错误日志,应该可以正常启动了

6.恢复后的主库上,清除复制关系 mysql> reset slave all;

7.原从库启动数据库,并重做主从 mysql> reset slave all;

8.mysql> change master to ...

参考:深入浅出mysql开发、优化与管理维护书目