我有一个大的Mysql数据库(超过10GB)。 我正在从一个托pipe提供商转移到另一个托pipe提供商(都在CentOS中)。
我的想法是这样做的:
旧服务器:
tar -cvf backup.tar backup.sql
新服务器:
wget oldserver.com/backup.tar tar -xvf backup.tar
我的问题是,我怎样才能生成backup.sql文件,以便它可以轻松地通过SSH在新的服务器上恢复?
使用mysqldump 。
mysqldump客户端是最初由Igor Romanenko编写的备份程序。 它可以用来转储一个数据库或一个数据库的集合,以备份或传输到另一个SQL服务器(不一定是MySQL服务器)。 转储通常包含SQL语句来创build表,填充它或两者。 但是,mysqldump也可以用于生成CSV,其他分隔文本或XML格式的文件。
如果你所有的表都是MyISAM,你可以复制整个目录(通过rsync或其他文件传输工具),而不需要转储和tar任何东西。 你可以使用rsync的压缩algorithm:
rsync -avz mysql_dir user@remotehost:~/
如果停机时间很短是一个问题,并且您有一个非常活跃的数据库,则可能需要考虑设置新的服务器以便从旧服务器上删除。 按照MySQL复制文档 ,将新服务器设置为从服务器。 然后,当您准备好进行更改时,您只需开始让您的应用程序访问新服务器而不是旧的服务器,可能需要先closuresIP地址,然后将应用程序重新configuration到新服务器地址等…
但是,对于大多数网站来说,这通常是矫枉过正的。 通常你可以花几分钟的停机时间来做这个动作,使用如下的机制…
从源文件服务器(在目的地)运行MySQL的时候开始,只需要启动一下这个拷贝:
rsync -avzP --delete /var/lib/mysql/ root@destination:/var/lib/mysql.source/
我运行它到“mysql.source”的目的地,以便我可以确定,如果我犯了一个错误,我不是说,用新服务器的数据覆盖活动服务器。 根据networking的速度,这可能需要很长时间(例如,如果您是通过1mbps链接从一个提供者移动到另一个提供者)。
一旦完成,再次运行以传输更改的文件。 这应该快得多。
重新运行几次后,可能会下降到非常小,也许几秒钟。
在这一点上,你已经准备好了最终的rsync。 要做到这一点:
ON OLD SERVER: /etc/init.d/mysql stop rsync -avzP --delete /var/lib/mysql/ root@destination:/var/lib/mysql.source/ ON NEW SERVER: cd /var/lib mv mysql mysql.orig mv mysql.source mysql /etc/init.d/mysql start
当然,假设你已经复制了你的my.cnf,并且在系统大于或小于旧系统(改变caching大小等)的情况下做了适当的调整。
如果停机时间很短是一个问题,并且您有一个非常活跃的数据库,则可能需要考虑设置新的服务器以便从旧服务器上删除。 按照MySQL复制文档 ,将新服务器设置为从服务器。 然后,当您准备好进行更改时,您只需开始让您的应用程序访问新服务器而不是旧的服务器,可能需要先closuresIP地址,然后将应用程序重新configuration到新服务器地址等…