从完整备份恢复单个innodb表

转载自:http://www.cnblogs.com/gomysql/p/6600616.html#top

大师兄的博客

现在大多数同学在线上采取的备份策略都是xtrabackup全备+binlog备份,那么当某天某张表意外的删除那么如何从xtrabackup全备中恢复呢?从mysql 5.6版本开始,支持可移动表空间(Transportable Tablespace)那么利用这个功能就可以实现单表的恢复,同样利用这个功能还可以把innodb表移动到另外一台服务器上。可以参考:https://yq.aliyun.com/articles/59271

下面进行从xtrabackup全备恢复单表的测试。

1. 开启了参数innodb_file_per_table

2. 安装工具:mysql-utilities,其中mysqlfrm可以读取表结构。

yum install mysql-utilities -y

查看原表中的数据:

mysql> select * from yayun.t1;
+------+------+
| id   | name |
+------+------+
|    1 | aa   |
|    2 | bb   |
|    3 | cc   |
|    4 | dd   |
+------+------+
4 rows in set (0.00 sec)

mysql> 

执行备份:

innobackupex --defaults-file=/data/mysql/3306/my.cnf --user=root --password=123 --sock=/data/mysql/3306/mysqltmp/mysql.sock /data/

apply-log

innobackupex --defaults-file=/data/mysql/3306/my.cnf --apply-log /data/2017-03-22_16-13-00/

删除t1表:

mysql> use yayun
Database changed
mysql> drop table t1;
Query OK, 0 rows affected (0.13 sec)

mysql> 

读取表结构

mysqlfrm --diagnostic /data/2017-03-22_16-13-00/yayun/t1.frm 

输出:

# Reading .frm file for /data/2017-03-22_16-13-00/yayun/t1.frm:
# The .frm file is a TABLE.
# CREATE TABLE Statement:

CREATE TABLE `yayun`.`t1` (
  `id` int(11) DEFAULT NULL,
  `name` char(180) DEFAULT NULL
) ENGINE=InnoDB;

#...done.

建表:

mysql> use yayun
Database changed
mysql> CREATE TABLE `yayun`.`t1` (
    ->   `id` int(11) DEFAULT NULL,
    ->   `name` char(180) DEFAULT NULL
    -> ) ENGINE=InnoDB;
Query OK, 0 rows affected (0.08 sec)

mysql> 

加一个写锁,确保安全

mysql> lock tables t1 write;
Query OK, 0 rows affected (0.00 sec)

mysql> 

丢弃表空间:

mysql> alter table t1 discard tablespace;
Query OK, 0 rows affected (0.07 sec)

mysql> 

从备份中拷贝ibd文件,并且修改权限

[[email protected]_server_yayun_01 ~]# cp /data/2017-03-22_16-13-00/yayun/t1.ibd /data/mysql/3306/data/yayun/
[[email protected]_server_yayun_01 ~]# chown -R mysql.mysql /data/mysql/3306/data/yayun/t1.ibd 

载入表空间:

mysql> alter table t1 import tablespace;
Query OK, 0 rows affected, 1 warning (0.15 sec)

mysql> show warnings;
+---------+------+------------------------------------------------------------------------------------------------------------------------------------------+
| Level   | Code | Message                                                                                                                                  |
+---------+------+------------------------------------------------------------------------------------------------------------------------------------------+
| Warning | 1810 | InnoDB: IO Read error: (2, No such file or directory) Error opening ‘./yayun/t1.cfg‘, will attempt to import without schema verification |
+---------+------+------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> 

这里有警告,可以忽略。详情可以看:https://yq.aliyun.com/articles/59271
查询数据是否一致:

mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
|    1 | aa   |
|    2 | bb   |
|    3 | cc   |
|    4 | dd   |
+------+------+
4 rows in set (0.00 sec)

mysql> 

最后解锁:

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

mysql> 

mysql-utilities是一个用python2.6写的一个工具集
[email protected]_45_133_centos ~]# rpm -qa |grep mysql-utilities
mysql-utilities-1.3.6-1.el6.noarch
[[email protected]_45_133_centos ~]# rpm -ql mysql-utilities
/usr/bin/mysqlauditadmin
/usr/bin/mysqlauditgrep
/usr/bin/mysqldbcompare
/usr/bin/mysqldbcopy
/usr/bin/mysqldbexport
/usr/bin/mysqldbimport
/usr/bin/mysqldiff
/usr/bin/mysqldiskusage
/usr/bin/mysqlfailover
/usr/bin/mysqlfrm
/usr/bin/mysqlindexcheck
/usr/bin/mysqlmetagrep
/usr/bin/mysqlprocgrep
/usr/bin/mysqlreplicate
/usr/bin/mysqlrpladmin
/usr/bin/mysqlrplcheck
/usr/bin/mysqlrplshow
/usr/bin/mysqlserverclone
/usr/bin/mysqlserverinfo
/usr/bin/mysqluc
/usr/bin/mysqluserclone

参考文章:

https://www.percona.com/blog/2017/03/15/restore-single-innodb-table-full-backup-accidentally-dropping/

