mysql 主从同步异常原因及恢复:
 
1,auto.cnf 配置问题
这个问题是在部署主从复制的时候,可能会遇到
【1】报错
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work
 
【2】分析
当 mysql 做了主从时,每个 mysql 都会有个 uuid 作为唯一标识的。上面是由于主从复制的 mysql 数据库了相同的 UUID,所以只需要修改 auto.cnf 配置文件即可。
 
【3】解决方法
# vi /var/lib/mysql/auto.cnf
# 将文件中的 uuid 修改为不同数值
 
 
 
2,my.cnf 配置问题
这个问题也是在部署主从复制的时候,可能会遇到
【1】报错
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the –replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
 
【2】分析
在 mysql 的主从配置中,每台 mysql 数据库的 my.cnf 中的 server-id 必须是唯一,但是有的时候可能因为粗心而配成了相同的数值,也有可能 mysql 没有加载到 my.cnf 文件中的 server-id
 
【3】解决方法
# vi /etc/my.cnf
修改从服务器的 my.cnf 配置文件中的 server-id (注意要改为与主服务器不同的)
 
在从服务器的数据库中直接添加 server_id (此 server_id 数值与 my.cnf 中的一致)
mysql> set global server_id=2;
mysql> start slave;
 
 
 
 
3,主库重启(数据库服务器宕机)
【1】报错
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: ‘binlog truncated in the middle of event; consider out of disk space on master; the first event ‘mysql-bin.001989’ at 9179, the last event read from ‘./mysql-bin.001989’ at 9179, the last byte read from ‘./mysql-bin.001989’ at 9179.’
 
【2】分析
由报错可看出是由于从库的二进制文件位置与主库的不一致导致的
 
查看主库的二进制文件的位置,重点关注 File 与 Position 列
# mysql -e 'show master status\G;'
 
查看从库的状态,重点关注下列两个的状态Slave_IO_Running 和 Slave_SQL_Running
# mysql -e 'show slave status\G;'
 
【3】解决方法
解决方法一:
忽略错误后,继续同步,(适用于主库与从库数据相差不大;要求数据可以不完全统一,数据要求不严格的情况)
在从库上停止从库同步
MariaDB [(none)]> stop slave;
 
从库上跳过 1 步错误(后面的数字可更改,即跳过多个错误)
MariaDB [(none)]> set global sql_slave_skip_counter=1;
 
在从库上开启从库
MariaDB [(none)]> start slave;
 
在从库上查看从库状态
MariaDB [(none)]> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
 
 
解决方法二:【推荐】
重新做主从,完全同步 (适用于主库从库的数据相差较大;要求数据完全统一的情况 )
先进入主库,进行锁表,此处锁定为只读状态,防止数据写入(可选,因如有数据库备份,可直接利用备份,但也要防止备份的数据过旧)
注意:不能退出数据库,也不能用 mysql -e 命令,否则会中断这个锁!!!
MariaDB [(none)]> flush tables with read lock;
 
查看 master 状态:
MariaDB [(none)]> show master status;         
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000021 | 52126934 |              |                  |
+------------------+----------+--------------+------------------+
 
对主库进行数据备份(可选,因如有数据库备份,可直接利用备份)
注意:另开一个窗口!!!
# mysqldump -uroot -p密码 --all-databases > mysql.back.sql
 
进入主库,进行解锁(可选,因如有数据库备份,可直接利用备份)
MariaDB [(none)]> unlock tables;
 
在主库上把 mysql 的备份文件传输到从库服务器上
# scp -r mysql.back.sql root@node2:/tmp/
 
进入从库,停止从库的状态
MariaDB [(none)]> stop slave;
 
清除 slave 上的同步位置,删除所有旧的同步日志,使用新的日志重新开始.(使用前先停止 slave 服务)
MariaDB [(none)]> reset slave;
 
在从库中导入数据备份
MariaDB [(none)]> source /tmp/mysql.back.sql;
# mysql -uroot -p database -f < /tmp/mysql.bask.sql
 
设置从库同步
注意:master_log_file 与 master_log_pos 是主库 show master status 信息里的 File 与 Position
MariaDB [nova_cell0]> change master to master_host = '主库的 IP', master_user = '设置主从时设定的主库的用户', master_port=主库的端口, master_password='主库设定的密码', master_log_file = 'mysql-bin.000021', master_log_pos=52126934;
 
从库上重新开启从库同步
MariaDB [nova_cell0]> start slave;
 
从库上查看同步状态
MariaDB [nova_cell0]> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
 
 
 
4,断电导致主从不能同步时,通过主库的最后一个 bin-log 日志进行恢复
在主库服务器上
# mysqlbinlog mysql-bin.xxxx > binxxxx.txt
# tail -n 100000 binxxxx.txt > tail-binxxxx.txt
 
打开 tail-binxxxx.txt 文件找到最后一个 postion 值
# vi tail-binxxxx.txt
 
