前言: 随着innodb的普及,innobackup也成为了主流备份方式。物理备份对于新建slave,全库恢复的需求都能从容应对。
但当面临单表数据误删,或者单表误drop的情况,如果使用物理全备进行恢复呢?
下文将进行详细分析。
恢复过程中需要用到的工具,percona data recover tool : https://launchpad.net/percona-innodb-recovery-tool
情况一:误删部分数据,需要用最近一次备份覆盖 来自同一台机器的ibd恢复覆盖,且备份后table没有被recreate过。
这种情况是最简单的,备份时的ibd文件(后称老ibd)中的space id和index id 与 新ibd的space id 和index id一致。
且和ibdata文件中的space id和index id一致。因此,物理文件可以直接覆盖做恢复。
以下是详细步骤 Step -1 : 物理备份
innobackupex --defaults-file=/usr/local/mysql3321/my.cnf --socket=/xfs/mysql3321/mysql.sock --user=root --password=password /xfs/backup/
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
复制代码 代码如下:
Initializing table definitions...
Processing table: SYS_TABLES
- total fields: 10
- nullable fields: 6
- minimum header size: 5
- minimum rec size: 21
- maximum rec size: 555
Processing table: SYS_INDEXES
- total fields: 9
- nullable fields: 5
- minimum header size: 5
- minimum rec size: 29
- maximum rec size: 165
Setting SPACE=1 in SYS_TABLE for `test`.`testibd`
Check if space id 1 is already used
Page_id: 8, next page_id: 4294967295
Record position: 65
Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 8 50 3 2 0 0 0 0 0
Db/table: infimum
Space id: 1768842857 (0x696E6669)
Next record at offset: 8D
Record position: 8D
Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 11 17 24 32 36 40 48 52 52
Db/table: SYS_FOREIGN
Space id: 0 (0x0)
Next record at offset: D5
Record position: D5
Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 16 22 29 37 41 45 53 57 57
Db/table: SYS_FOREIGN_COLS
Space id: 0 (0x0)
Next record at offset: 122
Record position: 122
Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 12 18 25 33 37 41 49 53 53
Db/table: test/testibd
Space id: 2 (0x2)
Next record at offset: 74
Space id 1 is not used in any of the records in SYS_TABLES
Page_id: 8, next page_id: 4294967295
Record position: 65
Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 8 50 3 2 0 0 0 0 0
Db/table: infimum
Space id: 1768842857 (0x696E6669)
Next record at offset: 8D
Record position: 8D
Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 11 17 24 32 36 40 48 52 52
Db/table: SYS_FOREIGN
Space id: 0 (0x0)
Next record at offset: D5
Record position: D5
Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 16 22 29 37 41 45 53 57 57
Db/table: SYS_FOREIGN_COLS
Space id: 0 (0x0)
Next record at offset: 122
Record position: 122
Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 12 18 25 33 37 41 49 53 53
Db/table: test/testibd
Space id: 2 (0x2)
Updating test/testibd (table_id 17) with id 0x01000000
SYS_TABLES is updated successfully
Initializing table definitions...
Processing table: SYS_TABLES
- total fields: 10
- nullable fields: 6
- minimum header size: 5
- minimum rec size: 21
- maximum rec size: 555
Processing table: SYS_INDEXES
- total fields: 9
- nullable fields: 5
- minimum header size: 5
- minimum rec size: 29
- maximum rec size: 165
Setting SPACE=1 in SYS_INDEXES for TABLE_ID = 17
Page_id: 11, next page_id: 4294967295
Record position: 65
Checking field lengths for a row (SYS_INDEXES): OFFSETS: 15 8 50 7 2 0 0 0 0
TABLE_ID: 3798561113125514496
SPACE: 1768842857
Next record at offset: 8C
Record position: 8C
Checking field lengths for a row (SYS_INDEXES): OFFSETS: 15 8 16 22 29 35 39 43 47
TABLE_ID: 11
SPACE: 0
Next record at offset: CE
Record position: CE
Checking field lengths for a row (SYS_INDEXES): OFFSETS: 15 8 16 22 29 36 40 44 48
TABLE_ID: 11
SPACE: 0
Next record at offset: 111
Record position: 111
Checking field lengths for a row (SYS_INDEXES): OFFSETS: 15 8 16 22 29 36 40 44 48
TABLE_ID: 11
SPACE: 0
Next record at offset: 154
Record position: 154
Checking field lengths for a row (SYS_INDEXES): OFFSETS: 15 8 16 22 29 35 39 43 47
TABLE_ID: 12
SPACE: 0
Next record at offset: 22C
Record position: 22C
Checking field lengths for a row (SYS_INDEXES): OFFSETS: 15 8 16 22 29 44 48 52 56
TABLE_ID: 17
SPACE: 2
Updating SPACE(0x00000001 , 0x01000000) for TABLE_ID: 17
sizeof(s)=4
Next record at offset: 74
SYS_INDEXES is updated successfully
Step 7 : 使用percona recovery tool 重新checksum ibdata 重复执行以下命令,直到程序没有输出为止。
shell> /root/install/percona-data-recovery-tool-for-innodb-0.5/innochecksum -f /xfs/mysql3321/ibdata1
复制代码 代码如下:
page 8 invalid (fails old style checksum)
page 8: old style: calculated = 0xF4AD74CB; recorded = 0xEECB309D
fixing old checksum of page 8
page 8 invalid (fails new style checksum)
page 8: new style: calculated = 0x6F0C29B4; recorded = 0x3D02308C
fixing new checksum of page 8
page 11 invalid (fails old style checksum)
page 11: old style: calculated = 0x3908087C; recorded = 0xF9E8D30C
fixing old checksum of page 11
page 11 invalid (fails new style checksum)
page 11: new style: calculated = 0xB26CFD77; recorded = 0xDB25D39D
fixing new checksum of page 11
Step 8 : 启动mysql服务 shell> service mysqld3321 start
相关推荐:
OpenAI智能诊断医疗-开启精准医疗新纪元,跟侯维静学ai
AI缩写文档:革新文档管理与自动化的未来,ai聊天中文
seo网站反链是什么,网站反链怎么做 ,ai插画头像卡通
GPT优化:让你的工作与生活更高效、更智能,Ai__79
SEO自从上线后的演变与未来发展趋势,拼多多增加关键词排名
seo网站需要做什么,seo都需要做什么 ,ai怎么做喷漆效果
SEO已经成为数字营销的核心,如何利用SEO提升网站流量和转化率,含山网站优化推广
AI免费文章解读:智能写作新篇章,小店AI
亚马逊站内seo是什么优化,亚马逊seo关键词优化软件 ,ai画卡通章鱼
AI免费写文:创作新时代的高效助手
ChatGPT中文版下载,开启智能对话新体验,婚纱ai男
360优化关键词-提升网站流量与排名的秘密武器,美拍ai
中国AI软实力崛起:技术创新与产业应用的完美融合,seo0066
什么是seo概念,什么是seo,sem ,ai音标谐音
SEO导航:助力网站提升流量与排名的必备工具,荣昌建筑网站建设
SEO妍:搜索引擎优化的艺术,轻松打造网络营销新未来,辽宁网站建设贵不贵
GPT-3.5网页版:让你与人工智能零距离接触,ai英语学
为什么seo推广那么多,seo推广难吗 ,东莞ai听译平台
seo需要懂什么源码,seo需要懂什么源码技术 ,ai 纤维
ChatGPT:如果您正在使用VPN,这些技巧您一定要知道!,AI换脸*H
SEO这样做,轻松引爆流量,助力企业成长,无极标准网站优化好处
自动写文章的AI,提升效率的创作利器
亚马逊seo信息是什么,亚马逊seo关键词优化软件 ,光谷ai
为什么要年前做SEO,企业为什么做seo推广 ,云南ai大数据公司
seo需要会什么技术呢,seo需要会什么技术呢知乎 ,红色框ai
ChatGPT为什么网址打不开?原因分析与解决方法,文档审核ai
ChatGPT空白对话:释放创意,开启智能对话的新世界,ai重庆南坪
SEO要求:如何优化网站提升搜索引擎排名,助力企业获取更多流量,鹤山区网站运营推广
seo网络上什么意思,seo表示什么 ,如何避免今日头条ai写作检测
SEO怎么排名?这5大技巧,轻松提升网站排名,人人都可ai
AI撰写工具的无限可能,让内容创作更高效、更精彩!
SEO优化需要花钱吗?从零起步,如何让SEO成为企业的“隐形财富”,字体如何往ai里面倒
SEO符合:提升网站排名的秘诀,助力企业赢在搜索引擎优化的赛道,优化没续费 网站没了
SEO更多-让你的企业站点在搜索引擎中脱颖而出,如何结交seo大神
ChatGPT付款银行卡被拒绝?解决方案全解析!,小发猫ai智能写作查重能过吗
优化,让生活与工作更高效-从个人到企业的全面升级,广州百度seo费用
优化平台:让数字化转型更简单、更高效,莆田谷歌seo品牌排行
代哥SEO-让您的网站迅速登顶搜索引擎的秘密武器,济南关键词的排名优化
SEO搜索关键词是什么意思?全方位解析关键词优化的核心要素,lol ai图片
专业SEO方案助力企业网站流量暴增,精准引流不再是难题,网站建设合同4篇
seo矩阵运营中心是什么,seo矩阵运营中心是什么意思啊 ,北京ai特效
SEO立刻:快速提升网站排名,带你走在搜索引擎前沿,网站建设怎么推广好做
《命运交错的轨迹:小说背后的无尽魅力》,seo优化huifachina
AI免费生成文本,内容创作新篇章
ChatGPT手机下载后打不开?可能是这些问题导致的,解决方法在这里!,孤城ai动画
SEO运营是什么职业,seo运营工程师招聘 ,把ai图层改横幅
为什么seo吸引人,为什么seo吸引人呢 ,ai路径查找器绘制树
颠覆写作方式:免费的AI续写软件助你轻松创作
SEO检测,让网站排名飞升的秘密武器,高端快消食品营销推广
seo站长什么意思,站长工具 - seo综合查询 ,ai少女身材