由于阿里云经典网络迁移到专用网络,一不小心没有先预备方案调整网段, 导致实例无法以内网IP形式访问数据库,被迫进行数据库停机后网络网段调整,导致宕机了几个小时。。。被客户各种投诉爆了。。

基于这次数据库恢复血泪史, 特整理解决办法, 让日后同学避免再犯。

数据库master库重启后, 确保能正常提供服务。由于生产上BI系统使用的是slave从库做数据查询, 从库的数据库已经落后了master好几天,

查看从库状态:

mysql> show slave status\G;

显示

Slave_IO_Running: No
Slave_SQL_Running: No

说明从库尚未启动数据库同步, 由于几天的binlog的数据量太大, 找binlog开始位置找了好久没找到, 索性先把当前的master数据库导出一份拷贝到从库, 按照导出的时间找binlog位置点。

使用 mysqldump 命令导出整个master 到文件 hairdonkey.sql.2018-07-20

从库先删除后新增

# 删除从库的数据库
drop database hairdonkey;
# 创建新数据库
CREATE DATABASE `hairdonkey` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
# 导入备份的数据
use hairdonkey;
source /data/db_backup/master/hairdonkey.sql.2018-07-20
# 用户授权
grant select, delete, insert, update on hairdonkey.* to onlyreader@'172.%';
flush privileges;

从库导入完毕后,开始关键的一步: 找binlog开始同步的位置!

查询binlog位置
(数据库中表数据新增最频繁的表是关键短信发送日志表sms_message_log, 每秒1-2条的频率,故查从库的sms_message_log表的最后一条记录的插入时间!):
1. 导出sms_message_log表:
/data/mysql/bin/mysqldump --socket=/data/mysql/mysql.sock -h172.17.120.167 -uhairdonkey -p123 -B hairdonkey --table sms_message_log --opt --extended-insert=false --single-transaction > sms_message_log.sql;
2.vim 编辑sms_message_log.sql 把 sms_message_log 全部替换为 mid_sms_message_log
把主表的sms_message_log数据导入到从库中的中间表 mid_sms_message_log (替换命令: :%s/sms_message_log/mid_sms_message_log/g )
3. 执行sql :

source /data/work/sms_message_log.sql
4. 查询mid_sms_message_log比从库多的数据, 并倒叙排列:
select * from hairdonkey.mid_sms_message_log a where not exists(
select 1 from sms_message_log b where a.id = b.id
) order by id desc;
记录max(id) as maxSmsId, min(id) as minSmsId
 
5. 查看短信发送时间字段 send_tm 的最大最小值, 导出这个时间区间的Binlog:
mysqlbinlog -uhairdonkey -p123 -P3306 -h172.17.120.167 --start-datetime="2018-07-21 19:55:40" --stop-datetime="2018-07-21 19:55:59" --read-from-remote-server -vv mysql-bin.000772 >row3.sql
 
6. 编辑模式打开row3.sql, 查找短信记录表minSmsId所在的位置的insert sql对应的endPos 记为 minEndPos,
maxSmsId 所在的位置的insert sql对应的endPos 记为 maxEndPos
导出这两个区间的binlog:

mysqlbinlog -uhairdonkey -p123 -P3306 -h172.17.120.167 --start-position="875932395" --stop-position="878561125" --read-from-remote-server -vv mysql-bin.000772 >row2.sql
 
7. 运行row2.sql: source /data/work/row2.sql
8. 比较mid_sms_message_log和从库的sms_message_log表数据,应该是已经数量一致了
9. 设置从库同步位置点(这个点就是maxEndPos):
(1)停止从库同步:stop slave;
(2) 修改master信息:
change master to master_host='172.17.120.167',master_user='hairdonkey',master_password='',master_log_file='mysql-bin.000772',master_log_pos=875845853;
(3) 启动从库:start slave;
(4) 查看从库状态:show slave status \G;
看到如下两个为Yes, 说明同步成功!
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

附加:

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 #跳过所有错误
---------------------
作者:seteor
来源:CSDN
原文:https://blog.csdn.net/seteor/article/details/17264633
版权声明:本文为博主原创文章,转载请附上博文链接!