然后在从库上,设置相应正确的值
mysql> slave stop;
mysql> change master to master_host='ip', master_user='username', master_password='password', master_log_file='mysql-bin.xxxx', master_log_pos=xxxx;
mysql> slave start;
mysql> show slave status\G;
 
 
 
 
5,主键冲突、表已存在等错误代码如 1062,1032,1060 等
可以在 mysql 主配置文件指定,略过此类异常并继续下条 sql 同步,这样也可以避免很多主从同步的异常中断
[mysqld]
slave-skip-errors = 1062,1032,1060 

关于Mysql的主从的更多相关文章

  1. mysql数据库主从同步

    环境: Mater:   CentOS7.1  5.5.52-MariaDB  192.168.108.133 Slave:   CentOS7.1  5.5.52-MariaDB  192.168. ...

  2. Mysql数据库主从心得整理

    管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行,希望对 ...

  3. mysql mha 主从自动切换 高可用

    mha(Master High Availability)目前在MySQL多服务器(超过二台),高可用方面是一个相对成熟的解决方案. 一,什么是mha,有什么特性 1. 主服务器的自动监控和故障转移 ...

  4. Mysql的主从数据库没有同步的解决办法

    Mysql的主从数据库没有同步的解决办法 今天发现Mysql的主从数据库没有同步 先上Master库: mysql>show processlist; 查看下进程是否Sleep太多.发现很正常. ...

  5. 【转】MySQL数据库主从同步管理

    MYSQL主从同步架构是目前使用最多的数据库架构之一,尤其是负载比较大的网站,因此对于主从同步的管理也就显得非常重要,新手往往在出现主从同步错误的时候不知道如何入手,这篇文章就是根据自己的经验来详细叙 ...

  6. 解决Mysql的主从数据库没有同步的两种方法

    今天发现Mysql的主从数据库没有同步 先上Master库: mysql>show processlist;   查看下进程是否Sleep太多.发现很正常.show master status; ...

  7. MySQL Replication, 主从和双主配置

    MySQL Replication, 主从和双主配置 MySQL的Replication是一种多个MySQL的数据库做主从同步的方案,特点是异步,广泛用在各种对MySQL有更高性能,更高可靠性要求的场 ...

  8. MySQL数据库主从同步安装与配置总结

    MySQL的主从同步是一个很成熟的架构,优点为: ①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力: ②在从主服务器进行备份,避免备份期间影响主服务器服务: ③当主服务器出现问题时 ...

  9. MYSQL配置主从同步

    MYSQL配置主从同步 mysql主服务器配置 vim /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql. ...

  10. windows与linux中的mysql配置主从

    最近在给学生讲解数据库的主从配置,由于学生电脑里面装的虚拟机是linux的,但是本机的系统是windows的,所以需要用windows中的mysql与linux中的mysql进行主从配置.下面说一下主 ...

随机推荐

  1. R语言实战基本方法

    R语言的主要功能包括数据统计分析方法和数据可视化,数据分析在这一章中主要学习创建基本图形和基本数据分析 一 基本图形 1条形图 barplot(height)  //添加一个条形图,height是一个 ...

  2. js中的一些简单问题

    1.JavaScript的组成: ECMAScript标准--基本的语法和对象 DOM:Document Object Model 文档对象模型 BOM:Broswer Object Model 浏览 ...

  3. Python的布尔值与空值

    1.Boolean值(布尔值) 一个布尔值只有Ture.False两种值 b1 =True b2 =False print (b1,b2)>>>True False 2.空值(non ...

  4. 关于Appium android input manager for Unicode 提示信息

    Appium调完输入法后,会弹出  Appium android input manager for Unicode 提示信息相关的提示信息,每次运行如此,如下图 网络上查找一遍,基本解决了,只要在设 ...

  5. 异构去堆叠 | 一种完美提升网络高可用SLA的方案

    行业内接入网络去堆叠已经逐步成为主流方向,在大型互联网公司也已经批量部署.但由于京东集团不同的业务需求及历史原因,没有条件完全复制目前主流的ARP转主机路由方式的去堆叠方案,这促使我们设计一种尽可能满 ...

  6. Problem C: 平面上的点和线——Point类、Line类 (III)

    Description 在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定,两点确定一条线段.现在我们封装一个“Point类”和“Line类”来实现平面上的点的操作. 根据“append ...

  7. require的特点

    通过把要加载的文件看作一个“功能”而不是一个文件,require对于用Ruby编写的扩展和用C语言编写的扩展都用一样的方式.另外,.rb扩展名的文件与其它扩展名为.so..dll或.bundle的文件 ...

  8. 体验ToLua框架下热更新(Phpstudy)

    一.关于热更新的详细流程 首先我们需要需要将本机电脑作为服务器打开,这是第一步 1.1.1如何确定我们的电脑是作为服务器打开的. 我们打开一个浏览器在地址栏中输入127.0.0.1.或者是localh ...

  9. Linux:Fedora系统的安装

    新的一周,新的一天又来了!话不多说我们直接进入今天的系统安装吧!这次是Linux系统的第八期了,这款系统是可以当做家庭用途使用,非常强大的一款开发源操作系统. 安装Fedora系统 系统映像文件下载 ...

  10. ViewBag赋值Html格式值

    今天再给自己总结一下,关于ViewBag赋值Html格式值,但是在web页显示不正常; 例如,ViewBag.Content = "<p>你好,我现在测试一个东西.</p& ...