数据库过于庞大(> 400MB),因此导出 > SCP > 源的工作需要花费数小时。
有更简单的方法吗?我能直接连接到数据库并从新服务器导入吗?
你可以直接复制整个 /data 文件夹。
您可以使用SSH直接将数据通过互联网传输。首先设置SSH密钥以进行无密码登录。接下来,尝试类似以下的操作:
$ mysqldump -u db_user -p some_database | gzip | ssh someuser@newserver 'gzip -d | mysql -u db_user --password=db_pass some_database'
注意:
db_user
更改为用户用户,将some_database
更改为您的数据库。 someuser
是(Linux)系统用户,而不是MySQL用户。--password
,因为让mysql提示您会带来很多麻烦。400M并不是一个很大的数据库;在100Mbit网络上将其转移到另一台机器只需要几分钟时间。如果您的机器之间没有100M网络,那么您就有大麻烦了!
如果它们运行着完全相同版本的MySQL,并且具有相同(或足够相似的)my.cnf文件,而您只想要整个数据的副本,那么可以安全地复制服务器的整个数据目录(当然,在停止两个实例时)。您需要首先删除目标机器的数据目录,但您可能并不关心这一点。
备份/恢复通常会因为恢复需要重建表结构而变慢,而不是文件复制。通过直接复制数据文件,您可以避免这种情况(受上述限制的约束)。
mysqldump -C --host=oldhost --user=xxx --database=yyy -p | mysql -C --host=newhost --user=aaa -p
您需要正确设置数据库用户并授权给外部主机访问。
尝试使用mysql控制台在新服务器上导入转储,而不是辅助软件
我喜欢使用BigDump:分阶段Mysql Dump导入器,在从旧服务器导出数据库后进行导入。
需要注意的一点是,如果您不根据新服务器的负载设置导出选项(即创建查询的最大长度),它将会失败,您将不得不使用不同的参数再次尝试。个人建议将其设置为约25,000,但这只是我的经验。多试几次,您就会掌握要领。我对使用mysql进行此操作没有经验,但在我看来,瓶颈似乎是传输实际数据?
400MB并不算太多。但如果dump -> SCP很慢,我认为从远程框连接到db服务器也不会更快?
我建议先进行转储、压缩,然后通过网络复制或刻录到光盘并手动传输数据。压缩这样的转储很可能会给您带来相当好的压缩率,因为很可能有很多重复数据。
如果您只是复制服务器的所有数据库,请复制整个/data
目录。
如果您只想复制一个或多个数据库并将它们添加到现有的mysql服务器:
/data/databasename
中的数据库文件夹复制到新服务器的/data/databasename
中。