我必须通过 ssh/scp 将带有 43GB MariaDB DB 的 Drupal 站点转移到另一台服务器。
我一大早就有一个有限的停机时间窗口。过去,我通过这样的管道直接传输较小的数据库(<3GB):
ssh -l webuser 10.0.0.99 "cd /var/www/drupal7/htdocs/site_name && drush sql-dump | xz -1 -" | xz -d - | drush sqlc
但是有了这个更大的数据库,我担心这个管道的某些部分会失败,我必须重新启动一切,这几乎肯定意味着我会超过停机时间窗口。
因此,显而易见的解决方案是将其拆分为单个独立的步骤,以便我可以重做部分任务,以防其中一个失败:
ssh -l webuser 10.0.0.99 "cd /var/www/drupal7/htdocs/site_name && drush sql-dump | xz -1 - > /home/webuser/db_dump.sql.xz"
scp [email protected]:/home/webuser/db_dump.sql.xz .
xzcat /home/webuser/db_dump.sql.xz | drush sqlc
但是现在这些步骤是连续的,需要更多时间,这意味着在出现问题时重做步骤的时间更少。
所以我想我正在寻找一种在旧服务器上创建数据库转储的方法,并有第二个独立的进程将数据传输到新服务器并开始在新服务器上恢复数据库。
只需使用
scp [email protected]:/home/webuser/db_dump.sql.xz .
在尚未完成的数据库转储上将不起作用,因为 scp 不会等到 MariaDB 完成写入数据库转储。
有人知道一个命令,它会继续传输或输出数据,直到数据库转储完成?
或者有人知道转移数据库的更好方法吗?
更新:
我想我可以使用这样的tee
命令:
ssh -l webuser 10.0.0.99 "cd /var/www/drupal7/htdocs/site_name && drush sql-dump | xz -1 - | tee -a /home/webuser/db_dump.sql.xz" | xz -d - | drush sqlc
然而,这将改善这种情况,想象一下仍然写入数据库转储并且在网络传输或恢复期间出现问题的情况。然后你必须用转储文件重新启动,但你不能只是通过复制它,scp
因为 MariaDB 仍在写入它,所以问题和以前一样。