mysql主从复制常见问题

1.mysql主从备份基本原理

mysql支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器已经记录到的二进制日志,获取日志信息更新。通过设置在Master上的binlog,使其处于打开状态;Slave通过一个I/O线程从Master上读取binlog,然后传输到Slave的中继日志中,然后使用SQL线程读取中继日志,并应用到自身数据库中,从而实现主从数据同步功能。

前提:mysql数据库主从数据库的版本最好一样,小版本编码不一样也可以,比如:5.7.20备份到5.7.11。

2.主数据库迁移

在做数据库主从备份之前,首先要确定需要备份的具体数据库,若该数据库为新建数据库,只有表结构,可导出主数据库的sql脚本,导入到从数据库中执行,使主数据库与从数据库的结构相同。

若该数据库已经存在存储信息,则需要锁定主数据库,暂时不让任何程序操作数据库,导出主数据库sql脚本,从数据库执行sql脚本,保证在做主从备份之前,主从数据库的结构,存储信息一致。也可采用Navicat Premium等数据库管理工具,直接做数据传输操作。如图:

3.windows环境下主从备份操作

<1>主数据库master配置

1.打开mysql数据库的基础配置文件,可在服务中查看mysql启用的配置文件信息,若发现在服务器中没有该配置文件,请设置服务器把隐藏的文件也展示出来。参考截图如下:

2.打开my.ini配置文件,设置主数据库的参数信息,主要设置字段为server-id,log_bin,binlog_do_db ,其他字段参考参数定义自行设置, 配置文件中相关参数定义如下:

参数 意义
server-id 数据库唯一ID,一组主从中此标识号不能重复。其中1 代表主数据库(源) 2代表辅数据库(目的)
log_bin 开启bin-log,并指定文件目录和文件名前缀
binlog_do_db 需要同步的数据库名字,可以是多个,之间用分号分割
binlog_ignore_db 不需要同步的数据库名字
max_binlog_size 每个bin-log最大大小,当此大小等于500M时会自动生成一个新的日志文件。一条记录不会写在2个日志文件中,所以有时日志文件会超过此大小。
binlog_cache_size 日志缓存大小
binlog-do-db 需要同步的数据库名字,如果是多个,就以此格式在写一行即可。
binlog-ignore-db 不需要同步的数据库名字,如果是多个,就以此格式在写一行即可。
expire_logs_day 设置bin-log日志文件保存的天数,此参数mysql5.0以下版本不支持。
binlog_format bin-log日志文件格式,设置为MIXED可以防止主键重复。

3.主服务器创建允许从服务器同步数据的账户:

4.重启mysql服务,查看master状态,查看命令:show master status;

<2>从数据库slave配置

1.打开从服务器的my.ini配置,设置从数据库参数信息,设置字段信息server-id,binlog_do_db   slave库上建议把一些重要的选项开启,例如设置为read only、relay_log_recovery、sync_master_info、sync_relay_log_info、sync_relay_log这些重要选项开启。

2.停止slave服务,指令为:stop slave;

3.配置从服务器,开启同步模式,关键参数如下:

在设置同步模式时,需要保证主从服务器所在的网络是相通的,配置的文件日志名称,索引位置与主服务器查询的信息一致。

4.启动slave服务,指令为:start slave;

5.重启mysql服务,查看从数据库同步状态,查看指令为:show slave status;当查询的Slave_IO_Running: Yes,Slave_SQL_Running: Yes时,表示同步状态正常,主从配置成功。

4.linux环境下主从备份操作

通过分析mysql主从备份的原理,它本身是基于主数据库的二进制日志备份的,所以,主从备份本身受操作系统的影响较小,在linux环境下面配置主从备份与在windows下面配置主从备份操作步骤相同,修改参数也相同。唯一不同点是linux版本数据库的配置文件是my.cnf,一般在/etc/my.cnf下面,修改主从数据的配置文件信息,重启mysql数据库服务,即可完成mysql数据库主从备份。

笔者也亲自测试过,windows版本的mysql数据库做为主数据库,linux版本的mysql数据库做为从数据库,或者调换,均可设置主从备份。

5.mysql主从备份常见错误及解决方案

