美文网首页
VPS灾难恢复

VPS灾难恢复

作者: 破旧的大卡车 | 来源:发表于2018-10-25 12:54 被阅读55次

啥都没干, 搬瓦工上的VPS在输入reboot时不能执行, 使用控制台强制重启后发现不能进入系统了.

然后只有先备份数据(幸亏Bandwagon有镜像快照). 然后尝试和客服联系, 最扯的是搬瓦工竟然不能正常发送ticket.

只有最后一个办法了, 完全重装系统, 并从snapshot里面恢复文件.

  1. 下载snapshot文件, 并验证SHA1/MD5. 我使用的是EagleGet, 速度大约2~5M/s.
  2. 由于下载下来的是完整的tar.gz文件, 直接在windows7下用7z打开不能正常解压. 需要在linux系统下操作:
    • 安装虚拟机VisualBox
    • 安装archlinux, 参考我写的笔记(不必要装图形界面): .
    • 设置虚拟机共享文件, 例如F:\snapshot文件夹, 成功启动后, 我们可以通过/media/sf_snapshot/自由访问该文件夹下的文件.
    • 解压需要的文件(常见的/home/username, /var/www/, /var/lib/mysql/, /etc/nginx/sites-avaliable):
      • 首先可以通过
        tar --execlude='./var/www/*/*' -tzf snapshot_filename.tar.gz ./var/www
        
        来定位文件位置, 上述命令相当于列出/var/www下的目录, 排除子目录;
      • 然后可以通过如下命令解压需要的数据:
        tar xzf snapshot_filename.tar.gz ./var/www/homepage
        
        这样避免了完全解压, 速度会快很多. 如果完全解压到化需要注意虚拟磁盘的大小, 如果太小的话, 解压到一半还会报错: 磁盘空间不足. 如何扩容, 请参考VirtualBox磁盘扩容.
      • 压缩并准备上传到新装系统后的VPS:
        tar vczf /media/sf_snapshot/homepage.tar.gz ./var/www/homepage
        

至此, 我们已经准备好需要恢复到数据.

  1. 重装VPS, 我使用的是以前正常的备份(要是我每次都有备份就不用这么麻烦了), 板瓦工可以非常方便地一键恢复系统. 没有以前的备份可以完全重装系统, 也不难的.
  2. 上传数据到新的VPS, 我使用的是ssh_key连接, 写个脚本(upload.sh)自动上传:
    scp -v -P yoursshport -i yourvps.ppk  $1 usrname@www.yourhost.com.cn:~/
    ssh -p yoursshport -i yourvps.ppk vanabel@www.yourhost.com.cn
    
    否则, 请自行修改相应命令. 上述upload.sh /media/sf_snapshot/homepage.tar.gz 会将压缩数据上传到用户home目录.
  3. 恢复数据: 一般网站数据只需解压文件(网站根目录以及nginx配置)到相应目录并重启nginx服务器即可; 需要注意的是, 对wordpress需要设置好权限以及恢复mysql数据库. 这在下面会讲到.
  4. 修复wordpress权限, 参考这里的so:
    chown www-data:www-data  -R * # Let Apache be owner
    find . -type d -exec chmod 755 {} \;  # Change directory permissions rwxr-xr-x
    find . -type f -exec chmod 644 {} \;  # Change file permissions rw-r--r--
    
    如上设置后应该可以正常运行了(至少不是根目录权限问题); 然后再将权限设置得安全些:
    chown <username>:<username>  -R * # Let your useraccount be owner
    chown www-data:www-data wp-content # Let apache be owner of wp-content
    
  5. 修复nginx配置, 基本可以copy文件到/etc/nginx/sites-avaliable/, 并软连接到sudo ln -s /etc/nginx/sites-avaliable/home /etc/nginx/sites-enabled/, 重启nginx服务即可. sudo service nginx reload. 这里给出一个nginx配置实例:
    server{
         listen 80;
     #listen 443 ssl;
     server_name your.host.com.cn;
     #ssl_certificate /etc/letsencrypt/live/blog.vanabel.cn/fullchain.pem;
     #ssl_certificate_key /etc/letsencrypt/live/blog.vanabel.cn/privkey.pem;
     #include letsencrypt;
     client_max_body_size 10m;
    
     root /var/www/blog/wordpress;
     index index.php index.html index.htm;
    
     location / {
         try_files $uri $uri/ /index.php?$args;
     }
     location ~ \.php$ {
         fastcgi_pass unix:/var/run/php5-fpm.sock;
         include snippets/fastcgi-php.conf;
         fastcgi_param HTTPS on;
     }
     location ~ /wp-content/database/{
         deny all;
         return 404;
     }
    }
    #server{
    #    listen 80;
    #    server_name your.host.com.cn;
    #    return 301 https://$host$request_uri;
    #}
    

