mysql 还原 批量ibd和ifm
事件背景:数据物理备份只剩下idb和frm,数据和结构,也没有旧的备份
处理方式:借助mysql-utilities完成数据的恢复
1)首先恢复数据表结构
2)恢复数据
(一)安装mysql-utilities
环境:操作系统为Centos7
安装mysql-utilities1.6.5版本即可,它是基于python2实现的,所以python也不需要升级
wget https://cdn.mysql.com/archives/mysql-utilities/mysql-utilities-1.6.5.tar.gz
tar xvf mysql-utilities-1.6.5.tar.gz
cd mysql-utilities-1.6.5
python setup.py build
python setup.py install
mysqldiff --version
(二)恢复表结构
mysqlfrm --diagnostic /opt/local/data/autumn2 > createtb.sql
通过frm文件生成了建表语句createtb.sql
然后通过建表语句,先创建好库,然后通过source /backup/createtb.sql,完成数据结构的恢复
使用的数据库版本需要和之前的数据库保持一致,所使用字符集也需要保持一致,相关的配置参数也都保持一致,
否则可能会出现相关问题,例如楼主遇到一个问题:
ERROR 1071 (42000) at line 21: Specified key was too long; max key length is 3072 byte
提示的意思是mysql单个列的索引最长为3072,已经超长了
这个问题很好解决,一修改编码格式,要么修改字段长度,
(三)恢复数据
1)抛弃autumn2数据库中表的数据文件
mysql -uroot -p123456 -e "show tables from autumn2"| grep -v Tables_in_autumn2 | while read a; do mysql -uroot -p123456 -e "alter table autumn2.$a discard tablespace"; done
执行成功后,可以到对应的物理文件存储处,会发现没有idb文件了
2)停数据库服务,将有数据旧的idb文件复制到对应的文件存储的地方,再启数据库服务
3)数据文件导入数据库中
mysql -uroot -p123456 -e "show tables from autumn2"| grep -v Tables_in_autumn2 | while read a; do mysql -uroot -p123456 -e "alter table autumn2.$a import tablespace"; done
4)导入完成后,我们可以对表进行检查
mysqlcheck -c autumn2 -uroot -p123456
autumn2.alcohol_cargo_base_bt OK
autumn2.userbase OK
autumn2.worklog OK
.
.
.
--上述也可以把密码写到配置文件中,会比较方便
至此数据库已全部恢复
如果操作过程中有不明白的,欢迎咨询