1:在新安装的mysql数据库上做实验
创建一个表名相同的表,字段可以随意。
mysql> use resdb;
Database changed
mysql> create table t_wlkj_user_inf(id int);
Query OK, 0 rows affected (0.03 sec)
2、关闭mysql
service mysql stop
3、由于我安装的mysql指定了data-dir为/usr/local/mysql/data/mysql,故在该目录会有一个数据库命名的resdb目录,在resdb目录存放 t_wlkj_user_inf.frm 和t_wlkj_user_inf.ibd两个文件。
[root@localhost resdb]# pwd
/usr/local/mysql/data/mysql/resdb
[root@localhost resdb]# ls
db.opt t_wlkj_user_inf.frm t_wlkj_user_inf.ibd
把我们的备份t_wlkj_user_inf.frm文件覆盖产生的t_wlkj_user_inf.frm
[root@localhost resdb]# cp /root/back_mysql/t_wlkj_user_inf.frm /usr/local/mysql/data/mysql/resdb/
cp:是否覆盖"/usr/local/mysql/data/mysql/resdb/t_wlkj_user_inf.frm"? y
开启mysql服务,使用use resdb的时候会报诸如
2018-01-09T08:19:46.170814Z 3 [Warning] InnoDB: Table resdb/t_wlkj_user_inf contains 1 user defined columns in InnoDB, but 16 columns in MySQL. Please check INFORMATION_SCHEMA.INNODB_SYS_COLUMNS
的记录,发现原表拥有16个字段
找到表字段个数之后,删除掉原来随意一个字段的表,重新建立一个含16个字段的表
create table t_wlkj_user_inf(t1 int,t2 int,t3 int,t4 int,t5 int,t6 int,t7 int,t8 int,t9 intt,t11 int,t12 int,t13 int,t14 int,t15 int,t16 int);
4、在mysql所使用的my.cnf(可以在安装目录下的my.cnf修改,不需要修改/etc/my.cnf全局文件)
增加如下配置
innodb_force_recovery=6
然后重启mysql服务
service mysql restart
可以查看到表的结构信息。
mysql> desc t_wlkj_user_inf;
+-----------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+-------+
| ID | varchar(32) | NO | PRI | NULL | |
| USER_NAME | varchar(60) | YES | | NULL | |
| LOGIN_NAME | varchar(30) | YES | | NULL | |
| USER_NO | varchar(30) | YES | | NULL | |
| PWD | varchar(50) | YES | | NULL | |
| PASSWORD | varchar(50) | YES | | NULL | |
| DEPT_ID | varchar(32) | YES | MUL | NULL | |
| ORDER_ID | int(11) | YES | | NULL | |
| REMARKS | varchar(300) | YES | | NULL | |
| STATUS | char(1) | YES | | NULL | |
| DEL_FLAG | char(1) | YES | | NULL | |
| LAST_LOGIN_IP | varchar(50) | YES | | NULL | |
| LAST_LOGIN_TIME | varchar(19) | YES | | NULL | |
| CREATE_TIME | varchar(19) | YES | | NULL | |
| MODIFY_TIME | varchar(19) | YES | | NULL | |
| TYPE | char(1) | NO | | 1 | |
+-----------------+--------------+------+-----+---------+-------+
16 rows in set (0.00 sec)
弄完之后,记得删除innodb_force_recovery=6,或者注释,重启mysql服务。