AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 422061
Accepted
Oneiroi
Oneiroi
Asked: 2012-08-29 07:42:13 +0800 CST2012-08-29 07:42:13 +0800 CST 2012-08-29 07:42:13 +0800 CST

mysql - 无法删除不存在的表,无法创建存在的表

  • 772

服务器崩溃后,我们在某个特定表引用方面遇到了一些非常奇怪的问题。

选择从备份中恢复数据库被删除并加载备份 SQL 转储,只有这在创建表时失败,cache_content错误为“表已存在”

mysql> create table cache_content( id int NOT NULL DEFAULT 0 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ERROR 1005 (HY000): Can't create table '****.cache_content' (errno: -1) mysql> drop table cache_content; ERROR 1051 (42S02): Unknown table 'cache_content'

奇怪的是,drop table 删除了 .frm 而不是 .ibd 文件(如果存在),create table 将创建 .ibd 文件而不是 .frm 文件。

我已经尝试了多种恢复方法,包括将转储导入新数据库(顺利完成),关闭 mysql 并复制相关的 .frm 和 .ibd 文件,然后使用idbconnect尝试附加此“已知良好”版本:

... Space id: 1952673645 (0x74636F6D) Next record at offset: 74 TABLE_ID of `****/`.`cache_content` can not be 0 ...

检查 information_schema 中的相关表,我可以看到是这样的,并且 TABLESPACE 已分配给 0

mysql> select * from INNODB_SYS_TABLES where `SCHEMA`="*****";
+----------+--------+--------------------------+------+--------+-------+
| TABLE_ID | SCHEMA | NAME                     | FLAG | N_COLS | SPACE |
+----------+--------+--------------------------+------+--------+-------+
...

|    19791 | *****  | cache_content            |    1 |      9 |     0 |
+----------+--------+--------------------------+------+--------+-------+
N rows in set (0.01 sec)

mysql> select * FROM INNODB_SYS_INDEXES where TABLE_ID=19791;
+----------+--------+----------+------+----------+---------+-------+
| INDEX_ID | NAME   | TABLE_ID | TYPE | N_FIELDS | PAGE_NO | SPACE |
+----------+--------+----------+------+----------+---------+-------+
|     7919 | expire |    19791 |    0 |        1 |  311158 |     0 |
+----------+--------+----------+------+----------+---------+-------+
1 row in set (0.00 sec)

服务器版本:Percona-Server-server-55-5.5.27-rel28.0.291.rhel6.x86_64

现在,从我读过的文章中,我相当确定删除 ibdata1 ib_logfile* 可能是清理这个“幽灵”引用的唯一方法。

我的问题:有什么方法可以清除这些幽灵引用以允许从备份中恢复表?

mysql
  • 1 1 个回答
  • 12070 Views

1 个回答

  • Voted
  1. Best Answer
    Oneiroi
    2012-08-29T11:07:17+08:002012-08-29T11:07:17+08:00

    最后我选择从备份中恢复所有数据库,

    1. mysqldump --all-databases --triggers > /path/to/dumpfile.sql
    2. service mysql shutdown
    3. rm -rf /path/to/datadir && mkdir /path/to/datadir && chown mysql.mysql /path/to/datadir
    4. iptables -I INPUT -p tcp --dport 3306 -j REJECT && service mysql start
    5. mysql_install_db --datadir=/path/to/datadir
    6. mysql < /path/to/dumpfile.sql
    7. 从单个备份中删除并恢复在 1. 期间未完好无损的任何数据库
    8. service mysql restart && service iptables restart

    我将把这个答案留在这里,下周不接受这个问题;我希望有人可以提供不需要重建整个 ibdata 的解决方案。

    • 3

相关问题

  • 开源与专有关系 db mgt 系统的优缺点是什么?

  • 在 solaris 10 上为 mysql 设置 max_allowed_pa​​cket

  • 如何移动 MySQL 的数据目录?

  • 通过 VPN 连接什么是远程服务器 IP?

  • mysql崩溃

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve