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位置,重新设置从服务器的同步信息。

  •  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。

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

原文地址:https://www.cnblogs.com/wlandwl/p/mysql.html

时间: 2024-11-29 04:24:46

mysql主从备份及常见问题处理的相关文章

linux下 mysql主从备份

在使用Ubuntu作为开发环境时经常需要在全局安装一些依赖框架等,这个时候就常常需要用到root权限,但是在Ubuntu下第一次使用su命令时会提示认证失败:查找资料后发现Ubuntu下root权限默认是锁定的,可能是处于安全考虑,但是作为开发人员肯定是需要root权限的. 在命令行中可以输入下面命令设置root密码,这样就能随时使用root权限了: [email protected]:~$ su 密码: su:认证失败 [email protected]:~$ sudo passwd [sud

django+centos+mariadb读写分离完美实现(上)-mysql主从备份实现

首先画图一张,用来展示今天要做的事情,读写分离,个人理解就是使用mysql主从备份的原理,让两个数据库同时为自己提供服务.其中主库负责数据保存,从库负责数据展示,可以一主一从,也可以一主多从.从而降低数据库同时处理读写的压力. 1.环境如下 master 10.10.101.83 slave 10.10.101.184 2.接着搭建数据库备份,使用的是centos7.4+mariadb 2-1-两台服务器安装Mariadb数据库 (ps:mariadb是免费版的mysql,操作很相似,注意,两台

MySQL主从备份

MySQL双机热备 环境说明 Msql主备结构 1.Master: Mysql主节点,Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程.返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置: 2.Slave: Slave节点, Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文

mysql 主从备份

准备 用两台服务器做测试: Master Server: 192.0.0.1/Linux/MYSQL 4.1.12 Slave Server: 192.0.0.2/Linux/MYSQL 4.1.18         做主从服务器的原则是,MYSQL版本要相同,如果不能满足,最起码从服务器的MYSQL的版本必须高于主服务器的MYSQL版本 二.配置master服务器 1. 登录Master服务器,编辑my.cnf #vim /etc/my.cnf 在[mysqld]段添加以下内容: [mysql

MySQL主从备份配置

MySQL主从热备配置 两台服务器的MySQL版本都是5.5.41master:192.168.3.119slave:192.168.3.120 MySQL主服务器配置:1.创建用于备份的用户 grant replication slave on *.* to 'slave'@'192.168.3.120' identified by 'wy2015';2.开启主服务器的 binarylog  /etc/my.cnf server-id = 1log-bin=mysql-binbinlog-do

MySQL主从备份(2)v0.9

基于lvm2的备份: 前提:数据目录位于逻辑卷,包含了数据文件和事务日志: (1) 请求锁定所有表: mysql> FLUSH TABLES WITH READ LOCK; (2) 记录二进制文件事件位置: mysql> FLUSH LOGS; mysql> SHOW MASTER STATUS; mysql  -e  'SHOW MASTER STATUS;' >> /PATH/TO/SOME_POS_FILE (3) 创建快照卷 lvcreate  -L # -s -p

mysql 主从备份实验

1.分别在master服务器和slave服务器上安装 mysql $yum install -y mysql mysql-dev mysql-master A.在master上操作: A.1.编辑mysql配置文件: $ vim /etc/my.cnf 在[mysqld]段内添加行: server-id=129           #根据喜好随便起,最好有一定规律. log-bin=mysql-bin       #开启二进制日志功能,必须 A.2. 重启mysqld服务,进入mysql $se

MySQL主从备份详细步骤

1.主从服务器分别作以下操作: 1.1.版本一致  1.2.初始化表,并在后台启动mysql  1.3.修改root的密码 2.修改主服务器master:   #vi /etc/my.cnf       [mysqld]       log-bin=mysql-bin   //[必须]启用二进制日志       server-id=222      //[必须]服务器唯一ID,默认是1,一般取IP最后一段 3.修改从服务器slave:   #vi /etc/my.cnf       [mysql

MySQL 主从同步中断常见问题

Error_code: 1032 [现象]  Last_Error: Could not execute Update_rows event on table kebao.t1; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000014, end_log_pos 114166 140719 23:01:04 [ER