首先申明:这只是一篇日志,写得不太严谨,毕竟我是将生产环境的数据下载后(部分表)恢复至开发环境,用于历史数据查询。

从阿里云下载hins8247923_data_20191118055735_qp.xb,即*_qp.xb数据库,作如下处理: 一、安装开源的Percona XtraBackup备份恢复工具: 操作系统中已安装数据恢复工具Percona XtraBackup,可以从Percona XtraBackup官网下载安装。 MySQL 5.6及之前的版本需要安装 Percona XtraBackup 2.3,安装指导请参见https://www.percona.com/doc/percona-xtrabackup/2.3/installation.html?spm=a2c4g.11186623.2.13.3f4d30eb5k7pdZ MySQL 5.7版本需要安装 Percona XtraBackup 2.4,安装指导请参见https://www.percona.com/doc/percona-xtrabackup/2.4/installation.html?spm=a2c4g.11186623.2.14.3f4d30eb5k7pdZ MySQL 8.0版本需要安装 Percona XtraBackup 8.0,安装指导请参见https://www.percona.com/doc/percona-xtrabackup/8.0/installation.html?spm=a2c4g.11186623.2.15.3f4d30eb5k7pdZ 由于我是CentOS7.6的机器,MySQL为5.7的版本,因此: yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm yum list | grep percona yum install percona-xtrabackup-24 另外,innobackupex解压命令需要安装qpress,您可以使用命令yum install qpress -y安装。 二、解压文件 对于xbstream 文件包(_qp.xb 后缀),使用命令:

解包

cat <数据备份文件名>_qp.xb | xbstream -x -v -C /home/mysql/data

解压

innobackupex --decompress --remove-original /home/mysql/data 三、物理文件拷贝恢复 1.直接拷贝物理文件至相应的MySQL的Windows机器,没错,我这台是开发机,因为Web和DB放在同一台Windows机器上了,生产则是分开的 2.拷贝到相应的位置并更名为需要的数据库名称,旧的数据库文件夹改其他名称 3.进mysql查询相应表格,报错: mysql>use xxxbakDB mysql> select * from UserStudent; ERROR 1812 (HY000): Tablespace is missing for table saplatformdb.userstudent. 输入以下命令: mysql> alter table UserStudent import tablespace; 如果出现: ERROR 1808 (HY000): Schema mismatch (Table has ROW_TYPE_DYNAMIC row format, .ibd file has ROW_TYPE_COMPACT row format.) 说明表格定义的行格式与表空间不匹配,需要继续后续操作。 4.要先将UserStudent.idb数据文件删除 mysql> alter table Studentfollowlog discard tablespace; 5.显示查询建表语句: mysql> show create table UserStudent; 会出现类似下面一段语句,拷贝它:

CREATE TABLE UserStudent ( Id int(11) NOT NULL AUTO_INCREMENT COMMENT '自增Id', ....... KEY idx_et (EndDate) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=29172 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='【用户任务表】' ;

复制以上语句,并将ROW_FORMAT=改成相匹配的ROW_FORMAT=DYNAMIC或ROW_FORMAT=COMPACT。

之间有个小插曲: 一显示建表语句或做其他查询,MySQL服务就直接Down掉,不停的关闭,在my.ini中加入以下节: [mysqld] innodb_force_recovery = 4 修改完重启后再查询show create table UserStudent; 注意:如果后面建表的时候报ERROR 1874 (HY000): InnoDB is in read only mode 记得注释掉my.ini中的 [mysqld] #innodb_force_recovery = 4 再重启MySQL服务

5.然后删除表后并重建表: mysql> drop table UserStudent ; mysql> CREATE TABLE UserStudent ( .....(省略,就是上面那一段) 如果出现:ERROR 1808 (HY000): Schema mismatch (Table has ROW_TYPE_DYNAMIC row format, .ibd file has ROW_TYPE_COMPACT row format.) CREATE TABLE时最后一行要指定:ROW_FORMAT=COMPACT 6.此时看看能不有查询数据: mysql>select * from UserStudent limit 0,10 ; 如果出现:mysql> select * from UserStudent limit 0,10; ERROR 1812 (HY000): Tablespace is missing for table 'xxxxdb.UserStudent' . 作如下操作: mysql>alter table UserStudent discard tablespace; 然后将备份文件里面的 UserStudent.ibd 拷贝至现在的数据库位置后,输入: mysql> alter table UserStudent import tablespace; 再查询确认,一般此时表能够正常查询了: mysql>select * from UserStudent limit 0,10;