关于大型mysql(innodb)数据库:大型mysql(innodb)数据库-查询性能慢,表消失,恢复备份时间长

large mysql (innodb) database - slow query performance, disappearing tables and long time to restore backups

我有一个数据库,其中有 3 个表,每个表的行数超过 2000 万。我使用 GUID 作为主键(不幸的是)。现在我们的数据库大约有 20GB,并且每月增长 5GB。

完全备份数据库大约需要 2 小时,在 4GB RAM 的机器上恢复需要 30 小时。

我们曾经让数据库中的所有表都消失了。同一台服务器中的其他 mysql 数据库都很好,除了一个 - 只有一个数据消失了,留下了空表。

选择查询(在许多慢查询中)- 在 20m 表之一中获取日期列的最大值大约需要 5 分钟才能返回结果。这个查询经常使用。

我正在寻找答案

  • 推荐的数据库设计更改
  • 提高选择查询性能的方法 - 20m 记录的最大日期列
  • 其他查询\\'性能
  • 如何处理未来的数据库增长
  • 感谢大家的关注。


    Innodb 热备份的免费替代品是 Percona XtraBackup Tool。


    我见过更大尺寸的设置(InnoDB 作为存储引擎,GUID 作为主键),没有这样的问题。

    We once have all the tables from database disappeared. other mysql databases in same server were alright except one - for which only data was disappeared leaving empty tables.

    如果系统 LSN 低于每个页面的 LSN,表格可能看起来是空的。如果 InnoDB 日志文件已损坏,则可能会发生这种情况。但是,InnoDB 在这种情况下会发出警告。

    A select query (among many slow queries) - which get max of a date column in one of 20m table takes about 5 mins to return result. This query used pretty frequently.

    在该列上创建索引,查询将是即时的。

    请发布确切的查询,我会告诉你如何创建最佳索引。

    我认为 DB 的设计没有问题,很可能是你的服务器的问题。

    是否可以在另一台安装了干净的 vanilla MySQL 的服务器上重现此行为?

    您可能还想尝试在表之间拆分数据。设置 innodb_file_per_table 并从备份中恢复。


    你也可以试试 Mydumper:http://www.mydumper.org/

    这是一个很棒的工具,而且是免费和开源的


    对于备份,您可以使用 innodb 热备份工具。这不仅可以让您在数据库启动时进行一致的备份,而且恢复速度比您正在执行的备份要快得多(我假设是 mysqldump?)。确实要花钱。