数据库主库从库宕机重启后binlog数据同步的更多相关文章

  1. cvm母机宕机重启后数据库修复

    下午正在开周会,然后收到短信,说是X.X.X.X的机器ping不通了,一轮测试过后,发现是某台数据库服务器挂了,先不急着重启,问下tencent客服... 乖乖的好家伙,母机的主板坏了....一个小时 ...

  2. 一个参数引起的mysql从库宕机血案

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://suifu.blog.51cto.com/9167728/1859252 一个参数 ...

  3. Oracle备库宕机启动解决方案

    简介 ORA-10458: standby database requires recovery ORA-01196: 文件 1 由于介质恢复会话失败而不一致 ORA-01110: 数据文件 1: ' ...

  4. 宕机了,Redis数据丢了怎么办?

    持续原创输出,点击上方蓝字关注我 目录 前言 什么是AOF? 三种写回策略 日志文件太大怎么办? AOF重写会阻塞主线程吗? AOF的缺点 总结 什么是RDB? 给哪些数据做快照? 快照时能够修改数据 ...

  5. primary库新增数据文件后,standby库无法创建文件并终止数据同步

    主库是RAC环境,使用asm存放数据文件,备库是操作系统本地文件系统存放数据文件.在主库执行以下操作: SQL> alter tablespace ysdv add datafile '+dat ...

  6. 解决PC有道云笔记卸载重装后无法数据同步问题

    将客户端内容成功同步后,按键盘win键选择文件资源管理器,将以下路径一次粘贴到搜索框按回车搜索,将搜索到的所有内容(文件,文件夹)全部删除,再重启软件登录账户同步试试看 配置目录:%USERPROFI ...

  7. 一次Oracle宕机切换后产生ORA错误的处理过程

    问题背景 机房意外断电后Oracle主服务器启动失败,Oracle备机接管 为了安全,管理员对于数据库做expdp的逻辑备份.但备份时发现AttributeInstance表备份失败,提示ORA-01 ...

  8. openstack环境-解决windows虚机重启后比当前时间晚8小时问题

    背景: 生产环境下,发现windows虚机每次重启,时间都会倒退到虚机的格林威治时间(+8小时才是北京时间),也就是比当前时间晚8小时.测试发现,windows虚机所用的镜像,缺少了一个os_type ...

  9. keepalived 容器在宿主机重启后无法启动问题:报错:daemon is already running

    初步猜测原因是:keepalived容器内的keepalived.pid文件在keepalived容器非正常退出时,没有正确删除,造成第二次启动时容器检查到pid文件已经存在,认为该进程已经存在,因为 ...

随机推荐

  1. PDF怎样添加注释,PDF文件添加注释的方法

    Word文件跟纸质文件想要添加注释相信大家都知道该怎么添加,那么现在也使用频率挺高的PDF格式的文件要怎么添加注释呢?添加注释的方法有什么呢?有许多的小伙伴们都想知道吧,今天小编就来跟大家分享一下,想 ...

  2. 在node中使用MongoDB

    1.下载安装包,进行安装: https://www.mongodb.com/download-center/community 参考网址:https://www.cnblogs.com/ymwange ...

  3. Emacs Org-mode 1 下载、安装、基本使用

    1.1 总述 Org 是一种帮助我们做笔记.日常事件或者项目计划的快速高效的文本格式系统. Org 有以下特点: Org mode 基于组织结构(outline-mode)对文本进行组织.具有良好的快 ...

  4. 阿里云OSS 获取目录下所有文件

    public class AliyunHandle { public static string accessKeyId = "a1uI5xxxxxxxxxrP4H"; publi ...

  5. Resharper 详细教程

    前言 注:本文部分内容转载自:http://www.cnblogs.com/luminji/p/3285505.html 原文中部分快捷键在8.2版本中不适用,我已改正,并用红色标注出来 在线API: ...

  6. Burnside引理与Polya定理 学习笔记

    原文链接www.cnblogs.com/zhouzhendong/p/Burnside-Polya.html 问题模型 有一个长度为 $n$ 的序列,序列中的每一个元素有 $m$ 种取值. 如果两个序 ...

  7. MariaDB配置、集群

    MariaDB在centos 7.3的安装,配置和集群搭配 阿里云最新选配系统中,只有centos7.3可选,因此,基于centos 7的MariaDB的安装,配置... 全部删除MySQL/Mari ...

  8. 使用 Java 将多个文件压缩成一个压缩文件

    使用 Java 将多个文件压缩成一个压缩文件 一.内容 ①使用 Java 将多个文件打包压缩成一个压缩文件: ②主要使用 java.io 下的类 二.源代码:ZipMultiFile.java pac ...

  9. Python数据分析基础教程

    Python数据分析基础教程(第2版)(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1_FsReTBCaL_PzKhM0o6l0g 提取码:nkhw 复制这段内容后 ...

  10. centos如何设置固定IP

    ### centos6.5版本 编辑ifcfg-eth0 vi /etc/sysconfig/network-scripts/ifcfg-eth0 参照下面代码修改自己的配置 ############ ...