使用场景

每次开启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#/
知数堂 - 最靠谱、最有品质的培训品牌
- 从xtrabackup备份恢复单表【转】
目前对MySQL比较流行的备份方式有两种,一种上是使用自带的mysqldump,另一种是xtrabackup,对于数据时大的环境,普遍使用了xtrabackup+binlog进行全量或者增量备份,那么 ...
- Oracle 备份、恢复单表或多表数据步骤
Oracle 备份.恢复单表或多表数据步骤,适用于 Oracle 8.9.10. *备份单表或多表数据: exp user/password@server file=filefullpa ...
- 【理论篇】Percona XtraBackup 恢复单表
小明在某次操作中,误操作导致误删除了某个表,需要立即进行数据恢复. 如果是数据量较小的实例,并且有备份,即便是全备,做一次全量恢复,然后单表导出导入,虽然麻烦一点,却也花不了多少时间:如果是数据量大的 ...
- 从xtrabackup备份恢复单表
目前对MySQL比较流行的备份方式有两种,一种上是使用自带的mysqldump,另一种是xtrabackup,对于数据时大的环境,普遍使用了xtrabackup+binlog进行全量或者增量备份,那么 ...
- MYSQL数据库根据data文件中的.frm和ibd文件恢复单表数据
数据库误操作,把表的字段删除了,关键是被删除的字段的数据很重要,现在想要恢复数据,下面说说是怎么操作的. 数据库只剩.frm和.ibd文件了,按照网上的做法分如下两步来进行:一.找回表结构,二.找回数 ...
- django 利用ORM对单表进行增删改查
牛小妹上周末,一直在尝试如何把数据库的数据弄到界面上.毕竟是新手,搞不出来,文档也看不懂.不过没关系,才刚上大学.今晚我们就来解释下,要把数据搞到界面的第一步.先把数据放到库里,然后再把数据从库里拿出 ...
- 从mysqldump整库备份文件中恢复单表
最近,系统更新出现了问题,比较紧急,需要对三张表进行回档.由于我们都是采用mysqldump进行每天全备整库,数据量比较大,一个备份文件大概有70G,需要从这个70G文件中恢复三张表,真是蛋疼至极啊, ...
- 万答#14,xtrabackup8.0怎么恢复单表
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 实 ...
- xtrabackup 恢复单表步骤
1.apply-log应用redo日志,并导出表的数据字典innobackupex --apply-log --export 备份集 2.建表 如果知道表结构,则重建删除的表 create tabl ...
随机推荐
- CentOS 网络设置
CentOS 网络设置有两种方式配置网络可以连接外网: 自动分配与手动设置Ip 一,自动分配ip: 新装的centos6.0,用ifconfig只显示ifcfg-lo的信息,可以用ifup eth0的 ...
- JAVA-序列化深拷贝对象
序列化拷贝方法 @SuppressWarnings("unchecked") public static <T extends Serializable> T clon ...
- Linux记录-在线扩容8e
1.fdisk -l 2.增加分区 3.3:键入 p,主分区,并键入3(编号): 默认起始扇区和结束扇区即可(键入两次Enter) 键入t,修改分区类型为8e: 键入w,写分区表,然后重启: 卷扩容, ...
- a标签与js的冲突
如上图,需要做一个页面,点击左边的标题,右边就显示左边标题下的子标题的集合, html代码如下: <div id="newleft"> <ul> <l ...
- CNPM
cnpm 代替 npm npm install -g cnpm --registry=https://registry.npm.taobao.org Reference 淘宝 NPM 镜像
- mq【转】
kafka解决了什么问题? mq的几个指标 1.消息堆积能力.两亿条1k大小消息体的消息发上来,积压一周不消费,机器哭不哭. 2.吞吐量.来个峰值,每秒两万,连续两小时,临时扩容扛不扛得住. 3.安全 ...
- HDU 1018(阶乘位数 数学)
题意是求 n 的阶乘的位数. 直接求 n 的阶乘再求其位数是不行的,开始时思路很扯淡,想直接用一个数组存每个数阶乘的位数,用变量 tmp 去存 n 与 n - 1 的阶乘的最高位的数的乘积,那么 n ...
- linux常用命令说明
1. 基础快捷键使用 ctrl + c:停止进程 ctrl + l:清屏 ctrl + r:搜索历史命令 ctrl + q:退出 2.常用目录或文件夹命令 说明:安装linux时,创建一个itcast ...
- js工具库
js-md5:https://www.npmjs.com/package/js-md5
- ZooKeeper基础
======================================ZooKeeper 背景======================================ZooKeeper 是一 ...