VestaCP面板迁移用户时更换目标MySQL数据库方法

10/19/2017

VestaCP的傻瓜式迁移方法对于简单示例来说非常方便,在旧新示例上分别执行v-backup-userv-restore-user命令即可完成,这一过程假定了两台服务器上所有的配置均为默认安装,因此在对VestaCP配置作出过调整的情况下会迁移则会出现错误。

Kaijia昨天一直运行VestaCP的服务器到期,考虑网络因素决定将VestaCP迁移到阿里云中。考虑到扩展需求(吃内存的MySQL 5.7),Kaijia决定利用两台1G内存的云服务器,第一台运行除了MySQL以外的其他服务,第二台(设定域名为mysql.kaijia.me)单独运行MySQL,并将其添加为VestaCP的远程MySQL服务器。这样的配置与虚拟主机商采用的策略相同,但因此调整,在将VestaCP用户迁移到新服务器时便会出现问题:

[email protected]:~# v-restore-user kaijia kaijia.2017-10-18.tar

— DB —
2017-10-18 21:31:14 kaijia_example
Error: mysql config parsing failed

此问题的原因是,在旧实例上,备份包中MySQL的HOST名称为localhost,但在新实例上,MySQL服务器运行在另外设备中并非localhost。在导入用户时,VestaCP仍然按照备份包中设定的HOST参数连接并不存在的localhost服务器,因此发生了错误。

因此解决此问题的方法便是在导入数据库前修改HOST参数使VestaCP将数据库导入进新的服务器。由于此问题应该不频繁发生,因此官方并没有意识到,现行的导入脚本尚不具备此功能,网上也没有相关资料。Kaijia阅读了负责恢复数据的脚本/usr/local/vesta/bin/v-restore-user并增加了一行代码即可实现导入到指定新数据库。在618行 if [ -z "$check_config" ]; then 与下一行 eval $(cat $tmpdir/db/$database/vesta/db.conf) 间插入一行:

其中mysql.kaijia.me为新MySQL数据库所在服务器的IP或域名。添加后便可无需修改原备份文件使用v-backup-user顺利导入用户。