出于好奇,假设你有一个庞大的MySQL数据库,其中充满了用户信息,现在已经满了。如何从同一台服务器和另一台具有更多存储空间的服务器上运行相同的MySQL数据库?
答案 0 :(得分:4)
如果问题只是存储空间问题,那么最简单的解决方案是将数据库传输到另一个容量更大的系统。
另一种解决方案可能是将磁盘添加到同一系统,
上述文件可以移动到其他硬盘(可能需要从原始位置进行符号链接)。
然而,真正广泛可扩展的解决方案是数据库集群,如MySQL cluster。
您可能还想关注this question,其中此问题目前正在真实环境中解决。
[编辑]详细说明:
以下信息仅在Linux服务器上有效。在Windows下可能可能,但我不知道。无论如何,在Windows上运行MySQL数据库可能不是一个好主意。
这三个选项依赖于相同的原则:
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根本不会使用第二个文件,直到第一个文件已满,这不允许微调。好的一面是你只需要编辑配置文件并重启服务器。就是这样。
innodb_file_per_table
选项,顾名思义,指示MySQL为每个 new 表创建一个单独的文件。 “新表”表示更改设置后不会影响现有表。为了避免这种情况,可以转储,删除和重新创建要从共享表空间“提取”的表。
这些文件是[datadir]/[database]/[table].ibd
,其中[datadir]
由datadir
选项定义,[database]
是数据库的名称,[table]
是表名。
这些文件可以像MyISAM表一样移动(参见下一个选项)。
对于每个MyISAM表,MySQL创建三个名为[datadir]/[database]/[table].[type]
的文件,其中[datadir]
由datadir
选项定义,[database]
是数据库的名称,{ {1}}是表名。
[table]
为[type]
,对于数据为frm
,对于索引为MYD
。
现在,关于选项2和3.,您注意到所有文件大致位于同一目录中,或者至少共享父目录。要将它们实际存储在新硬盘上,有两种选择。
1)移动整个数据库:
MySQL恢复,好像什么也没发生过一样。
2)移动单个表:
MySQL恢复了幸福的无知。
答案 1 :(得分:0)
正如我所看到的,最好的解决方案是将数据库移动到具有更高容量的新服务器并在那里恢复当前数据库。当前服务器缺少磁盘空间和内存等关键资源,因此严重妨碍了数据库的性能。
进一步阅读
迁移后,需要更改使用相同数据库的任何引用应用程序的适用数据源文件。