首页 > 代码库 > 利用Percona XtraBackup进行单表备份恢复

利用Percona XtraBackup进行单表备份恢复

大部分情况下,使用用Percona XtraBackup进行整库的备份和恢复比较容易,此处略去;
对于单表的恢复略有不同,而且对数据库版本和Percona XtraBackup的版本都有限制
局限性:
1.源库MySQL版本无要求,但启用了innodb_file_per_table=1
2.目的库开启innodb_file_per_table=1,Percona XtraDB或者MySQL5.6
官方要求开启下面的两个参数,但发现5.6没有这样的变量,没去修改:innodb_expand_import=1(大于5.5.10-20.1版本)或innodb_import_table_from_xtrabackup=1(小于5.5.10-20.1版本)选项

环境说明

源库 :Percona-Server-5.5.28-rel29.3-388
目的库:Percona-Server-5.6.16-rel64.2-569
备份工具 : percona-xtrabackup-2.2.4-5004

备份恢复步骤
备份表
innobackupex --user=root --password=simlinux.com   --defaults-file=/etc/my.cnf --include=‘se.searchaccount‘ --slave-info --safe-slave-backup --stream=tar /data/backup > /data/backup/searchaccount.tar.gz
 导出表
[root@simlinux ~]#tar -ixf searchaccount.tar.gz -C /data/databak/
[root@simlinux ~]#innobackupex --apply-log --export /data/databak

[root@simlinux ~]#ll /data/databak/se
-rw-r--r-- 1   root  root     3382    9月  13 13:57 searchaccount.cfg
-rw-r--r-- 1   root  root    16384   9月  13 13:57 searchaccount.exp
-rw-rw---- 1  root  root   23968    9月  13 13:40 searchaccount.frm
-rw-rw---- 1  root  root  2097152 9月   13 13:40 searchaccount.ibd
 还原表

