MySQL没有剩余空间时该怎么办?
出于好奇,假设您有一个巨大的MySQL数据库,其中充满了用户信息,现在已经满了。如何在同一台服务器和另一台存储空间更大的服务器上运行同一个MySQL数据库?正如我所见,最好的解决方案是将数据库移动到一台容量更大的新服务器上,并在那里还原当前数据库。当前服务器缺少磁盘空间和内存等关键资源,因此严重影响了数据库的性能MySQL没有剩余空间时该怎么办?,mysql,Mysql,出于好奇,假设您有一个巨大的MySQL数据库,其中充满了用户信息,现在已经满了。如何在同一台服务器和另一台存储空间更大的服务器上运行同一个MySQL数据库?正如我所见,最好的解决方案是将数据库移动到一台容量更大的新服务器上,并在那里还原当前数据库。当前服务器缺少磁盘空间和内存等关键资源,因此严重影响了数据库的性能 在新服务器中安装mysql 从现有数据库中获取数据库表结构(就创建表xxx而言)(使用我的sql数据库管理工具(如SQLYG)可以很容易地获得) 在新服务器中运行新创建数据库的DDL脚
迁移后,需要为使用相同数据库的任何引用应用程序更改适用的数据源文件。如果问题只是存储空间问题,那么最简单的解决方案是将数据库传输到另一个容量更大的系统 另一个解决方案是向同一系统添加磁盘,然后
[编辑]详细说明: 以下信息仅在Linux服务器上有效。在Windows下可能会这样,但我不知道。无论如何,在Windows上运行MySQL数据库在大规模环境中可能不是一个好主意 这三个选项基于相同的原则:
- 将另一个磁盘装入文件系统
- 将一些现有MySQL数据文件移动到此新硬盘,即移动到新目录,和/或指示MySQL在此新目录中创建新数据文件
- 如果需要,创建一个指向新位置的符号链接,以欺骗MySQL使其认为文件没有移动
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在一种幸福的无知中恢复。你打算在两台服务器上并行运行MySQL吗?@YaK不惜一切代价为数据库留出更多空间。正如@Sanath所指出的,保留旧的、饱和的服务器可能不是最好的主意,除非你想办法在上面释放一些空间。这可能很有用-你能给我介绍一个教程来解释这一点吗?我真的不知道该怎么说\我不明白。这个“转储”会让我保留数据库中的所有信息吗?我想做的就是,如果一台服务器上的数据库已满,那么它将继续运行到下一台服务器上,并继续正常运行。我的意思是,Facebook如何存储这么多信息?MySQL?什么?@Sanath:如果我理解你的意思,你的解决方案是将整个数据库转移到另一个系统?如果是这样,那么简单的
mysqldump
就可以了。@YaK我一点也不懂。传输不会占用同样的空间吗?一个数据库不能工作吗