记一次网站迁移
背景:公司的部分业务是网站建设,现由于公司业务调整,需要将公司部署在电信IDC机房的四千多个网站迁移至百度云。
迁移开始之前,考虑了几个难点:
1、网站数据较大(150G左右),通过公网传输需要耗费很长时间,但其间不能影响网站正常访问;
2、每个站点都配有FTP账号,迁移后要保证原来的账号仍然可用;
3、所有站点都配有二级域名,当初做的是泛域名解析。
第三个难点相对容易解决,只需要调整一下Apache的匹配规则,然后起用全新的泛域名指向即可。
为了保证第二点中提到的FTP可用,第一点中转移数据的时候,不仅要保证数据完整,而且文件、目录的属性也要和老服务器一致。所以,开始转移数据之前,要在新服务器添加所有对应的用户。补充一点,我们用的是SFTP,所以所有账号都是Linux的一个用户,名称和站点目录一致。
所以迁移步骤大致如下:
1、利用Python脚本生成SFTP用户及对应密码,保存到文本文件,每个账号占一行,后面紧跟一个空格加密码;在新服务器中读取该文本文件,并批量添加用户。之所以可以用这种方法,是由于最开始的SFTP账号是根据站点目录名生成的,所以通过脚本比较方便处理。
2、用Rsync同步数据,配置文件中 use chroot = no
来保证所有文件的所属用户和组都正确,另外 -a
参数保证文件读写权限与旧服务器一致。
3、mysqldump方法导出数据库,同样通过rsync同步到新服务器,导入。我们的结构是一个站点一个数据库,所以虽然数据库数量多,但都很小,毕竟都是企业站居多。导入的方法是:python脚本批量解压.gz的数据库文件,然后把需要导入的库写进一个文件source.sql,该文件的内容格式如下:
source xxx.sql;
source xxx2.sql;
...
至此,网站迁移基本完成。