Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL没有剩余空间时该怎么办?_Mysql - Fatal编程技术网

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

MySQL没有剩余空间时该怎么办?,mysql,Mysql,出于好奇,假设您有一个巨大的MySQL数据库,其中充满了用户信息,现在已经满了。如何在同一台服务器和另一台存储空间更大的服务器上运行同一个MySQL数据库?正如我所见,最好的解决方案是将数据库移动到一台容量更大的新服务器上,并在那里还原当前数据库。当前服务器缺少磁盘空间和内存等关键资源,因此严重影响了数据库的性能 在新服务器中安装mysql 从现有数据库中获取数据库表结构(就创建表xxx而言)(使用我的sql数据库管理工具(如SQLYG)可以很容易地获得) 在新服务器中运行新创建数据库的DDL脚

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

正如我所见,最好的解决方案是将数据库移动到一台容量更大的新服务器上,并在那里还原当前数据库。当前服务器缺少磁盘空间和内存等关键资源,因此严重影响了数据库的性能

  • 在新服务器中安装mysql
  • 从现有数据库中获取数据库表结构(就创建表xxx而言)(使用我的sql数据库管理工具(如SQLYG)可以很容易地获得)
  • 在新服务器中运行新创建数据库的DDL脚本
  • 使用现有数据库创建.dat文件
  • 将其复制到新服务器,并针对新数据库运行该.dat文件
  • 进一步阅读


  • 迁移后,需要为使用相同数据库的任何引用应用程序更改适用的数据源文件。

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

    另一个解决方案是向同一系统添加磁盘,然后

  • (InnoDB)到该驱动器(InnoDB甚至允许存储)
  • (MyIsam)将一些*.MYD和/或*.MYI文件移动到此驱动器
  • 上述文件可以移动到不同的硬盘驱动器(可能需要从原始位置进行符号链接)

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

    您可能还希望遵循以下步骤,即目前正在真实环境中解决这个问题


    [编辑]详细说明:

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

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

    • 将另一个磁盘装入文件系统
    • 将一些现有MySQL数据文件移动到此新硬盘,即移动到新目录,和/或指示MySQL在此新目录中创建新数据文件
    • 如果需要,创建一个指向新位置的符号链接,以欺骗MySQL使其认为文件没有移动
    1. InnoDB引擎允许将表空间分布到多个文件中。要调整的配置选项(在
    my.cnf
    中)为。例如:

    innodb_data_file_path=/mnt/hard_disk1/ibdata:50G;/mnt/hard_disk2/ibdata:200G;
    
    。。。指示MySQL在
    /mnt/hard\u disk2/ibdata2
    中创建一个50GB文件和一个200GB文件

    我个人不喜欢这个特性,因为MySQL在第一个文件满之前根本不会使用第二个文件,这不允许进行微调。好的一面是,您只需要编辑配置文件并重新启动服务器。就这样

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

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

    3.在MyISAM文件中移动 对于每个MyISAM表,MySQL创建三个名为
    [datadir]/[database]/[table].[type]
    的文件,其中
    [datadir]
    由选项定义,
    [database]
    是数据库的名称,
    [table]
    是表名

    [type]
    对于表描述(结构),
    MYD
    对于数据,
    MYI
    对于索引

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

    1) 要移动整个数据库,请执行以下操作:

    • 停止服务器
    • 数据库
      目录重命名为您喜欢的另一个名称,例如
      备份
    • 将硬盘作为
      /database
    • 备份
      的内容移动到
      /数据库
    • 重新启动服务器
    MySQL恢复时就像什么都没发生过一样

    2) 要移动各个表,请执行以下操作:

    • 将新磁盘装载到您喜欢的任何位置
    • 停止服务器
    • 将每个文件分别移动到新硬盘驱动器
    • 在原始位置创建与原始文件同名的符号链接
    • 重新启动服务器

    MySQL在一种幸福的无知中恢复。

    你打算在两台服务器上并行运行MySQL吗?@YaK不惜一切代价为数据库留出更多空间。正如@Sanath所指出的,保留旧的、饱和的服务器可能不是最好的主意,除非你想办法在上面释放一些空间。这可能很有用-你能给我介绍一个教程来解释这一点吗?我真的不知道该怎么说\我不明白。这个“转储”会让我保留数据库中的所有信息吗?我想做的就是,如果一台服务器上的数据库已满,那么它将继续运行到下一台服务器上,并继续正常运行。我的意思是,Facebook如何存储这么多信息?MySQL?什么?@Sanath:如果我理解你的意思,你的解决方案是将整个数据库转移到另一个系统?如果是这样,那么简单的
    mysqldump
    就可以了。@YaK我一点也不懂。传输不会占用同样的空间吗?一个数据库不能工作吗