定义表--删除表空间--拷贝*.ibd/*.cfg文件--导入表空间

CREATE TABLE `searchaccount` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `cid` mediumint(7) unsigned NOT NULL DEFAULT ‘0‘,
  `siteid` int(10) unsigned NOT NULL DEFAULT ‘0‘ COMMENT ‘账号对应广告监测站点(online.site.id)‘,
  `searchen` tinyint(2) unsigned NOT NULL DEFAULT ‘0‘ COMMENT ‘1: 百度 2: 谷歌 3:搜狗 4:搜搜‘,
  `oid` bigint(10) unsigned NOT NULL DEFAULT ‘0‘ COMMENT ‘对接账号ID(如SOGOU后台取得唯一ID)‘,
  `name` varchar(30) NOT NULL DEFAULT ‘‘ COMMENT ‘账号名称‘,
  `acountname` varchar(100) NOT NULL DEFAULT ‘‘ COMMENT ‘搜索账号用户名/邮箱‘,
  `certifiedname` varchar(50) NOT NULL DEFAULT ‘‘ COMMENT ‘百度V认证名称‘,
  `acountpass` varchar(100) NOT NULL DEFAULT ‘‘ COMMENT ‘搜索账号密码‘,
  `accesstoken` varchar(100) NOT NULL DEFAULT ‘‘ COMMENT ‘360权限代码‘,
  `budgettype` tinyint(1) NOT NULL DEFAULT ‘1‘ COMMENT ‘预算类型 1:日预算 2:周预算 0:不限制预算‘,
  `budget` decimal(12,2) NOT NULL DEFAULT ‘0.00‘ COMMENT ‘帐号预算,google帐号需要用到‘,
  `weeklybudget` varchar(1024) NOT NULL DEFAULT ‘‘ COMMENT ‘周预算存储的值‘,
  `erate` decimal(5,3) NOT NULL DEFAULT ‘0.000‘ COMMENT ‘汇率‘,
  `ispublic` tinyint(1) NOT NULL DEFAULT ‘1‘ COMMENT ‘是否通过审核,0为未通过,1为通过‘,
  `servicerate` decimal(5,2) NOT NULL DEFAULT ‘0.00‘ COMMENT ‘服务费比率‘,
  `krnum` mediumint(6) unsigned NOT NULL DEFAULT ‘0‘ COMMENT ‘百度关键字推荐API配额‘,
  `agent` tinyint(2) NOT NULL DEFAULT ‘0‘ COMMENT ‘代理公司 1:广州 2:深圳‘,
  `authtoken` varchar(500) NOT NULL DEFAULT ‘‘ COMMENT ‘google API authoken值‘,
  `tokenovertime` int(10) unsigned NOT NULL DEFAULT ‘0‘ COMMENT ‘authtoken的过期时间‘,
  `opendomains` varchar(220) NOT NULL DEFAULT ‘‘ COMMENT ‘网站开放域名,多个域名用,分隔‘,
  `excludeip` varchar(512) NOT NULL DEFAULT ‘‘ COMMENT ‘排除IP,以,分隔‘,
  `regions` varchar(2048) NOT NULL DEFAULT ‘‘ COMMENT ‘投放地区‘,
  `regionlevel` tinyint(1) NOT NULL DEFAULT ‘2‘ COMMENT ‘投放地域开通的级别 1级 2级‘,
  `campaigns` smallint(4) unsigned NOT NULL DEFAULT ‘0‘,
  `groups` smallint(5) unsigned NOT NULL DEFAULT ‘0‘,
  `creatives` mediumint(6) unsigned NOT NULL DEFAULT ‘0‘,
  `keywords` mediumint(7) unsigned NOT NULL DEFAULT ‘0‘,
  `dailyfee` decimal(10,2) NOT NULL DEFAULT ‘0.00‘ COMMENT ‘平均每天消耗‘,
  `costbefore` decimal(10,2) NOT NULL DEFAULT ‘0.00‘ COMMENT ‘账号暂停前的消耗,用于统计帐号暂停前的消耗‘,
  `costpause` decimal(10,2) NOT NULL DEFAULT ‘0.00‘ COMMENT ‘重新签约时,将之前暂停统计到的消费(costbefore)累加到此字段‘,
  `balance` decimal(10,2) NOT NULL DEFAULT ‘0.00‘ COMMENT ‘总账户余额‘,
  `adwordsbalance` decimal(10,2) NOT NULL DEFAULT ‘0.00‘ COMMENT ‘搜索广告余额‘,
  `networkbalance` decimal(10,2) NOT NULL DEFAULT ‘0.00‘ COMMENT ‘网盟余额‘,
  `reapi` tinyint(1) NOT NULL DEFAULT ‘0‘ COMMENT ‘是否需要重新全部同步api, 1全部同步,0不全部‘,
  `errorcode` char(32) NOT NULL DEFAULT ‘0‘ COMMENT ‘百度的错误代码为数字类型;谷歌的为大写字符串‘,
  `syntime` int(10) unsigned NOT NULL DEFAULT ‘0‘ COMMENT ‘同步时间‘,
  `statusrank` tinyint(1) NOT NULL DEFAULT ‘0‘ COMMENT ‘暂停竞价设置 0自动暂停 1保持运行状态‘,
  `status` tinyint(1) unsigned NOT NULL DEFAULT ‘1‘ COMMENT ‘运行状态,1:正常 2:暂停 3:异常 9: 删除‘,
  `createtime` int(10) unsigned NOT NULL DEFAULT ‘0‘ COMMENT ‘创建时间‘,
  `ocreatetime` int(10) NOT NULL DEFAULT ‘0‘ COMMENT ‘暂停时记录客户第一次添加时间‘,
  `stopReason` varchar(20) DEFAULT NULL,
  `updateTime` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `acountname` (`acountname`,`searchen`),
  KEY `cid` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=10389 DEFAULT CHARSET=utf8 COMMENT=‘搜索营销账号表‘;



mysql > ALTER TABLE se.searchaccount DISCARD TABLESPACE;

[root@simlinux ~]#cp /data/databak/se/{searchaccount.ibd,searchaccount.cfg} /usr/local/mysql/data/se/ 

[root@simlinux ~]#chown mysql.mysql /usr/local/mysql/data/se/ 

mysql > ALTER TABLE se.searchaccount IMPORT TABLESPACE;

 注:.cfg文件包含InnoDB字典的特殊存储格式;如果目的库是XtraDB,需要拷贝searchaccount.ibd、searchaccount.exp

参考文档

http://www.percona.com/doc/percona-xtrabackup/2.2/innobackupex/restoring_individual_tables_ibk.html
http://xxrenzhe.blog.51cto.com/4036116/1401454
http://wangfeng7399.blog.51cto.com/3518031/1394996

利用Percona XtraBackup进行单表备份恢复