上一篇文章提到了博客大搬家,这一篇文章记录一下过程中使用过的命令,以便以后查询。下面的命令只涉及数据迁移,我们假设新服务器的 Apache,MySQL,PHP,CertBot 防火墙等等都配置好了。
首先当然是把网站停掉,然后开始备份数据库。由于是换服务器,所以使用 mysqldump 进行一次逻辑备份。–lock-tables 参数会把所有的表加锁,这样的话所有的更新操作都会被阻塞,所以千万不要在生产环境里面使用这个命令,请使用 XtraBackup,或者先搭建主从备份,在只读的从库上用 mysqldump 。
这样就在 temp 目录下得到了一个 db_backup.sql,我们可以顺手把它下载到本地一份:
mysqldump -u root -p --opt --extended-insert=false --lock-tables --databases db1 db2 > /tmp/db_backup.sql
把网站文件打包并用 gzip 压缩(例子中所有的网站文件都在位于 /var/www 的 html 文件夹里面):
tar -C /var/www/ -czvf sites.tar.gz html
把备份文件上载到新的服务器,可以使用 scp 命令,这就会把数据库复制到远程服务器的 /temp 目录,当然过程中会要求确认远程服务器的 key 之类的,等同于一次 SSH 登录:
scp /tmp/db_backup.sql remote_user_name@new_server.com:/tmp/
scp sites.tar.gz remote_user_name@new_server.com:/tmp/
登陆到新的服务器,解压:
tar -zxf /tmp/sites.tar.gz --directory /var/www/
登录到新的 MySQL 服务器,使用导出的备份文件恢复:
SOURCE /tmp/db_backup.sql
最后修改一下 wp-config.php 里面的数据库服务器连接信息就好了。
一切运行正常的话,就可以把备份删掉了。
今天被数据库坑了。MySQL 5.7版,mysqldump,然后丢数据。
最后发现是没有加 `–default-character-set=utf8mb4`
唉……
试一下 xtrabackup 吧,物理备份简单粗暴,Mysqldump这种逻辑备份感觉坑大得很。其实整个 MySQL 感觉坑都很大,有钱的话上 SQL Server 多好(巨他妈贵,公司那个算下来 License 要买上百万),我现在都在考虑要不要迁移到 PostgreSQL,唯一担心的就是相关文档和工具太少了,出了问题搞不定。