将MySQL服务器从一个盒子迁移到另一个盒子

时间:2009-03-29 16:34:54

标签: mysql linux migration

数据库非常大(> 400MB),因此转储> SCP>证明来源是小时和小时工作。

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

9 个答案:

答案 0 :(得分:12)

您只需复制整个/ data文件夹即可。

查看High Performance MySQL - transferring large files

答案 1 :(得分:6)

使用可以使用ssh直接通过Internet管道数据。首先设置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 :(得分:4)

您可以设置MySQL从属复制并让MySQL复制数据,然后使从属服务器成为新的主服务器

答案 3 :(得分:2)

400M真的不是一个大型数据库;通过100Mbit网络将其转移到另一台机器只需几分钟。如果您的机器之间没有100M网络,那么您将遇到大麻烦!

如果他们运行完全相同的MySQL版本且具有相同(或类似的ENOUGH)my.cnf并且您只需要整个数据的副本,则可以安全地复制服务器的整个数据目录(同时两个实例)显然已经停止了。当然,您首先需要删除目标机器的数据目录,但您可能并不关心它。

备份/恢复通常会因恢复必须重建表结构而不是文件副本而变慢。通过直接复制数据文件,可以避免这种情况(受上述限制)。

答案 4 :(得分:2)

如果您要迁移服务器:

转储文件可能非常大,因此最好在发送或使用scp的-C标志之前对其进行压缩。我们传输文件的方法是创建一个完整的转储,在其中刷新增量日志(使用--master-data = 2 - flush日志,如果你有,请检查你不要弄乱任何从属主机)。然后我们复制转储并播放它。然后我们再次刷新日志(mysqladmin flush-logs),获取最近的增量日志(不应该非常大)并仅播放它。继续这样做,直到最后一个增量日志非常小,这样你就可以停止原始机器上的数据库,复制最后一个增量日志然后播放它 - 它应该只需要几分钟。

如果您只想将数据从一台服务器复制到另一台服务器:

mysqldump -C --host=oldhost --user=xxx --database=yyy -p | mysql -C --host=newhost --user=aaa -p

您需要正确设置数据库用户并提供对外部主机的访问权限。

答案 5 :(得分:1)

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

答案 6 :(得分:0)

我没有使用mysql这样做的经验,但对我来说似乎瓶颈是传输实际数据?

4oo MB不是 。但如果转储 - > SCP很慢,我不认为从删除框连接数据库服务器会更快吗?

我建议转储,压缩,然后通过网络复制或刻录到磁盘并手动传输数据。 压缩这样的转储很可能会给你很好的压缩率,因为很可能是很多重复数据。

答案 7 :(得分:0)

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

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

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

答案 8 :(得分:0)

我喜欢在从旧服务器导出数据库后使用BigDump:Staggered Mysql Dump Importer。

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

有一点需要注意,如果你没有设置新服务器可以处理的负载的导出选项(即创建的查询的最大长度),那么它将失败,你将不得不再次尝试不同的参数。就个人而言,我将我的约定为25,000,但那只是我。稍微测试一下,你就可以了解它。