一旦建立好主从复制关系后就不要在从库上执行任何dml和ddl操作,包括创建用户也不行。

那么万一在从库上执行了dml或者ddl操作了,会有何影响,以及如何恢复?

slave同步状态中出现Slave_SQL_Running: No ,即slave不同步!
解决办法:
第一种方法:忽略错误后,继续同步。
该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况(下面均为在slave机器上的操作)
mysql> stop slave;
mysql> set global sql_slave_skip_counter =1;   //表示跳过一步错误,后面的数字可变;或者在my.cnf里添加slave-skip-errors = all(上面已在配置中添加)
mysql> start slave;
mysql> show slave status\G      //查看:
第二种方法:重新做主从,完全同步
该方法适用于主从库数据相差较大,或者要求数据完全统一的情况
1--master主库上操作
mysql> flush tables with read lock;  //进行锁表,防止数据写入。注意该处是锁定为只读状态,语句不区分大小写
#mysqldump --lock-all-tables --all-databases --flush-logs
--master-data=2 > /root/allsql.sql  
//主库完全备份(如果是指定库同步,就备份指定库),注意数据库备份一定要定期进行,确保数据万无一失
mysql> show master status;      //查看master状态,注意log file和pos节点,slave同步会用到
# scp mysql.bak.sql root@192.168.1.102:/tmp/        //把备份文件传到slave从库机器,进行数据恢复
2--slave从库操作
mysql> stop slave;
mysql> source /tmp/mysql.bak.sql
mysql> change master to master_host = '192.168.1.101', master_user = 'slave', master_port=3306.......;
mysql> start slave;
mysql> show slave status\G 
.......
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
此种方法中最为关键主要有两步:
①主服务器上锁表做完全备份,并滚动日志;
②从服务器上进行半道恢复.

5)slave中继日志relay-log损坏?
什么是中继日志?
relay-log存放在从服务器上,从服务器将主服务器的二进制日志文件拷贝到自己的主机上放在中继日志中,然后调用SQL线程按照拷中继日志文件中的二进制日志文件执行以便就可达到数据的同步 。
如何中继日志避免:
mysql 5.6版本后,在my.cnf文件中开启relay_log_recover=1即可避免。

6)slave连接超时且重新连接频繁
若有多少slave,且没有设置server_id或两个slave设置相同的server_id,将有可能会出现服务器的ID冲突。这种情况下,其中一台slave可能会频繁超时或丢失后重新连接序列。
所以一定要确保每台slave及master在my.cnf中都要设置不一样的server_id。

7)主库与从库使用不同的存储引擎造成不同步

8)从库同步时,提示表不存在
错误:Last_Error: Error executing row event: 'Table 'test.t1' doesn't exist'
解决方法:在从库重建这张表。

9)max_allowed_packet设置过小导致slave报错
max_allowed_packet默认是16M,主从库的max_allowed_packet值和备库上的不匹配。
在这情况下,主库可能会记录一个备库认为过大的包。当备库获取到该二进制日志事件时,可能会碰到各种问题,如无限报错和重试、中继日志损坏等。
具体表现:
从库的Slave_IO_Thread死掉了,查看后,出现以下错误提示:
Got a packet bigger than 'max_allowed_packet' bytes
很明显是由于max_allowed_packet的设置太小导致的,然后查检主从库上的设置,主库的设置大于从库,因为max_allowed_packet是动态参数,先调整从库上的max_allowed_packet
与主库相同,重新单独启动I/O线程就正常了。
原理说明:binlog的事件以RBR格式记录,且当前的事件长度大于了从库的max_allowed_packet, 导致无法Slave IO不能正常读取master binlog event.

10)在master上删除一条记录时出现的故障
在master上删除一条记录后,slave上因找不到这条记录而报错。
解决方法:
由于主库上已经对这条语句进行了删除操作,故可以跳过。
在这种情况下,说明主从同步可能数据会有不一致的情况发生,所以需要使用pt-table-checksum进行数据库一致性比对。
(参考:mysql主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理

11)在master更新一条记录,而slave却找不到。
主从数据不致时,master有某条记录,但在salve上没有这条记录,若在master上进行更新这条记录,则在slave中可能报错。
解决方法:
   1--根据从库发生异常的位置,查主库上的二进制日志。
   2--根据主库二进制日志信息,找到更新后的整条记录。
   3--在从库上执行在主库上找到的记录信息,进行insert操作。
   4--跳过这条语句,再同步slave。
   5--使用pt-table-checksum查看主从库表数据否一致