最后在配置letsencrypt使得网站是安全连接. 到时候只需取消注释即可.

  1. 恢复mysql数据. 由于我没有备份mysql, 只有mysql的文件. 网上有一种通过文件恢复mysql的办法, 好像对wordpress可用但是对laravel创建的网站好像不行. 参考这个so. 我后来发现比较靠谱的是通过myphpadmin来恢复:
    • 首先准备好需要恢复的数据库的mysql文件, 例如wordpress的话, 我是/var/lib/mysql/wordpress;
    • 在windows7机器上装好webusbserver, 即一个可移动的apache+php5+myphpadmin+mysql. 很容易上手, 将前面准备的wordpress这个mysql数据文件夹复制到webusbserver的mysql/data目录下, 例如我是G:\usbweb\mysql\data. 这里最好选择同样的mysql版本, 否则可能存在兼容性问题.
    • 打开webusbserver的myphpadmin, 发现我们的数据库回来了. 此时你可以用myphpadmin的export功能导出这个数据库, 压缩, 上传到vps, 同样利用myphpadmin导入到vps上的mysql数据库. 至此完成数据库修复.
  2. laravel框架下, 我的恢复主要是这样的:
    • 首先, 数据都是放在laravel/storage下面, 这个比较好恢复的. 其次是有些修改的文件, 我们大致需要对比这些文件:
      sudo tar vczf ~/laravel.vps.tar.gz laravel/ --exclude storage --exclude node_modules --exclude public --exclude vendor
      
      恢复这些文件后, 试着执行php artisan, 提示找不到[Symfony\Component\Debug\Exception\FatalErrorException] Class 'Overtrue\LaravelPinyin\ServiceProvider' not found, 使用那个composer重新安装下:
      cd /var/www/laravel
      composer.phar install
      php artisan cache:clear
      php artisan config:clear
      php artisan route:clear
      
      最后三个命令表示清除缓存, 如果此时访问网站还是没问题, 那说明问题不大了. 其实, artisan自动执行了如下命令, 故最后三个命令多余: php artisan clear-compiled, php artisan optimize
    • 由于我还用了gulp来管理资源(css/js/png)等, 我们还需要将node_modules文件夹还原, 然后利用gulp来自动将assets下的资源生成(less->css)/复制(png)到public目录下. 至此, laravel基本恢复完成.

相关文章

  • VPS灾难恢复

    啥都没干, 搬瓦工上的VPS在输入reboot时不能执行, 使用控制台强制重启后发现不能进入系统了. 然后只有先备...

  • 十八:灾难恢复计划

    18.1 灾难的本质 灾难恢复计划围绕组织正常运营被终端,为混乱的时间带来正常的工作秩序 灾难恢复计划应该被配置为...

  • 核心银行系统 之十八 灾备

    灾备 灾备主要术语 1.灾难备份(Backup for Disaster Recovery):为了灾难恢复而对数据...

  • 数据库备份与恢复

    01背景 备份恢复的几个重要理由: 1、灾难恢复 2、审计 3、测试 4、误操作恢复 02概述 2.1 frm 与...

  • 数据备份与灾难恢复

    随着计算机存储信息量的不断增长,数据备份和灾难恢复就成为炙手可热的话题。灾难备份是信息系统安全的关键基础设施。重要...

  • 灾难恢复-boot分区的恢复方法

    boot分区是系统启动中最重要的部分,如果服务器由于病毒攻击又或者被管理员误删除了boot分区。那么就会存在潜在的...

  • PD Recover 快速指南

    PD Recover 快速指南 前言 PD Recover 是对 PD 进行灾难性恢复的工具,用于恢复无法正常启动...

  • MultiSubnetFailover=true

    MultiSubnetFailover=true SqlClient 对高可用性的支持,灾难恢复https://d...

  • Redis持久化的方式有哪些?优缺点分别是什么?

       持久化的目的主要是做灾难恢复,数据恢复。由于Redis的数据全都放在内存里面,如果Redis挂了,没有配置...

  • MySQL备份和恢复基础

    一,为什么要备份 灾难恢复:硬盘故障,软件故障,自然灾难,黑客攻击,误操作等 eg:reid10只是硬件冗余,如果...

网友评论

      本文标题:VPS灾难恢复

      本文链接:https://www.haomeiwen.com/subject/pvixtqtx.html