将MySQL服务器从一台计算机迁移到另一台

8

数据库过于庞大(> 400MB),因此导出 > SCP > 源的工作需要花费数小时。

有更简单的方法吗?我能直接连接到数据库并从新服务器导入吗?

9个回答

12

那个链接似乎已经失效了。不过,这是我所做的。进入源终端并键入“locate my.cnf”。在您喜欢的文本编辑器中打开文件(vi /etc/mysql/my.cnf),找到“datadir=”行。然后,您只需要在目标服务器上重复此操作。现在,您应该压缩源文件夹的内容并将其通过ftp传输到目标服务器。然后只需在数据目录中解压即可。 - Jason

6

您可以使用SSH直接将数据通过互联网传输。首先设置SSH密钥以进行无密码登录。接下来,尝试类似以下的操作:

$ mysqldump -u db_user -p some_database | gzip | ssh someuser@newserver 'gzip -d | mysql -u db_user --password=db_pass some_database'

注意:

  • 基本思路是将标准输出直接转储到另一侧的命令中,这正是SSH所擅长的。
  • 如果您不需要加密,则可以使用netcat,但可能不值得。
  • SQL文本数据通过网络传输时会被压缩!
  • 显然,将db_user更改为用户用户,将some_database更改为您的数据库。 someuser是(Linux)系统用户,而不是MySQL用户。
  • 您还必须以长方式使用--password,因为让mysql提示您会带来很多麻烦。

2
你不需要使用ssh。你可以简单地执行以下命令: mysqldump -u db_user -p some_database | mysql -u db_user -p -h newserver some_database - Gary Richardson
1
但在我所在的地方,禁用mysql的远程访问是很常见的。而SSH则是随时可用的。理论上来说,如果有正确的授权,这是可能的,但对我来说,SSH是最现实的使用场景。 - Peter Lindqvist
3
你可以使用ssh的-C选项来压缩流量,而不必在ssh的两端都使用gzip。 - Slashterix

4
您可以设置MySQL从服务器复制数据,然后将从服务器升级为新的主服务器。

好的观点,但是怎么做呢?你的答案不完整。 - TheRealChx101

2

400M并不是一个很大的数据库;在100Mbit网络上将其转移到另一台机器只需要几分钟时间。如果您的机器之间没有100M网络,那么您就有大麻烦了!

如果它们运行着完全相同版本的MySQL,并且具有相同(或足够相似的)my.cnf文件,而您只想要整个数据的副本,那么可以安全地复制服务器的整个数据目录(当然,在停止两个实例时)。您需要首先删除目标机器的数据目录,但您可能并不关心这一点。

备份/恢复通常会因为恢复需要重建表结构而变慢,而不是文件复制。通过直接复制数据文件,您可以避免这种情况(受上述限制的约束)。


很遗憾,它们不在同一列。 - Brad Wright
400MB并不算大,SCP提供压缩功能。实际上,它的速度大约快2倍。 - Michał Leon

2
如果你正在迁移服务器:
转储文件可能会非常大,因此最好在发送之前将其压缩或使用scp的-C标志。我们传输文件的方法是创建完整的转储,在其中刷新增量日志(请使用--master-data=2 --flush logs,并检查是否有任何从机主机)。然后我们复制该转储并播放它。之后我们再次刷新日志(mysqladmin flush-logs),获取最近的增量日志(应该不会很大)并仅播放它。一直这样做,直到最后一个增量日志非常小,以便您可以停止原始机器上的数据库,复制最后一个增量日志,然后播放它-这应该只需要几分钟。
如果您只想从一个服务器复制数据到另一个服务器:
mysqldump -C --host=oldhost --user=xxx --database=yyy -p | mysql -C --host=newhost --user=aaa -p

您需要正确设置数据库用户并授权给外部主机访问。


1

尝试使用mysql控制台在新服务器上导入转储,而不是辅助软件


0

我喜欢使用BigDump:分阶段Mysql Dump导入器,在从旧服务器导出数据库后进行导入。

http://www.ozerov.de/bigdump/

需要注意的一点是,如果您不根据新服务器的负载设置导出选项(即创建查询的最大长度),它将会失败,您将不得不使用不同的参数再次尝试。个人建议将其设置为约25,000,但这只是我的经验。多试几次,您就会掌握要领。

0

我对使用mysql进行此操作没有经验,但在我看来,瓶颈似乎是传输实际数据?

400MB并不算太多。但如果dump -> SCP很慢,我认为从远程框连接到db服务器也不会更快?

我建议先进行转储、压缩,然后通过网络复制或刻录到光盘并手动传输数据。压缩这样的转储很可能会给您带来相当好的压缩率,因为很可能有很多重复数据。


0

如果您只是复制服务器的所有数据库,请复制整个/data目录。

如果您只想复制一个或多个数据库并将它们添加到现有的mysql服务器:

  1. 在新服务器上创建空数据库,设置用户权限等。
  2. 将位于/data/databasename中的数据库文件夹复制到新服务器的/data/databasename中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接