使用场景

每次开启binlogserver 指定了mysql-bin.0000XX 后都会从该点从头进行传输一次

创建binlogserver
[root@mysql-zst3 binlogserver]# nohup mysqlbinlog --raw --read-from-remote-server --host=172.0.0.51 --port=3308 --user=repl3307 --password=repl --stop-never mysql-bin.000043 &
[2] 8009
 
此时sbtest_bk数据数,此时binlog位置,且binlogserver正常

 
进行truncate table
t1 表现在数据

进行truncate
 
在truncate table 修改主键 为跳跃性的id,紧接着应该进行flush log
"root@localhost:mysql3308.sock [systest]>truncate table t1;
Query OK, 0 rows affected (0.17 sec)
 
"root@localhost:mysql3308.sock [systest]>insert into t1(id) values(40000)
 

模拟继续插入数据

查看此时log-file

可以确认 有tuncate 的log-file 在46上
 
 
这次实验目的是学会使用全备+binlogserver 进行恢复数据
这里的全备使用的是xtrabackup,
恢复综述:
1使用xtrabackup 创建出一个实例(3011)
2在创建一个新实例(3012)存放binlogserver的日志作为3011的伪master
3.创建主从同步日志恢复到truncate前
 
可能遇到的问题:
1.binlogserver的日志中记录的是原库3308 的gtid,可能会有问题
解决办法是不是用auto_master_positon=1
但是在使用xtrabackup恢复的实例3011的gtid是否和3308一致?
 
创建3311 伪master
正确操作
在3311上进行操作:
1、reset master
2、关闭3311实例
3、删除3311实例logdir下所有文件
4、将binlog server下的binary log拷贝到logdir,生成mysql-bin.index文件,修改权限
5、启动3311,show master status
结果是

 
 
=========================================================================
这里记录一个错误
将binlogserver日志拷贝到3311实例的logs目录下,并修改权限
这里做的顺序是:先启动实例修改root密码,增加复制用户,关闭实例,修改mysql-bin.index .启动实例
修改mysql-bin.index方法
[root@mysql-zst3 logs]# ls /data/mysql/mysql3311/logs/mysql-bin.0000* > mysql-bin.index 
 

 此时3311实例的binlog 会发生变化

mysql-bin.00001是最开始生成的,mysql-bin.000048 是由于在第一次启动实例前把日志放到了log目下生成的因此增加复制用户的操作在000048上;mysql-bibn.000049 是修改mysql-bin.index后重启mysql生成的
其他的日志则是mysqlbinlogserver 的日志
注意这里的gtid的serverid(7709xxxx412:1-4)是新生成的和3308的是不一样的,因此在搭建主从的时候可能会影响,且并没有执行传进来的binlog。
这里有个错误:
关于execute_gtid_set这个值。这里我的操作是:初始化库之后修改root密码,添加复制账户。关库,复制binlogserver日志,修改index文件,启动库,因此这里的execute_gtid_set 没有读到日志里的3308的gtid。但是在次执行该操作时就会读出来,即使没有做reset master,但是建议适用reset master后进行重启库
则会读出3308的gtid
关于execute_gtid_set 和binlog_gtid_simple_recovery参数有关,大概作用是重启mysql时读取mysql-bin.index 中文件从头到尾的日志里的所有gtid集合
 
错误记录结束
=============================================================================
搭建3312 作为3311的slave进行恢复
这个3312实例:使用的是的3308 使用xtrabackup的全备进行恢复的。
这里做了一个特殊的操作,如果有需要的可以参考,不需要可不许操作:这里只恢复systest库因此我吧其他库都删除了
除了系统库只剩了systest库

此时观察xtrbackup_binlog_pos_innodb 内的日志位置和xtrabackup_info 是不同的
不过可以进行解析mysql-bin.000046 这里有没有操作(xtrabackup_info记录的是日志里的,因此会比xtabackup_binlog_pos_innodb(记录redo里的)可能会高一些。如果有操作需要手动进行恢复了如手动执行sql,或者日志导入,一般是ddl语句,ddl语句不记录到redo中。或者压根就没操作~~)

启动3312实例

 systest库存在

此时3312的状态

 

搭建主从
1.使用MASTER_AUTO_POSITION=1
"root@localhost:mysql3312.sock [systest]>change master to
-> master_host='172.0.0.52',
-> master_port=3311,
-> master_user='repl',
-> master_password='repl',
-> master_auto_position=1;
Query OK, 0 rows affected, 2 warnings (0.11 sec)
 
指定停止点
"root@localhost:mysql3312.sock [systest]>start slave sql_thread until sql_before_gtids='e2b6a2cf-2e3c-11e8-a9cd-000c29817dea:133'; 注意该value为一个值不是范围
Query OK, 0 rows affected (0.02 sec)
 
开启io_thread
start slave io_thread

2使用master_auto_positon=0搭建主从
确认logfile,logpos起始点
检查xtrabackup_binlog_info上的位置mysql-bin.000046 234 83bc1292-48fe-11e8-b4e2-000c29f1c412:1, 是没有操作的不需要从这开始)

因此确定logfie=mysql-bin.000045
logpos=
 
change master to
master_host='172.0.0.52',
master_port=3311,
master_user='repl',
master_password='repl',
master_log_file='mysql-bin.000045',
master_log_pos=5729109,
master_auto_position=0
 
