Tags: , , 793, Posted in 網際網路 3 条留言

前言

2009年4月,因为朋友GordianZ帮助的关系,购入一个777优惠码的Dreamhost(简称DH)主机,之后的几个博客便都搭建在上面,总的来说,还是稳定可靠的,不过,今年4月到期的续费价格高达$119.40,这对不从博客上获得收入的21来说还是一笔很大的开支,于是我便策划着搬家。

2009年12月,因为朋友老卫的非盈利性主机评论博客提到一家主机商叫Hawkhost(简称HH),俗称老鹰主机,在12月份推出了一个高达50%的优惠码,基础方案$3.29/mo的费用打折后堪称亲民,于是毫不犹豫就购入一个帐户(老卫把这种行为叫“不理智消费”),但是为什么没有一购入就搬家呢?

搬家前其实是基于两点考量:

  1. 稳定性未知。虽然官方声称能达到99.9% Uptime,但是我们都知道这个99.9%可以有很多种算法。
  2. 可靠性未知。我们知道有些小主机商实际上是骗人的,一两个月后就消失,需要观察。

所以,在设置了一个Uptime以后,就暂时闲置了,直到一月初在我的建议之下朋友Tomato也成为WP党的一员,于是应用方面的监测也开始了。就到目前为止的情况来看,长达两个月时间的监测,Uptime非常不错,值得信赖 ── 除了前两个月电信的线路抽风外,所以我决定将DH上的几个博客都迁移过来。

首先说明,因为这是DH到HH的手记,具备一些部分主机可能不具备的特性,所以请酌情参考,有疑问请留言。
Dreamhost和Hawkhost同时具备一个条件:SSH,也就说,很多复杂或者麻烦的操作,我可以通过SSH直接在主机上操作,避免了FTP上传下载需要花费的额外时间开销。这也是这篇手记与一般教程不同的地方。

Dreamhost 的备份

