MySQL主从说明

同步问题

mysqldump:此工具适用于10G以下数据库或几个表
percona-Xtrabackup备份工具:适用于100G-500G
LVM快照:更大的数据量,或分库分表

主从复制目的

  1. 读写分离,减轻主库负载或数据分析;
  2. 数据安全,做备份恢复;
  3. 主从切换,做高可用;

常见主从结构:

一主一从:一个Master,一个Slave
一主多从:一个Master,多个slave

Master节点:负责所有的【写】请求
Slave节点:负责大部分的【读】请求

主从复制步骤

MySQL主从说明详解、MySQL主从不同步处理方案_第1张图片

  1. A数据更新
  2. A写入Bin Log
  3. A的io线程与B的io线程传输通信
  4. B将传输的信息写入Relay Log
  5. B检查到Relay Log有新内容后执行SQL语句
  6. B更新数据

MySQL主从数据不同步处理

检查

master库(也就是主服务库)

mysql>show processlist;            //查看进程是否sleep太多
mysql>show master status;        //查看主服务器的master数据状态

Slave库(从库)

mysql>show slave status\G            //查看slave的同步状况,主要是IO与SQL
Slave_IO_Running: Yes
Slave_SQL_Running: No
这两个必须是yes状态,由此可见slave不同步状态

Slave_SQL_Running: No处理方案

方法一:忽略错误,继续同步

适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况;

Slave库修复
mysql>stop slave;                                                                //停止同步
mysql>set global sql_slave_skip_counter =1;                        //跳过一步错误
mysql>start slave;                                                                //开启同步

方法二:重做主从,完全同步

适用于主从库数据相差较大,或者要求数据完全统一的情况;

master库设置

mysql>flush tables with read lock;                //锁定为只读,防止数据写入
mysqldump -uroot -p'123456' mysql > /tmp/mysql.bak.sql        //备份数据到目录
mysql> show master status;                    //查看master的状态,写同步配置会用到相关数据
scp /tmp/mysql.bak.sql [email protected]:/tmp/        //将mysql的备份文件传到从库机器
Slave库设置

mysql>stop slave;                //停止同步
mysql>source /tmp/mysql.bak.sql        //使用备份就行恢复数据,也可以使用mysqldump命令
change master to master_host = '192.168.128.100', master_user = 'rsync', master_port=3306, master_password='', master_log_file = 'mysqld-bin.000001', master_log_pos=3260;         //设置从库同步,其中log_file与log_pos的参数来自于主服务的show master status里
mysql>start slave;                    //开启从同步
mysql>show slave status\G                //查看同步状态

Slave_IO_Running: Connecting 处理方案

四个原因:

  1. 网络原因:查看网络是否正常,SELinux是否关闭,iptables是否容许3306端口通行,下一篇有介绍防火墙设置;
  2. 账号密码不对:粗心大意,用户名和密码输错;
  3. pos值不对:show maste status查询对照;
  4. 克隆机器以及复制mysql都会出现uuid问题:百度解决,网络上太多;

主从日志查询

主从日志一般在从服务上,为数据目录也就是/data/mysql/目录下面的一个名为[主机名].err的文件;
如有错误可以使用perror 错误代码 来详细查询;