啥都没干, 搬瓦工上的VPS在输入reboot时不能执行, 使用控制台强制重启后发现不能进入系统了.
然后只有先备份数据(幸亏Bandwagon有镜像快照). 然后尝试和客服联系, 最扯的是搬瓦工竟然不能正常发送ticket.
只有最后一个办法了, 完全重装系统, 并从snapshot里面恢复文件.
- 下载snapshot文件, 并验证SHA1/MD5. 我使用的是EagleGet, 速度大约2~5M/s.
- 由于下载下来的是完整的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
下的目录, 排除子目录; - 然后可以通过如下命令解压需要的数据:
这样避免了完全解压, 速度会快很多. 如果完全解压到化需要注意虚拟磁盘的大小, 如果太小的话, 解压到一半还会报错: 磁盘空间不足. 如何扩容, 请参考VirtualBox磁盘扩容.tar xzf snapshot_filename.tar.gz ./var/www/homepage
- 压缩并准备上传到新装系统后的VPS:
tar vczf /media/sf_snapshot/homepage.tar.gz ./var/www/homepage
- 首先可以通过
至此, 我们已经准备好需要恢复到数据.
- 重装VPS, 我使用的是以前正常的备份(要是我每次都有备份就不用这么麻烦了), 板瓦工可以非常方便地一键恢复系统. 没有以前的备份可以完全重装系统, 也不难的.
- 上传数据到新的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目录. - 恢复数据: 一般网站数据只需解压文件(网站根目录以及nginx配置)到相应目录并重启nginx服务器即可; 需要注意的是, 对wordpress需要设置好权限以及恢复mysql数据库. 这在下面会讲到.
- 修复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
- 修复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使得网站是安全连接. 到时候只需取消注释即可.
- 恢复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数据库. 至此完成数据库修复.
- 首先准备好需要恢复的数据库的mysql文件, 例如wordpress的话, 我是
- 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基本恢复完成.
- 首先, 数据都是放在
网友评论