最简单最快捷的方法:Snapshot
备份网站根目录wwwroot
    tar命令扩展
        tar
        tar.gz
        tar.bz2
MySQL备份
    使用mysqldump命令
        备份全部数据库
        备份单数据库
        备份指定的多个数据库数据
    使用phpadmin页面导出数据库
Nginx配置文件
CMS网站(Typecho)后台自带备份功能后台自带备份功能")
主题配置备份
服务器互传文件的小方法
SSL证书pem与密钥key文件备份

备份是很重要的一个步骤,如果因为各种意想不到的原因和操作上的是失误导致数据丢失,后果实在难以承受,我想尽量做到万无一失,能备份的数据覆盖越广越好,但是只通过搜索零散的学习到了一些皮毛,至于数据库中的更多细节,不同引擎的热温冷备份,增量和差异备份,还有脚本自动化备份,计划任务备份,备份到网盘等等还没研究,所以本文暂时只记录一下非常基础的备份过程.值得注意的是每一个环节都有很多不同的更强大的方法,有待实践和研究.

2019.01.13搬家后的简单补充:搬家的大概步骤就是:备份wwwroot,typecho数据库,nginx配置文件,域名ssl的pem和key文件,主题配置文件(除非出现问题否则用不上但是以防万一),新服务器搭建lnmp环境配置最好和旧服务器一至,将备份的文件都发送至新服务器,网站文件夹放在新服务器的wwwroot下,然后lnmp vhost add,网站位置填写已经在wwwroot下的文件夹,ssl位置填写传输过来的证书密钥位置,其他配置和旧服务器一至,然后用旧数据库导入新数据库,nginx配置文件添加301重定向,域名解析到新服务器ip,至此就完成搬家了.

最简单最快捷的方法:Snapshot

这确实是最方便最快的方法,因为vps都是虚拟机,可以实现用snapshot(快照)定格机器的某一瞬间用于恢复,或者可以说是建立了镜像需要的是很有ghost恢复,我是用的是vultr的vps可以免费为主机创建多个snapshot,但是创建的时候是热创建的,不知道是什么黑科技,我感觉应该是关机再冷创建.操作页面如下,很简单无需赘述.
snapshots

备份网站根目录wwwroot

这里使用tar命令直接对/home/wwwroot目录进行打包
新建个/backup文件夹用来保存各个备份文件

mkdir backup
cd backup

打包压缩wwwroot目录,为生成文件命名

tar -zcvf 20180701wwwroot.tar.gz /home/wwwroot

然后可以用ftp从服务器下载这个包在本地保存
还原时,替换网站域名目录即可,可以ftp直接操作
搬家后解压的文件可能存在权限的问题,建议赋予网站根目录文件的可写权限

chmod -R 755 /domain.com
chown -R www /domain.com

tar命令扩展

关于tar命令在此简单扩展一下

tar

tar是在Linux中使用得非常广泛的文档打包格式。它的好处就是它只消耗非常少的CPU以及时间去打包文件,但它仅仅只是一个打包工具,并不负责压缩。下面是如何打包一个目录:

# tar -cvf archive_name.tar directory_to_compress

下面是如何解包的命令:

# tar -xvf archive_name.tar.gz

上面这个解包命令将会将文档解开在当前目录下面。当然,你也可以用这个命令来更改解包的路径:

# tar -xvf archive_name.tar -C /tmp/extract_here/

tar.gz

这种格式是我使用得最多的压缩格式。它在压缩时不会占用太多CPU的,而且可以得到一个非常理想的压缩率。可以使用下面的命令去压缩一个目录:

# tar -zcvf archive_name.tar.gz directory_to_compress

解压缩:

# tar -zxvf archive_name.tar.gz

上面这个解包命令将会将文档解压在当前目录下面。当然,你也可以用这个命令来更改解包的路径:

# tar -zxvf archive_name.tar.gz -C /tmp/extract_here/

tar.bz2

这种压缩格式是我们提到的所有方式中压缩率最好的。当然,这也就意味着,它比前面的方式要占用更多的CPU与时间。下面的命令就是如何使用tar.bz2进行压缩。

# tar -jcvf archive_name.tar.bz2 directory_to_compress

上面这个解包命令将会将文档解开在当前目录下面。当然,你也可以用这个命令来更改解包的路径:

# tar -jxvf archive_name.tar.bz2 -C /tmp/extract_here/

下面对tar命令中一些常用重要的参数进行总结:
-c或–create 建立新的备份文件。
-C<目的目录>或–directory=<目的目录> 切换到指定的目录。
-f<备份文件>或–file=<备份文件> 指定备份文件。
-j或–bzip2 以bz2的算法来压缩或者解压文件。
-k或–keep-old-files 解开备份文件时,不覆盖已有的文件。
-m或–modification-time 还原文件时,不变更文件的更改时间。
-N<日期格式>或–newer=<日期时间> 只将较指定日期更新的文件保存到备份文件里。
-r或–append 新增文件到已存在的备份文件的结尾部分。
-t或–list 列出备份文件的内容。
-u或–update 仅置换较备份文件内的文件更新的文件。
-v或–verbose 显示指令执行过程。
-w或–interactive 遭遇问题时先询问用户。
-W或–verify 写入备份文件后,确认文件正确无误。
-x或–extract或–get 从备份文件中还原文件。
-z或–gzip或–ungzip 通过gzip指令处理备份文件。
-Z或–compress或–uncompress 通过compress指令处理备份文件。

