利用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版本)选项

qy

环境说明

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

备份恢复步骤

备份表
1
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
导出表
1
2
3
4
5
6
7
8
[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文件–导入表空间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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

坚持原创分享,您的支持将鼓励我继续创作