注意点:
在开启主从也需要停止在truncate table 的事物位置前。
找到truncate table 的位置
mysql-bin.000046上解析,
SET @@SESSION.GTID_NEXT= 'e2b6a2cf-2e3c-11e8-a9cd-000c29817dea:133'/*!*/;为truncate 操作

start slave sql_thread until master_log_file='mysql-bin.000046',master_log_pos=1910151;
在开启io_thread,检查t1表数据,已恢复

此时gtid会发生变化

 

 转自

archer_66的有道云笔记
https://note.youdao.com/share/?id=d5ba0c54eaeea9cba421f9297a786a29&type=note#/

知数堂 - 最靠谱、最有品质的培训品牌

http://zhishutang.com/

利用binlogserver恢复单表实验【转】的更多相关文章

  1. 从xtrabackup备份恢复单表【转】

    目前对MySQL比较流行的备份方式有两种,一种上是使用自带的mysqldump,另一种是xtrabackup,对于数据时大的环境,普遍使用了xtrabackup+binlog进行全量或者增量备份,那么 ...

  2. Oracle 备份、恢复单表或多表数据步骤

    Oracle 备份.恢复单表或多表数据步骤,适用于 Oracle 8.9.10.        *备份单表或多表数据: exp user/password@server file=filefullpa ...

  3. 【理论篇】Percona XtraBackup 恢复单表

    小明在某次操作中,误操作导致误删除了某个表,需要立即进行数据恢复. 如果是数据量较小的实例,并且有备份,即便是全备,做一次全量恢复,然后单表导出导入,虽然麻烦一点,却也花不了多少时间:如果是数据量大的 ...

  4. 从xtrabackup备份恢复单表

    目前对MySQL比较流行的备份方式有两种,一种上是使用自带的mysqldump,另一种是xtrabackup,对于数据时大的环境,普遍使用了xtrabackup+binlog进行全量或者增量备份,那么 ...

  5. MYSQL数据库根据data文件中的.frm和ibd文件恢复单表数据

    数据库误操作,把表的字段删除了,关键是被删除的字段的数据很重要,现在想要恢复数据,下面说说是怎么操作的. 数据库只剩.frm和.ibd文件了,按照网上的做法分如下两步来进行:一.找回表结构,二.找回数 ...

  6. django 利用ORM对单表进行增删改查

    牛小妹上周末,一直在尝试如何把数据库的数据弄到界面上.毕竟是新手,搞不出来,文档也看不懂.不过没关系,才刚上大学.今晚我们就来解释下,要把数据搞到界面的第一步.先把数据放到库里,然后再把数据从库里拿出 ...

  7. 从mysqldump整库备份文件中恢复单表

    最近,系统更新出现了问题,比较紧急,需要对三张表进行回档.由于我们都是采用mysqldump进行每天全备整库,数据量比较大,一个备份文件大概有70G,需要从这个70G文件中恢复三张表,真是蛋疼至极啊, ...

  8. 万答#14,xtrabackup8.0怎么恢复单表

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 实 ...

  9. xtrabackup 恢复单表步骤

    1.apply-log应用redo日志,并导出表的数据字典innobackupex --apply-log --export  备份集 2.建表 如果知道表结构,则重建删除的表 create tabl ...

随机推荐

  1. Visual Studio连接到TFS

    我在学校自己使用git,公司使用VSS,然后这个项目又使用TFS.Visual Studio连接到TFS是这样滴 1.点连接到团队项目 2.添加TFS服务器的url,写到你的http:XXX/tfs就 ...

  2. STM32学习笔记:【003】GPIO

    版本:STM32F429 Hal库v1.10 在STM32中,最常用到的功能莫过于GPIO(General Purpose Input Output .通用输入/输出)了,在STM32中,除了除去AD ...

  3. try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}}引发的惨案

    如题,ajax请求报错:try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}}引发的惨案 要么是404,要么是40 ...

  4. Maven 本地仓库,远程仓库,中央仓库,Nexus私服,镜像 详解

    一. 本地仓库 本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库.这样在你下次使用的时候就不需要从远程下 ...

  5. VS Code +node npm 调试 js

    打开vsCode的调试控制台里面的终端 然后输入下面代码 npm install express-generator -g 1 创建一个命名为 myapp 的应用. express myapp 你就可 ...

  6. [Android] Android v4包CompoundButtonCompatLollipop.class重复问题

    用 Butter Knife  8.8.1  导致v4包CompoundButtonCompatLollipop.class重复问题 详细错误如下: Error:Execution failed fo ...

  7. 回顾一下C++ 编写DLL

    项目模版使用Win32工程创建的dll项目 一.原始代码 使用depends查看导出函数 二.不同编译方式区别 C方式编译(extern "C"): __stdcall调用约定:输 ...

  8. 微信小程序开发(4) 企业展示

    在这篇微信小程序开发教程中,我们将介绍如何使用微信小程序开发企业内部宣传展示等功能. 一.小程序主体部分 一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下: 1. 小程序逻辑 App({ ...

  9. 经典文摘:饿了么的 PWA 升级实践(结合Vue.js)

    自 Vue.js 官方推特第一次公开到现在,我们就一直在进行着将饿了么移动端网站升级为 Progressive Web App 的工作.直到近日在 Google I/O 2017 上登台亮相,才终于算 ...

  10. Javaweb——————sql常用思维导图