版本mysql5.7 innodb引擎,采用了独立表空间配置即innodb_file_per_table=1 ,ibdata1损坏,或者物理迁移直接拷贝数据库整体目录,包括frm,ibd文件可以采用一下方法恢复
1.先根据已有的frm新建所有表,采用工具mysqlfrm
安装包:centos7为例
mysql-utilities-1.6.5-1.el7.noarch.rpm
mysql-connector-python-2.1.8-1.el7.x86_64.rpm
可以在官网直接下载
/usr/bin/mysqlfrm --basedir=/usr/local/mysql --port=3307 --user=root /root/ytdy_test/ > /root/test_frm.sql ####port 不要采用已经启用的数据库端口,/root/ytdy_test 是保存的frm和ibd文件
每个创建语句没有以;分号结尾,通过subline工具正则替换
连接mysql,创建相同名字数据库,create database ytdy_test;
use ytdy_test;
source 刚刚编辑的文件
可以发现表已经创建;
执行下面语句;将新建的表的ibd文件删除
select concat('alter table ',table_name,' discard tablespace;') from information_schema.tables where table_schema='ytdy_test' into outfile '/opt/mysql/data/exptest.sql';
use ytdy_test;
source /opt/mysql/data/exptest.sql
将/root/ytdy_test中的ibd文件整体copy到新数据库目录下,执行授权;chown -R mysql.mysql *.ibd
执行:
select concat('alter table ',table_name,' import tablespace;') from information_schema.tables where table_schema='ytdy_test' into outfile '/opt/mysql/data/imp.sql';
use ytdy_test;
source /opt/mysql/data/imptest.sql
批量导入
即可成功