笔者在初次成功配置了mysql数据库主从备份后,以为自此可以万事无忧。但未过多久,通过查询指令查看从服务器的同步状态,发现报错了,在网上寻求解决办法解决后。发现不多久,又会出现其他类型的错误。总之,感觉很棘手,也觉得主从备份不可靠,需要人经常去查看同步状态,一旦出现报错,需要及时人为的处理。这样的情况一般出现在最初做数据库同步的那几天,还有就是主服务器,或者从服务器宕机时间长了的情况。常见错误及解决方案如下:

  • [ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: ‘Client requested master to start replication from impossible position‘, Error_code: 1236

  解决方案:出现1236,出现这种错误一般是主从服务器失去连接,出现了宕机的情况。常用解决办法,重新查询主服务器的状态,获取新的position位置,重新设置从服务器的同步信息。设置命令为:change master to master_log_file=‘‘,master_log_pos=123;

  •  Last_Errno: 1032, Last_Error: Could not execute Update_rows event on table xuanzhi.test; Can‘t find record in ‘test‘, Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event‘s master log mysql

 解决方案:出现1032,表示从数据库上面缺少某一条数据记录,主数据库对这条记录又做了修改,从数据库在修改时报错。解决方案是直接用数据库管理工具,数据传输模式处理具体异常的数据表,保证主数据与从数据库对应的报错数据表结构信息一样。

  •  Last_Errno: 1062,Last_Error: Could not execute Write_rows event on table xuanzhi.test; Duplicate entry ‘5‘ for key ‘PRIMARY‘, Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event‘s master log 

解决方案:出现1062,表示主键冲突,及从数据库上面出现了主数据库上面没有的主键信息记录。解决方案是直接删除提示的从数据库中的异常数据,或者利用数据传输模式处理具体异常的数据表。

  • Last_Errno: 1594,Last_Errno: 1593

解决方案:中继日志错误,一般是服务器宕机引起,解决方案和出现错误1236一样。在msql 5.5以上版本,可在slave的配置文件my.cnf里要增加一个参数relay_log_recovery=1。

  • mysql主从复制,经常会遇到错误而导致slave端复制中断,这个时候一般就需要人工干预,跳过错误才能继续。跳过错误有两种方式:
  • 1.跳过指定数量的事务:

mysql>slave stop;

mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1       #跳过一个事务

mysql>slave start

        2.修改mysql的配置文件,通过slave_skip_errors参数来跳所有错误或指定类型的错误

vi /etc/my.cnf[mysqld]

slave-skip-errors=1062,1053,1146 #跳过指定error no类型的错误

slave-skip-errors=all #跳过所有错误

校验主从服务器上面的数据是否完全一致,可通过工具pt-table-checksum操作。具体操作请参考这篇博文。

原文地址:https://www.cnblogs.com/shixiuxian/p/11218686.html

时间: 2024-10-24 01:42:34

mysql主从复制常见问题的相关文章

linux笔记 第四十课 mysql主从复制

1.MYSQL复制的基础概念 2.MYSQL复制的实现 3.MYSQL复制架构及双主模型演示 4.MYSQL复制监控/常见问题及解决方案 5.MariaDB  GTID及多源复制 6.MariaDB  GTID读写分离及mysql-proxy的使用 一.MySQL主从复制的基础知识 二.MySQL主从复制实现(以mariadb 5.5.36为例) 实验环境:主服务器(node1)172.16.100.7 从服务器(node2)172.168.100.8 软件:mariadb-5.5.36-lin

两主机搭建MySQL主从复制后,show slave status显示:Last_IO_Error: error connecting to master ……

两台主机A.B搭建mysql主从复制关系(A为master,B为slave)后,在slave上执行show slave status,结果中显示Last_IO_Error: error connecting to master '[email protected]:3306'…… 首先查看B的错误日志文件,发现如下错误: ERROR] Slave I/O: error connecting to master '[email protected]:3306' - retry-time: 60  

MySQL 主从复制(实时热备)原理与配置

MySQL是现在普遍使用的数据库,但是如果宕机了必然会造成数据丢失.为了保证MySQL数据库的可靠性,就要会一些提高可靠性的技术.MySQL主从复制可以做到实时热备数据.本文介绍MySQL主从复制原理及其配置过程. 术语:主从复制——master slave replication(M-S模式). 用途 备份 读写分离 高可用和故障切换(需要做HA) MySQL升级测试 原理 实际上,它的原理思路很简单.MySQL 中有一种日志叫做 bin 日志(二进制日志),这个日志会记录下所有修改了数据库的

mysql主从复制与读写分离

MySQL主从复制与读写分离 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面. 因此,一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力 这样的方案来进行部

42-4 mysql主从复制

04 mysql主从复制架构及实现 实战:主主复制 [[email protected] ~]# systemctl stop mariadb.service  [[email protected] ~]# systemctl stop mariadb.service [[email protected] ~]# rm -rf /var/lib/mysql/* [[email protected] ~]# rm -rf /var/lib/mysql/* [[email protected] ~]

MySQL主从复制、读写分离、高可用集群搭建

MySQL主从复制.读写分离.高可用集群搭建  一.服务介绍   1.1 Keepalived     Keepalived,见名知意,即保持存活,其目的是解决单点故障,当一台服务器宕机或者故障时自动切换到其他的服务器中.Keepalived是基于VRRP协议实现的.VRRP协议是用于实现路由器冗余的协议,VRRP协议将两台或多台路由器设备虚拟成虚拟设备,可以对外提供虚拟路由器IP(一个或多个),即漂移IP(VIP). 1.2 ProxySQL ProxySQL是一个高性能,高可用性的MySQL

MySQL主从复制介绍

1.1 MySQL主从复制原理介绍 MySQL的主从复制是一个异步的复制过程(虽然一般情况下感觉是实时的),数据将从一个MySQL数据库(我们称之为Master)复制到另一个MySQL数据库(我们称之为Slave),在Master与Slave之间实现整个主从复制的过程是由三个线程参与完成的,其中有两个线程(SQL线程和IO线程)在Slave端,另外一个线程(I/O线程)在Master端. 要实现MySQL的主从复制,首先必须打开Master端的binlog记录功能,否则就无法实现.因为整个复制过

mysql主从复制延迟问题的相关知识与解决方案

一.如何监控发生了主从延迟? 在从库机器上,执行show slave status,查看Seconds_Behind_Master值,代表主从同步从库落后主库的时间,单位为秒,若同从同步无延迟,这个值为0. Mysql主从延迟一个重要的原因之一是:mysql是以单线程串行执行. 主从复制数据时,在从服务器上的mysql,是一个线程在同步数据. 串行的方式,它是指,执行一个后才继续执行下一个.如果一个卡住了,要等待时间,才会继续下一个.串行与并行是相反的. 二.同步延迟发生的场景 当主库的TPS并

生产环境 MySQL主从复制(同步)

服务器信息 1.主服务器信息 [email protected]:~$ lsb_release -a No LSB modules are available. Distributor ID:  Ubuntu Description:     Ubuntu 14.04.4 LTS Release:   14.04 Codename:  trusty [email protected]:~$ mysql -V mysql  Ver 14.14 Distrib 5.5.50, for debian-