XtraBackup 单表文件恢复(原版mysql可用)
2015-07-19 01:48
513 查看
MySQL单表ibd文件恢复
前言:
随着innodb的普及,innobackup也成为了主流备份方式。物理备份对于新建slave,全库恢复的需求都能从容应对。
但当面临单表数据误删,或者单表误drop的情况,如果使用物理全备进行恢复呢?
下文将进行详细分析。
恢复过程中需要用到的工具,percona data recover tool : https://launchpad.net/percona-innodb-recovery-tool PS:以下所有方案仅支持 innodb-file-per-table = 1 的情况
注意: 以下操作非文档推荐,切勿在没有测试的情况下直接在production环境使用!!!
情况一:误删部分数据,需要用最近一次备份覆盖
来自同一台机器的ibd恢复覆盖,且备份后table没有被recreate过。
这种情况是最简单的,备份时的ibd文件(后称老ibd)中的space id和index id 与 新ibd的space id 和index id一致。
且和ibdata文件中的space id和index id一致。因此,物理文件可以直接覆盖做恢复。
以下是详细步骤
——————————————-准备阶段————————————————-
Step -2 : 物理备份
innobackupex –defaults-file=/usr/local/mysql3321/my.cnf
–socket=/xfs/mysql3321/mysql.sock –user=root –password=password
/xfs/backup/
Step -1 : 停止数据库对外服务
service mysqld restart (起在另外一个端口上)
或者 停止所有业务连接并且set global innodb_max_dirty_pages_pct =0
——————————————操作阶段—————————————————-
Step 0 : apply log
innobackupex –apply-log –defaults-file=/usr/local/mysql3321/my.cnf /xfs/backup/2012-10-17_11-29-20/
Step 1 : 备份现在的ibd文件(可选)
cp -a testibd.ibd testibd.bak
Step 2 : 舍弃现在ibd文件
mysql> alter table testibd discard tablespace
Step 3 : 复制备份ibd文件
shell> cp /xfs/backup/2012-10-17_11-29-20/test/testibd.ibd /xfs/mysql3321/test/
shell> chown mysql:mysql /xfs/mysql3321/test/testibd.ibd
Step 4 : 导入ibd文件
mysql> alter table testibd import tablespace
情况二:误删 table,表结构已经被drop了
这种情况稍复杂,不过恢复过程还是比较容易操作的。由于table被drop后的space id会留空因此备份文件的space id不会被占用。
我们只需要重建表结构,然后把ibdata中该表的space id还原,物理文件可以直接覆盖做恢复了。
Step 1 : 重建表
mysql> create table testibd (UserID int);
Step 2 : 关闭mysql服务(必须)
shell> service mysqld3321 stop
Step 3: 准备ibd文件 apply log
shell> innobackupex –apply-log –defaults-file=/usr/local/mysql3321/my.cnf /xfs/backup/2012-10-17_11-29-20/
Step 4 : 备份现在的ibd文件(可选)
cp -a testibd.ibd testibd.bak
Step 5 : 复制备份ibd文件
shell> cp -a /xfs/backup/2012-10-17_11-29-20/test/testibd.ibd /xfs/mysql3321/test/
shell> chown mysql:mysql /xfs/mysql3321/test/testibd.ibd
Step 6 : 使用percona recovery tool 修改ibdata
shell>
/root/install/percona-data-recovery-tool-for-innodb-0.5/ibdconnect -o
/xfs/mysql3321/ibdata1 -f /xfs/mysql3321/test/testibd.ibd -d test -t
testibd
输出结果
Step 7 : 使用percona recovery tool 重新checksum ibdata
重复执行以下命令,直到程序没有输出为止。
shell> /root/install/percona-data-recovery-tool-for-innodb-0.5/innochecksum -f /xfs/mysql3321/ibdata1
输出结果
Step 8 : 启动mysql服务
shell> service mysqld3321 start
原文位置 http://www.cnblogs.com/cenalulu/archive/2012/10/17/2727438.html
前言:
随着innodb的普及,innobackup也成为了主流备份方式。物理备份对于新建slave,全库恢复的需求都能从容应对。
但当面临单表数据误删,或者单表误drop的情况,如果使用物理全备进行恢复呢?
下文将进行详细分析。
恢复过程中需要用到的工具,percona data recover tool : https://launchpad.net/percona-innodb-recovery-tool PS:以下所有方案仅支持 innodb-file-per-table = 1 的情况
注意: 以下操作非文档推荐,切勿在没有测试的情况下直接在production环境使用!!!
情况一:误删部分数据,需要用最近一次备份覆盖
来自同一台机器的ibd恢复覆盖,且备份后table没有被recreate过。
这种情况是最简单的,备份时的ibd文件(后称老ibd)中的space id和index id 与 新ibd的space id 和index id一致。
且和ibdata文件中的space id和index id一致。因此,物理文件可以直接覆盖做恢复。
以下是详细步骤
——————————————-准备阶段————————————————-
Step -2 : 物理备份
innobackupex –defaults-file=/usr/local/mysql3321/my.cnf
–socket=/xfs/mysql3321/mysql.sock –user=root –password=password
/xfs/backup/
Step -1 : 停止数据库对外服务
service mysqld restart (起在另外一个端口上)
或者 停止所有业务连接并且set global innodb_max_dirty_pages_pct =0
——————————————操作阶段—————————————————-
Step 0 : apply log
innobackupex –apply-log –defaults-file=/usr/local/mysql3321/my.cnf /xfs/backup/2012-10-17_11-29-20/
Step 1 : 备份现在的ibd文件(可选)
cp -a testibd.ibd testibd.bak
Step 2 : 舍弃现在ibd文件
mysql> alter table testibd discard tablespace
Step 3 : 复制备份ibd文件
shell> cp /xfs/backup/2012-10-17_11-29-20/test/testibd.ibd /xfs/mysql3321/test/
shell> chown mysql:mysql /xfs/mysql3321/test/testibd.ibd
Step 4 : 导入ibd文件
mysql> alter table testibd import tablespace
情况二:误删 table,表结构已经被drop了
这种情况稍复杂,不过恢复过程还是比较容易操作的。由于table被drop后的space id会留空因此备份文件的space id不会被占用。
我们只需要重建表结构,然后把ibdata中该表的space id还原,物理文件可以直接覆盖做恢复了。
Step 1 : 重建表
mysql> create table testibd (UserID int);
Step 2 : 关闭mysql服务(必须)
shell> service mysqld3321 stop
Step 3: 准备ibd文件 apply log
shell> innobackupex –apply-log –defaults-file=/usr/local/mysql3321/my.cnf /xfs/backup/2012-10-17_11-29-20/
Step 4 : 备份现在的ibd文件(可选)
cp -a testibd.ibd testibd.bak
Step 5 : 复制备份ibd文件
shell> cp -a /xfs/backup/2012-10-17_11-29-20/test/testibd.ibd /xfs/mysql3321/test/
shell> chown mysql:mysql /xfs/mysql3321/test/testibd.ibd
Step 6 : 使用percona recovery tool 修改ibdata
shell>
/root/install/percona-data-recovery-tool-for-innodb-0.5/ibdconnect -o
/xfs/mysql3321/ibdata1 -f /xfs/mysql3321/test/testibd.ibd -d test -t
testibd
输出结果
Step 7 : 使用percona recovery tool 重新checksum ibdata
重复执行以下命令,直到程序没有输出为止。
shell> /root/install/percona-data-recovery-tool-for-innodb-0.5/innochecksum -f /xfs/mysql3321/ibdata1
输出结果
Step 8 : 启动mysql服务
shell> service mysqld3321 start
原文位置 http://www.cnblogs.com/cenalulu/archive/2012/10/17/2727438.html
相关文章推荐
- MySQL数据库InnoDB数据恢复工具使用总结
- win8.1安装mysql56版本的时候出现服务无法启动
- mysql中文乱码
- MySQL-config-slow
- 简单介绍下MYSQL的索引类型
- MySQL 的模块不能安装的解决方法
- mysql 修改密码和设置允许远程登录
- MySQL中myisas和innoDB
- mysql int和varchar
- mysql join和where
- mysql如何查询不是身份证号(15位和18位都有)的记录
- MySQL中myisas和innoDB
- mysql int和varchar
- mysql join和where
- MySQL字符集相关命令
- mysql如何查询不是身份证号(15位和18位都有)的记录
- mysql如何查询不是身份证号(15位和18位都有)的记录
- mysql安装图解及报错解决
- MySQL中数据库、数据表、字段的字符集查询方式
- 如何解决MySQL插入部分中文字符的报错问题