数据库非常大(> 400MB),因此转储> SCP>证明来源是小时和小时工作。
有更简单的方法吗?我可以直接连接到数据库并从新服务器导入吗?
答案 0 :(得分:12)
您只需复制整个/ data文件夹即可。
答案 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'
注意:
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服务器:
/data/databasename
中数据库的文件夹复制到新服务器/data/databasename
答案 8 :(得分:0)
我喜欢在从旧服务器导出数据库后使用BigDump:Staggered Mysql Dump Importer。
有一点需要注意,如果你没有设置新服务器可以处理的负载的导出选项(即创建的查询的最大长度),那么它将失败,你将不得不再次尝试不同的参数。就个人而言,我将我的约定为25,000,但那只是我。稍微测试一下,你就可以了解它。