时间: 2024-10-12 20:19:51

从完整备份恢复单个innodb表的相关文章

linux 通过scp 复制备份恢复mysql数据表

最近客户有个需求,小弟对于运维的东西也是半瓶醋,所以就果断的摸索了下.折磨了一个晚上终于算是搞定了.因为是两个不同的服务器,本来想用ftp,无奈小弟不是很熟悉,所以就用了scp,但是scp有个问题就是要输入密码才能复制,这下把小弟急坏了,那我这shell脚本咋办, 我的需求是我要每天定时导出三个表,然后通过scp复制到另外一台服务器上,再恢复这三个表的数据. 俗话说,家事找度娘,小弟就翻阅了度娘的衣柜,终于算是找到了件合身的衣服. 该文章链接是这个http://blog.csdn.net/xif

在线热备份数据库之innobackupex 完整备份InnoDB

在线热备份数据库innobackupex 完整备份InnoDB XtraBackup xtrabackup C程序,支持InnoDB/XtraDB innobackupex : 以Perl脚本封装xtrabackup,还支持MyISAM 个人建议由innobackupex增量/完整 + binlog 基本上可以满足小型企业需求 percona-xtrabackup安装部署 依赖库:libev.so 安装依赖事件库 libev 安装percona-xtrabackup 常用选项 含义 - - ho

mysql全库备份恢复某个表

早上小红过来问我说网站的一个功能没了,看了下数据库,少了个表.好吧,心里mmp,开始恢复数据 环境: 全库备份 恢复某一个表 1.1 查看备份数据 [[email protected] mysql_backup]$ ls -lhtotal 16G-rw-r--r-- 1 root root 5.4G May 21 00:58 2018_05_21_00_30_01.all.sql.zip     ##找到了备份数据 1.2  查看备份文件类型 [[email protected] mysql_b

innobackupex xtrabackup 备份恢复mysql数据

复制地址:https://www.linuxyw.com/download/xtrabackup.pdf http://www.linuxyw.com Email:[email protected] xtrabackup 对 MySQL 数据库的备份及恢复 此文档,只是简单地研究了下,用于数据库全备和增备,效果不错 因为目前对此软件未有需求,所以,文档并不完善,等有时间了,再进行完善吧 此文档资料,互联网收集而成 本人博客: http://www.linuxyw.com xtrabackup x

mysql备份恢复详解

前言 为什么需要备份数据? 数据的备份类型 MySQL备份数据的方式 备份需要考虑的问题 设计合适的备份策略 实战演练 使用cp进行备份 使用mysqldump+复制BINARY LOG备份 使用lvm2快照备份数据 使用Xtrabackup备份 总结 前言 我们试着想一想, 在生产环境中什么最重要?如果我们服务器的硬件坏了可以维修或者换新, 软件问题可以修复或重新安装, 但是如果数据没了呢?这可能是最恐怖的事情了吧, 我感觉在生产环境中应该没有什么比数据跟更为重要. 那么我们该如何保证数据不丢

使用xtrabackup备份恢复Mariadb数据库

使用xtrabackup进行备份 Xtrabackup简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具.特点: (1)备份过程快速.可靠: (2)备份过程不会打断正在执行的事务: (3)能够基于压缩等功能节约磁盘空间和流量: (4)自动实现备份检验: (5)还原速度快: 官方介绍和下载地址:https://www.percona.com/software/percona-xtra

MySQL基于LVM快照的备份恢复

目录 1.数据库全备份 2.准备LVM卷 3.数据恢复到LVM卷 4.基于LVM快照备份数据 5.数据灾难恢复 6.总结 写在前面: 测试环境中已安装有mysql 5.5.36数据库,但数据目录没有存放在LVM卷,此次要演示基于LVM的数据备份和恢复,所以就把mysql的数据先迁移到LVM上再做快照卷的备份. 如果innodb表基于LVM来做备份,那事务日志文件和数据文件要在同一个LVM的逻辑卷上,因为在同一时刻我们只能对一个逻辑卷做快照,如果事务日志与数据文件不在同一卷上,那做快照后会导致事务

mysql xtrabackup 备份恢复实现分享

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具 简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具.特点: (1)备份过程快速.可靠: (2)备份过程不会打断正在执行的事务: (3)能够基于压缩等功能节约磁盘空间和流量: (4)自动实现备份检验: (5)还原速度快: X

SQL Server :完整备份,差异备份或事务日志备份,尾部日志备份

事故背景: 突然间数据库无缘无故损坏了,差异备份或事务日志备份在3点才会自动去做,那么如何将2点到2点40之间的数据恢复呢?这就需要通过备份尾部日志进行恢复了. 环境描述: 某公司装了一台SQL Server数据库,为了保证数据库能够在出现故障时及时的修复,管理员做了备份操作,比如说完整备份+差异备份或者完整备份+事务日志备份,而且备份的时间是每隔6个小时做一次完整备份,在每天的1点.6点.12点.18点,6个小时之内是每隔1个小时做一次差异备份事务日志备份,并且和计划任务结合在了一起. 假如现