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

数据库非常大(大于400MB),所以dump> SCP>源被certificate是工作时间和小时数。

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

您可以简单地复制整个/ data文件夹。

看看高性能的MySQL – 传输大文件

使用可以使用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提示你将会是很多头痛的事情。

您可以设置一个MySQL从属复制,并让MySQL复制数据,然后使从属为新的主节点

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

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

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

如果您正在迁移服务器:

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

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

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

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

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

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

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

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

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

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

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

我喜欢在从旧服务器导出数据库之后使用BigDump:交错的Mysql转储导入器。

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

有一点需要注意,如果您不设置导出选项(即创建的查询的最大长度)与您的新服务器可以处理的加载相关,则只会失败,您将不得不再次尝试不同的参数。 就我个人而言,我设置了大约25,000,但这只是我。 测试一下,你会得到它的挂钩。