我有非常大的MySQL数据库(160GB)的服务器。
如何简单的方法将此数据库移动到另一台服务器?
当你说“移动到另一台服务器”,我们假设你想移动到另一台运行MySQL的服务器,而不是移动到不同的SQL服务器(即postrgres或MSSQL)。
大致有两种select。 按照原样将/var/lib/mysql目录转移到新服务器,或者执行导出和导入过程。
复制整个mysql目录意味着更less的数据被传输,并且将数据库从一台机器复制到另一台机器。 但是,MySQL版本必须是相同的(我相信在理论上小版本可以改变,但我不会指望这一点)。 您可以停止MySQL,tar目录并使用scp将其复制到另一台机器。 然后解压其他机器上的目录并启动MySQL。 如果您想定期执行此复制,则可能需要考虑执行lib dir的直接rsync ,以便后续运行的rsync命令仅复制差异。
执行导出/导入过程将创build一个海量的文本文件,并将所有数据保存为SQL插入语句(并在创build数据库时使用表创build语句)。 这应该是可导入到不同的MySQL数据库版本,但是,再次,如果数据库的版本大不相同,那么事情可能会出错。 通常最好保持MySQL版本相同。 这样做的主要问题是数据库中已经有160GB的数据,转储将会非常大,因为SQL语句中会有额外的数据。 你可以使用上面列出的一些pipe道命令将数据发送到远程机器,或者你可以将文件转储出去(通过gzippipe道压缩)并跨越(假设你有足够的磁盘空间)。
mysqldump -u<user> -p<password> <database name> | gzip > db_dump.sql.gz
另一种可以使用的技术是通过gzippipe理mysqldump命令,然后通过netcat(通过networking发送)到服务器机器上运行的另一个netcat进程,该进程将其pipe理成gzip并最终进入mysql。 这有利于在数据传输过程中压缩数据,并且不会创build临时文件。
在目标机器上:
nc -l 55555 | gzip -d -c | mysql <database name> -u<user> -p<password>
在源机器上
mysqldump -u<user> -p<password> <database name> | gzip | nc <ip of target server> 55555
希望这有助于解释一些问题。 如果您认为我在这里犯了一个错误,请发表评论。 仔细检查手册页的命令,因为我没有一个MySQL数据库方便的testing。
有了这样一个大的数据库,我build议复制MySQL的datadir,而不是做一个转储:
你可以在MySQLconfiguration文件(my.cnf)中find你的MySQL数据目录的path。
请注意,您应该在两台服务器上使用相同版本的MySQL ! 如果没有,你应该使用MySQL转储导出和导入你的数据。
MySQL数据库存储在一个非常简单的方法:
dir = dir中的数据库名称文件是表和索引等
所以find你的数据库所在的位置 – 可能是这样的:
在/ var / lib中/ MySQL的
在这里,你将有所有的数据库目录,在这些目录的表中。
现在你已经发现他们停止MySQL,只是tar目录结构。
tar -zcf mysqldatabases.tar.gz *
现在你已经把所有的MySQL资料放在一个压缩文件中了。 将其复制到新服务器的数据目录并解压缩。
您可以pipe道sqldump的输出
mysqldump -uuser -ppassword myDatabase | mysql -hremoteserver -uremoteuser -premoteserver
这只有在您有远程访问数据库的情况下才有可能。
使用此语法可以完成networking上的转储和恢复。
mysqldump db-name | mysql -h remote-server db-name
切记在这个操作过程中防止对数据库进行新的写操作。