1. 程式人生 > >mysql表空間損壞

mysql表空間損壞

spa ref creat 情況 str def 打不開 null foreign

在沒有備份數據的情況下,突然斷電導致表損壞,打不開數據庫。
1)拷貝庫目錄到新庫中
[root@db01 ~]# cp -r /application/mysql/data/world/ /data/3307/data/
2)啟動新數據庫
[root@db01 ~]# mysqld_safe --defaults-file=/data/3307/my.cnf &
3)登陸數據庫查看
mysql> show databases;
4)查詢表中數據
mysql> select from city;
ERROR 1146 (42S02): Table ‘world.city‘ doesn‘t exist #當出現這種報錯時,可能是表空間損壞
5)找到以前的表結構在新庫中創建表
mysql> show create table world.city;
#刪掉外鍵創建語句
CREATE TABLE city (
ID int(11) NOT NULL AUTO_INCREMENT,
Name char(35) NOT NULL DEFAULT ‘‘,
CountryCode char(3) NOT NULL DEFAULT ‘‘,
District char(20) NOT NULL DEFAULT ‘‘,
Population int(11) NOT NULL DEFAULT ‘0‘,
PRIMARY KEY (ID),
KEY CountryCode
(CountryCode),
KEY idx_city (Population,CountryCode),
CONSTRAINT city_ibfk_1 FOREIGN KEY (CountryCode) REFERENCES country (Code)
) ENGINE=InnoDB AUTO_INCREMENT=4080 DEFAULT CHARSET=latin1;
6)刪除表空間文件
mysql> alter table city_new discard tablespaces;
7)拷貝舊表空間文件
[root@db01 world]# cp /data/3307/data/world/city.ibd /data/3307/data/world/city_new.ibd
8)授權
[root@db01 world]# chown -R mysql.mysql

9)導入表空間
mysql> alter table city_new import tablespace;

mysql表空間損壞