DB cluster数据删除

当数据库的磁盘满了,需要drop一些比较大的表,但是DROP TABLE 不管用,因为数据库不能写入。

背景

Database: my_db
Table name: my_tbl
Table size: 300GB+

保存了show create table my_tbl的结果
删除了对应的my_tbl.ibdmy_tbl.frm文件

删除之后,想重新把table建上,可能会遇见以下错误

ERROR 1813 (HY000): Tablespace '`XXX`.`XXXXXX`' exists.

尝试

ALTER TABLESPACE [tablespace_name] DROP DATAFILE [file_name]:不管用。


解决方法:

  1. 创建一个新数据库my_db_2,一定是要在同一个MySQL的server上。
  2. 在新db中,运行保存下来的create table语句,此方法可以在当前数据库文件里生成两个对应的文件my_tbl.ibdmy_tbl.frm
  3. my_tbl.frm文件拷贝到旧的数据库(my_db)目录下
  4. chown mysql:mysql my_tbl.frm
  5. 在旧db(my_db)中,运行DROP TABLE my_tbl,此时就能把表删除,然后再用保存的语句创建同样的表。

Reference:

https://stackoverflow.com/a/12086798/5755004

InnoDB: You can drop the orphaned table inside InnoDB by
InnoDB: creating an InnoDB table with the same name in another
InnoDB: database and copying the .frm file to the current database.
InnoDB: Then MySQL thinks the table exists, and DROP TABLE will
InnoDB: succeed.

你可能感兴趣的:(DB cluster数据删除)