当MySQL没有剩余空间时该怎么办?

时间:2012-06-17 06:41:08

标签: mysql

出于好奇,假设你有一个庞大的MySQL数据库,其中充满了用户信息,现在已经满了。如何从同一台服务器和另一台具有更多存储空间的服务器上运行相同的MySQL数据库?

2 个答案:

答案 0 :(得分:4)

如果问题只是存储空间问题,那么最简单的解决方案是将数据库传输到另一个容量更大的系统。

另一种解决方案可能是将磁盘添加到同一系统,

  1. (InnoDB)extend the tablespace到此驱动器(InnoDB甚至允许存储each table in a separate file
  2. (MyIsam)将部分* .MYD和/或* .MYI文件移至此驱动器
  3. 上述文件可以移动到其他硬盘(可能需要从原始位置进行符号链接)。

    然而,真正广泛可扩展的解决方案是数据库集群,如MySQL cluster

    您可能还想关注this question,其中此问题目前正在真实环境中解决。


    [编辑]详细说明:

    以下信息仅在Linux服务器上有效。在Windows下可能可能,但我不知道。无论如何,在Windows上运行MySQL数据库可能不是一个好主意。

    这三个选项依赖于相同的原则:

    • 将另一个磁盘装入文件系统
    • 将一些现有的MySQL数据文件移动到这个新硬盘,即移动到新目录,和/或指示MySQL在这个新目录中创建新的数据文件
    • 如果需要,为新位置创建一个符号链接,以便让MySQL认为文件没有移动

    1。 Extend the InnoDB tablespace

    InnoDB引擎允许将表空间分布在许多文件中。调整(在my.cnf中)的配置选项是innodb_data_file_path。例如:

    innodb_data_file_path=/mnt/hard_disk1/ibdata:50G;/mnt/hard_disk2/ibdata:200G;
    

    ...指示MySQL创建/mnt/hard_disk1/ibdata1,一个50GB的文件,以及/mnt/hard_disk2/ibdata2中的200GB文件。

    我个人不喜欢这个功能,因为MySQL根本不会使用第二个文件,直到第一个文件已满,这不允许微调。好的一面是你只需要编辑配置文件并重启服务器。就是这样。

    2。存储each InnoDb table in a separate file

    innodb_file_per_table选项,顾名思义,指示MySQL为每个 new 表创建一个单独的文件。 “新表”表示更改设置后不会影响现有表。为了避免这种情况,可以转储,删除和重新创建要从共享表空间“提取”的表。

    这些文件是[datadir]/[database]/[table].ibd,其中[datadir]datadir选项定义,[database]是数据库的名称,[table]是表名。 这些文件可以像MyISAM表一样移动(参见下一个选项)。

    3。移动MyISAM文件

    对于每个MyISAM表,MySQL创建三个名为[datadir]/[database]/[table].[type]的文件,其中[datadir]datadir选项定义,[database]是数据库的名称,{ {1}}是表名。

    对于表格描述(结构),

    [table][type],对于数据为frm,对于索引为MYD

    现在,关于选项2和3.,您注意到所有文件大致位于同一目录中,或者至少共享父目录。要将它们实际存储在新硬盘上,有两种选择。

    1)移动整个数据库:

    • 停止服务器
    • MYI目录重命名为您喜欢的其他名称,例如database
    • 将硬盘装载为datadir backup
    • /databse的内容移至datadir backup
    • 重启服务器

    MySQL恢复,好像什么也没发生过一样。

    2)移动单个表:

    • 将新磁盘安装到任何您喜欢的位置
    • 停止服务器
    • 将每个文件单独移动到新硬盘
    • 在原始位置创建符号链接,其名称与原始文件相同
    • 重启服务器

    MySQL恢复了幸福的无知。

答案 1 :(得分:0)

正如我所看到的,最好的解决方案是将数据库移动到具有更高容量的新服务器并在那里恢复当前数据库。当前服务器缺少磁盘空间和内存等关键资源,因此严重妨碍了数据库的性能。

  1. 在新服务器中安装mysql
  2. 从现有数据库中获取数据库表结构(就CREATE TABLE xxx而言)(这可以很容易地使用我的SQL数据库管理工具,如SQLYog)
  3. 在新服务器
  4. 中运行新创建数据库的此DDL脚本
  5. 使用现有数据库创建.dat文件
  6. 将其复制到新服务器并针对新数据库运行该.dat文件
  7. 进一步阅读

    1. http://www.devshed.com/c/a/MySQL/Backing-up-and-restoring-your-MySQL-Database/
    2. 迁移后,需要更改使用相同数据库的任何引用应用程序的适用数据源文件。