| 以上举例为单个库表的恢复过程,看到这里大家一定会产生另一个疑问吧?线上的场景不可能是只有一个表的,数据库表很多的情况下,这样一个个表的修改,速度无疑是太慢了.那么存在大量表的情况下如何恢复呢?思路是,取得备份的ibd文件的id值,按id值顺序来建表,中间跨度随便建表语句来凑够数(每个表空间索引id由创建新表的数量依次递增).实现方式如下: 1. 获取备份数据库ibd文件的space id号,并排序. for ibd in `find test_restore/ -name “*.ibd”` ; do ?echo -e “${ibd//// } ? c” ;hexdump -C ${ibd} |head -n 3 |tail -n 1|awk ‘{print ?strtonum(“0x”$6$7)}’ ;done | sort -n ?-k 3 | column -t > /tmp/
 生成的ibd.txt文件,格式如下:(库名–表名–SpaceId) 2. 新建表,查看当前表空间id(假设space id为10) #mysql -uroot –p****** -e”create table test.tt(a bool)” #hexdump -C mysql/test/tt.ibd |head -n 3 |tail -n 1|awk ‘{print ?strtonum(“0x”$6$7)}’
 3. 先创建所有库,准备所有表结构,写脚本,依据space id号自动创建新表 准备好数据库表结构,可以从备份文件里取出来(我们备份方式是把结构和数据分开备份的),或者从其他有相同表结构的服务器上备份再拷贝过来. 参考备份语句: mysqldump -uroot –p****** -d ${db} –T /data/backup/${db}/
 创建原有的数据库: mysql -uroot –p****** -e “create database ${db}”
 恢复表id创建表脚本: #!/bin/bash#因为前面假设为10,所以从11开始创建
 oid=11
 #打开前面生成的ibd.txt文件,按行读取”库名–表名–SpaceId”cat /tmp/ibd.txt | while read db tb id ;do
 (编辑:南平站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
 |