mysql复制关系的更多相关文章

  1. MYSQL复制

    今天我们聊聊复制,复制对于mysql的重要性不言而喻,mysql集群的负载均衡,读写分离和高可用都是基于复制实现.下文主要从4个方面展开,mysql的异步复制,半同步复制和并行复制,最后会简单聊下第三 ...

  2. 14.19 InnoDB and MySQL Replication InnoDB 和MySQL 复制:

    14.19 InnoDB and MySQL Replication InnoDB 和MySQL 复制: MySQL 复制工作对于InnoDB 表和对于MyISAM表. 它是可能使用复制的方式 存储引 ...

  3. MySQL复制相关变量

    server_id是必须设置在master和每个slave上的唯一标识ID,其取值范围 是1~4294967295之间,且同一个复制组之内不能重复 server_uuid:server_uuid会在G ...

  4. MySQL复制相关技术的简单总结

    MySQL有很多种复制,至少从概念上来看,传统的主从复制,半同步复制,GTID复制,多线程复制,以及组复制(MGR).咋一看起来很多,各种各样的复制,其实从原理上看,各种复制的原理并无太大的异同.每一 ...

  5. MySQL复制相关参数详解

    MySQL复制相关参数详解 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.复制相关系统变量 1>.server_id 是必须设置在master和每个slave上的唯一标 ...

  6. 31.Mysql复制

    31.Mysql复制复制是指将主数据库的DDL和DML操作通过二进制日志传到从数据库上,然后在从数据库上对重做日志,从而使从库与主库保持同步.Mysql支持一台主库同时向多台从库复制,从库也可以作为其 ...

  7. MYSQL 复制详解

    MySql 复制介绍 MySQL复制允许将主实例(master)上的数据同步到一个或多个从实例(slave)上,默认情况 下复制是异步进行的,从库也不需要一直连接到主库来同步数据 MySQL复制的数据 ...

  8. 使用 Ansible 管理 MySQL 复制

    Ansible 是一个新兴的 IT 自动化工具.本文将介绍如何通过 Ansible 配置及管理 MySQL 主.从复制环境,实现部署过程自动化,体验 Ansible 简单快速带来的快感. 简介: An ...

  9. 12-MySQL DBA笔记-MySQL复制

    第12章 MySQL复制 本章将为读者讲述MySQL的复制技术,首先,介绍最基础的主从复制,它是其他所有复制技术的基础,接着再为读者讲述各种复制架构的搭建,最后,列举了一些常见的复制问题及处理方式.复 ...

随机推荐

  1. 校园商铺-2Logback配置与使用-1Logback介绍

    日志的作用: 1.故障定位 2.显示程序运行状态 好的日志记录方式可以提供给我们足够多定位问题的依据,因此我们引入logback组件来进行日志的记录 1. Logback标准配置 1.1 Logbac ...

  2. delphi判断MDI窗体的子窗体是否存在

    转]delphi判断MDI窗体的子窗体是否存在//*************************************************************************** ...

  3. C++Builder中注册表的操作

    僮骶头浅5募虻チ耍旅嫖揖鸵砸桓鍪道此得鱐Registry类的用法.首先,先介绍一下TRegistry的属性和方法:TRegistry类一共有四个属性.属性 类型 描述CurrentKey int ...

  4. 初步了解Redis

    参考: https://juejin.im/post/5b4dd82ee51d451925629622?utm_source=gold_browser_extension https://www.cn ...

  5. VS2010-MFC(对话框:一般属性页对话框的创建及显示)

    转自:http://www.jizhuomi.com/software/169.html 属性页对话框包括向导对话框和一般属性页对话框两类,上一节演示了如何创建并显示向导对话框,本节将继续介绍一般属性 ...

  6. 在centos 6.9 x64下安装code::blocks步骤

    1.yum groupinstall "Development tools" 2.yum install gtk2* 3.安装wxWidgets 下载地址:https://www. ...

  7. JAVA基础_自定义泛型

    泛型的来源 在Java中,泛型借鉴了C++的模版函数,从而引入了泛型. C++泛型 int add(int x,int y){ return x + y; } float add(float x.fl ...

  8. Date、DateFormat、Calendar、System、Math类总结

    java.util.Date: 构造方法 public Date() 空参构造,返回当前时间 public Date(long 毫秒值) 指定毫秒值的时间 普通方法 long getTime() 获取 ...

  9. Java基础拾遗(一) — 忽略的 Integer 类

    学习前我们先看一个笔者之前项目踩过的坑 public static void main(String[] args) { Integer a = 127; Integer b = 127; Syste ...

  10. java-day04

    IntelliJ快捷键 导入包 alt + enter 删除光标所在行 ctrl + y 复制光标所在行 ctrl + d 格式代码 ctrl + alt + l 单行注释 ctrl + / 多行注释 ...