在DH上执行备份,有两种办法,我分别写出,因为过程混杂,实际上两种我都用到了。

    备份方法 一

    Dreamhost提供了一个备份的服务,在DH面板[1]左侧Sidebar的位置,+DreamHost -> Backup Your Account,然后点一下唯一的按钮,DH会提交你的备份请求到队列里面 ── 对,是要排队的,如果前面的人不多,应该马上就好,备份完成后你的DH帐户的注册邮箱会收到一封邮件,大概内容如下:

    [username 3158xxxx] Success! Your account (#526xxx) has been backed up!

    Ta da! Your ENTIRE DreamHost account has been backed up now here:

    http://backups.dreamhost.com/2010-01-05-GQ2SRxxxxxxxxx //备份服务登录的链接。

    username: {backup login user} //登录的用户名,http验证的。
    password: {backup login passwd} //登录的密码。

    Your backup will only be available at this location for FIVE days.. so
    please hurry and download what you need right away!
    //意思是说,备份会保存5天,请尽快处理。

    Here are all the users/mailboxes we’ve backed up (as zipped homedirs):
    NOTE: Any users with more than 4GB of data have been skipped!
    {your dh account list here}
    //你的DH主帐户和子帐户都会备份(即使home目录不同),并且在这里列出一个清单。

    And here are all your mysql databases we’ve backed up (as gzipped dumps):
    NOTE: Any databases with more than 4GB of data have been skipped!
    {your dh mysql database list here}
    //你名下的所有数据库都会备份,并且在这里列出一个清单。

    Enjoy!
    The Happy DreamHost Account Backup Robot!

    这个办法会自动备份你所有的东西,非常方便,但是如果你想要更有挑战性呢?方法二。

    备份方法 二

    先说明,如果你使用备份方法一没有问题,请直接跳入下一章节。

    在这里我们需要登入DH的SSH,使用SSH对自己指定的文件进行打包存放,然后再转移,但是这个办法对独立home目录的子帐户无效。
    我个人推荐win用户使用putty客户端(Linux和Mac用户直接打开终端输入ssh username@host就行),简单明了,登入以后,先输入pwd确认自己的位置,一般都是在用户自己的目录下的,比如我的用户名是delive,效果如下:

    1
    2
    3
    4
    5
    
    [avalanche]$ pwd
    /home/delive  '如果不是 /home?/username 格式的,继续'
    [avalanche]$ cd ~
    [avalanche]$ pwd
    /home/delive

    OK,确认自己已经在自己帐户的目录下了,然后执行以下命令备份文件(不包括数据库):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    打包压缩需要备份的目录
    格式:tar zcf 目的文件名.tar.gz 需要打包压缩的目录(用空格隔开,可以多个)
    范例:
    [avalanche]$ ls
    目录1 目录2 目录3
    [avalanche]$ tar zcf bak.tar.gz ~/目录1/ ~/目录2/ ~/目录3/
    tar: Removing leading `/` from member names
    [avalanche]$ ls
    bak.tar.gz 目录1 目录2 目录3

    到这一步,我们已经把目录1/2/3打包为bak.tar.gz文件了,接下来是数据库

    1
    2
    3
    4
    5
    6
    7
    8
    
    备份数据库
    格式:mysqldump -h数据库主机 -u数据库用户名 -p 数据库名 > 1.sql
    范例:
    [avalanche]$ mysqldump -hmysql.21.com -ublog21 -p 21db > 21.sql
    Enter password: '提示这个的时候请输入数据库访问密码,没有回显的,输完回车就行'
    [avalanche]$ mysqldump -hmysql.21.com -ublog21 -p 22db > 22.sql
    Enter password:
    依此类推

    然后是打包数据库

    1
    2
    3
    4
    5
    6
    7
    8
    
    [avalanche]$ tar zcf mysql.tar.gz 21.sql 22.sql
    [avalanche]$ ls
    ./ ../ 21.sql 22.sql bak.tar.gz mysql.tar.gz 目录1 目录2 目录3
    [avalanche]$ tar zcf dh.tar.gz bak.tar.gz mysql.tar.gz
    [avalanche]$ ls
    ./ ../ 21.sql 22.sql bak.tar.gz dh.tar.gz mysql.tar.gz 目录1 目录2 目录3
    [avalanche]$ pwd
    /home/delive

    至此,这个繁琐又复杂的SSH备份总算搞定了。

实际上,方法二算是比较啰唆复杂的,并且在一些特殊情况下备份不完整(如果是一个人使用的DH倒是不存在这样的问题),但是为了学习嘛,不过大多数情况下用方法一就行。
下一步就是把备份出来的数据弄到新主机上,这次就需要SSH了,虽然通过一些PHP脚本能搞定,但是我建议有SSH干嘛不用呢?本机也可以想办法下载一份留存,这个留到最后的章节讲解。

数据的迁移

因为前一节提到了两种备份办法,所以这一节会对应之前两种方法的迁移方法,基本上来说,不算复杂,但是问题是,备份一的迁移方法要比备份二的迁移方法麻烦一些,为什么呢?请看。

    迁移方法 一(对应备份一)

    先简述,因为之前备份一实际上备份文件是存放在DH的备份服务器上的,并且以网页的形式体现的,而除了http下载之外,我们似乎也没有其它办法获取那些备份文件,如果子帐户多一点或者数据库多一点,那会变得比较麻烦。
    正常情况下,我们可以在网页右键选择“使用迅雷下载全部链接”来搞定这个问题,但是,本手记的目的是不通过本机的迁移,所以,我们将用SSH解决。

    登录HH的SSH,然后我们准备好之前DH备份完成的邮件,开始:

    1
    2
    3
    4
    5
    6
    7
    8
    
    21MBP:~ 21$ ssh user@example.com
    The authenticity of host 'example.com (174.37.xxx.xx)' can't be established.
    RSA key fingerprint is cc:bd:03:fc:f7:59:fe:96:90:82:44:xx:xx:xx:xx:xx.
    Are you sure you want to continue connecting (yes/no)? y
    Please type 'yes' or 'no': yes
    Warning: Permanently added 'example.com,174.37.xxx.xx' (RSA) to the list of known hosts.
    example@example.com's password: 
    example@example.com [~]#

    这是在我苹果本子上登录的提示,一般初次登录,会提示你接受一个密钥用于双方的加密数据传输,这个时候输入yes就行,输入y的话会提示错误,之后输入密码,如果正确无误的话,我们就登录进去了。接下来准备下载那些备份文件:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    example@example.com [~]# pwd  //确定当前位置
    /home/example
    example@example.com [~]# mkdir temp  //创建一个temp目录备用
    example@example.com [~]# cd temp  //切换到temp目录
    example@example.com [~/temp]# ls  //列出目录
    ./ ../
    example@example.com [~/temp]# wget http://backups.dreamhost.com/2010-01-05-GQ2SRxxxxxxxxx -r --http-user={backup login user} --http-password={backup login password} 
    '{此处省略暴多的乱七八糟的提示}'
    Downloaded: 42 files, 397M in 1m 5s (6.11 MB/s)
    example@example.com [~/temp]#

    这里用到的http://backups.dreamhost.com/2010-01-05-GQ2SRxxxxxxxxx、{backup login user}、{backup login password} 均出自DH发给你提示备份成功的邮件。
    恩,我是通过wget抓取网页并且在本地重建的方式把备份服务器上的所有备份文件一次性下载下来的办法。通常在两个美国主机之间传输数据,基本上单位都是以“M(兆)”来计算的,我300多M的数据一分钟多点就全部搞定了。

    1
    2
    3
    4
    5
    6
    7
    8
    
    example@example.com [~/temp]# ls
    ./ ../ backups.dreamhost.com index.html
    example@example.com [~/temp]# cd backups.dreamhost.com
    example@example.com [~/temp/backups.dreamhost.com]# ls
    ./ ../ 2010-01-05-GQ2SRxxxxxxxxx  
    example@example.com [~/temp/backups.dreamhost.com]# cd 2010-01-05-GQ2SRxxxxxxxxx
    example@example.com [~/temp/backups.dreamhost.com/2010-01-05-GQ2SRxxxxxxxxx]# ls
    ./ ../ mysql  users

    经过确认,我们下载下来的主要有两个目录,一个是「mysql」,里面存放你DH帐户的所有mysql数据库,一个是「users」,里面以ftp用户名为目录的方式存放了你的web文件,都是打包好的。到此为止,方法一的文件就全部迁移到新的HH主机上了,如果没有任何问题,请直接进入下一节,我们将讨论如何恢复这些迁移过来的数据。

    迁移方法 二(对应备份二)

    通过备份二那个繁琐的办法,我们搞定了自己的数据库和文件,并且打包为一个文件叫dh.tar.gz放在/home/delive目录下,那么,对应的,这个步骤就要相对简单了。

    登录HH的SSH:

    1
    2
    3
    4
    5
    6
    7
    8
    
    21MBP:~ 21$ ssh user@example.com
    The authenticity of host 'example.com (174.37.xxx.xx)' can't be established.
    RSA key fingerprint is cc:bd:03:fc:f7:59:fe:96:90:82:44:xx:xx:xx:xx:xx.
    Are you sure you want to continue connecting (yes/no)? y
    Please type 'yes' or 'no': yes
    Warning: Permanently added 'example.com,174.37.xxx.xx' (RSA) to the list of known hosts.
    example@example.com's password: 
    example@example.com [~]#

    登录进去以后,我们要新建一个目录用来存放我们的备份文件,这个同 迁移一 是一样的,

    1
    2
    3
    4
    5
    6
    
    example@example.com [~]# pwd  //确定当前位置
    /home/example
    example@example.com [~]# mkdir temp  //创建一个temp目录备用
    example@example.com [~]# cd temp  //切换到temp目录
    example@example.com [~/temp]# ls  //列出目录
    ./ ../

    接下来我们就要把之前的备份文件弄过来了,这次简单了,直接在SSH里面通过ftp就搞定了,这里用到的用户名密码是你DH的用户名密码,不再是之前的备份邮件里面提到的那个,请谨记

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    example@example.com [~/temp]# ftp your_dh_domain.com
    Connected to your_dh_domain.com.
    220 DreamHost FTP Server
    500 AUTH not understood
    500 AUTH not understood
    KERBEROS_V4 rejected as an authentication type
    Name (your_dh_domain.com:hh_user): your_dh_user '输入你的DH用户名'
    331 Password required for delive.
    Password: '输入你的DH密码'
    230 User delive logged in.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> get dh.tar.gz
    local: dh.tar.gz remote: dh.tar.gz
    227 Entering Passive Mode (67,205,61,244,208,60).
    150 Opening BINARY mode data connection for dh.tar.gz (xxxxxx bytes)
    226 Transfer complete.
    xxxxxxx bytes received in xx.xx seconds (xxxx Kbytes/s)
    ftp> by
    221 Goodbye.
    example@example.com [~/temp]# ls
    ./ ../ dh.tar.gz

    恩,文件在SSH里面通过FTP的方式从DH拉到HH了,接下来就是解压什么的,因为之前我们压缩过了,给个范例参考,根据自己的需要修改就成:
    example@example.com [~/temp]# tar zxf 文件名.tar.gz

总的来说,实际上在迁移这步,两种办法都差不多,只不过一个是通过wget下载,一个是用过ftp,而实际上后者这个ftp同样可以通过wget来替代,稍微麻烦的是方法一的文件多了点,而方法二比较干脆,就一个压缩包搞定。下面,我们要搞定的部署我们的新主机HH。

[未完待续,余下部分便是数据恢复,还有目录整理。]

---------------------------------------
  1. http://panel.dreamhost.com 登录,这个简称为DH面板 []

Related Posts

March 8, 2010