MySQL备份

数据库的备份是最重要也是操作相对复杂一些的,这里两个方法第一个是常规方法,第二个没实践过.如本站搬家时只需要备份Typecho的数据库即可.

使用mysqldump命令

注意:1和3方法也就是全库和多库备份会将数据库的创建语句一起进行了备份。因此,还原时,无须先创建数据库再进行还原,方法2单库备份需要在新主机新建好一个数据库才能导入.

备份全部数据库

mysqldump -u用户名 -p密码 --all-databases > /保存路径/文件名.sql

如果mysqldump命令未识别生效则需要加上mysql的安装路径如

/usr/local/mysql/bin/mysqldump -u用户名 -p密码 --all-databases > /保存路径/文件名.sql

如果导出数据库时报错-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.
error
是因为mysqldump默认是不备份事件表的,只有加了--events 才会解决,先判断是否开启了events scheduler:

mysql -uroot -p
SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
SHOW PROCESSLIST;

如果看到event_scheduler为on或者PROCESSLIST中显示有event_scheduler的信息说明就已经开启了事件。如果显示为off或者在PROCESSLIST中查看不到event_scheduler的信息,那么就说明事件没有开启.
没有开启,加上--events --ignore-table=mysql.events参数,或保留表--events即可:

mysqldump -uroot -pxxxxx --events --ignore-table=mysql.events --all-databases > all.sql
#或
mysqldump -uroot -pxxxxx --events --all-databases > all.sql

还原:先进入mysql命令行,然后指定需要还原的.sql文件位置

mysql -uroot -p
source /backup/xxx.sql

q
因为我没有开启并不知道如果开启了该怎么办,猜测是加--events参数然后指定文件路径.
导出后将.sql文件下载到本地即可.

备份单数据库

lnmp database list

输入 root 数据库密码即可查看当前数据库列表

mysqldump -uroot -p database > filename.sql

输入数据库密码,即可完成数据库备份
还原时,在新服务器上新建一个数据库,然后导入:

mysql -uroot -p wordpress < wordresxx…...sql

备份指定的多个数据库数据

可以先用

lnmp database list

#进入mysql命令
mysql -uroot -pxxxpwd
show databases

查看已有数据库.
导出数据库:

/usr/local/mysql/bin/mysqldump -u用户名 -p密码 --databases 数据库1 数据库2... > 保存路径/文件名.sql

还原:先进入mysql命令行,然后指定需要还原的.sql文件位置

mysql -uroot -p
source /backup/xxx.sql

使用phpadmin页面导出数据库

如果使用的是lnmp搭建,直接访问服务器ip就可以看到lnmp介绍页,点击phpadmin即可进入,默认用户名root输入密码进入如下
phpadmin
选择需要的数据库然后右侧全选再点导出,到如下
daochu
点执行即可下载备份文件.这个方法不知道和mysqldump是否等效,暂未实践.
还原则可以同样用导入共能进行导入还原.

Nginx配置文件

因为Nginx配置文件较多,主要是nginx.conf但是考虑到周全性,我选择全部备份.同样是tar打包的方式:

cd backup
tar -zcvf 20180701nginx.tar.gz /usr/local/nginx

这样就备份了整个Nginx涉及的文件
多半需要nginx.conf文件的配置,可能需要修改内容,还有ssl出问题也需要重新设置.
本站搬家时,直接将旧配置文件替换了新服务器新建vhost后生成的新配置文件,出现了无法将主域名重定向到带有www的域名的情况,后又还原新配置文件,将旧配置文件的重定向语句复制到新配置文件即可

CMS网站(Typecho)后台自带备份功能

类似Wordpress这样的cms平台后台都带有备份功能,wp甚至有强大的第三方备份插件可以使用,typecho中也有对内容的备份,但是这种备份显得微不足道,不适合服务器迁移等大动作,恢复起来应该会很麻烦,但是备份一下也无妨.

主题配置备份

2019.01.13更新:该主题目前已经支持前端备份了,在主题设置中可以看到
保存(下载)配置页,恢复时,将备份的数据手动的复制到更新后的主题外观设置中.

服务器互传文件的小方法

假设新VPS的IP为 8.8.8.8,SSH端口为 22,则打开备份目录,选择需要的文件备份和数据库备份上传:

cd /home/backup
ls
scp -P 22 youngzijian.cn-180425.tar.gz [email protected]:/home/backup
scp -P 22 wordpress-180425.sql [email protected]:/home/backup
回车后,按要求输入新的VPS登陆密码。

SSL证书pem与密钥key文件备份

这一步没什么需要操作的, 把之前的.pem和.key文件传输至新服务器即可,在添加vhost的时候直接填写绝对目录.

Last modification:January 17, 2020