Nginx的主配置文件及虚拟主机配置通常位于/etc/nginx/目录(含nginx.conf主文件、conf.d/子目录下的虚拟主机配置)。备份时需完整复制该目录,建议使用tar压缩以节省空间并保留目录结构:
# 创建备份目录(若不存在)
sudo mkdir -p /backup/nginx_conf
# 复制配置文件(含子目录)
sudo cp -a /etc/nginx /backup/nginx_conf/nginx_$(date +%Y%m%d)
# 压缩备份文件(可选但推荐)
sudo tar -czvf /backup/nginx_conf_$(date +%Y%m%d).tar.gz -C /backup/nginx_conf nginx_$(date +%Y%m%d)
说明:-a参数保留文件权限与属性,date +%Y%m%d生成带日期的备份文件名,便于区分版本。
网站文件默认存放在/var/www/html/目录(若自定义路径需替换为实际目录)。备份时需覆盖所有网站文件(包括静态资源、动态脚本等):
# 备份网站数据(压缩)
sudo tar -czvf /backup/www_data_$(date +%Y%m%d).tar.gz -C /var/www/html .
说明:-C /var/www/html指定源目录,.表示备份该目录下所有内容。
若网站使用MySQL/MariaDB数据库,需使用mysqldump导出数据库(需提前安装mysql-server并配置root密码):
# 导出所有数据库(压缩)
sudo mysqldump -u root -p --all-databases > /backup/mysql_all_$(date +%Y%m%d).sql
sudo gzip /backup/mysql_all_$(date +%Y%m%d).sql
说明:--all-databases导出所有数据库,若仅需备份特定数据库,可将--all-databases替换为-D 数据库名。
通过cron定时任务实现每日自动备份,避免人工遗漏:
# 编辑当前用户的crontab
sudo crontab -e
添加以下内容(每日凌晨2点执行备份脚本):
0 2 * * * /bin/bash /path/to/nginx_backup_script.sh
备份脚本示例(/path/to/nginx_backup_script.sh):
#!/bin/bash
# 定义备份目录
BACKUP_DIR="/backup/nginx_$(date +%Y%m%d)"
# 创建备份目录
sudo mkdir -p $BACKUP_DIR
# 备份Nginx配置
sudo cp -a /etc/nginx $BACKUP_DIR/
# 备份网站数据
sudo tar -czvf $BACKUP_DIR/www_data.tar.gz -C /var/www/html .
# 压缩备份文件
sudo tar -czvf $BACKUP_DIR/nginx_backup.tar.gz -C $BACKUP_DIR nginx
# 删除临时目录
sudo rm -rf $BACKUP_DIR/nginx
说明:脚本需赋予执行权限(sudo chmod +x /path/to/nginx_backup_script.sh)。
恢复前需停止Nginx服务,避免配置冲突:
# 停止Nginx
sudo systemctl stop nginx
# 解压备份文件到/etc/nginx目录
sudo tar -xzvf /backup/nginx_conf_$(date +%Y%m%d).tar.gz -C /etc/nginx --strip-components=1
# 测试配置文件语法(关键步骤,避免重启失败)
sudo nginx -t
# 若语法正确,重启Nginx
sudo systemctl start nginx
说明:--strip-components=1去除备份文件中的顶层目录(如nginx/),直接还原到/etc/nginx。
停止Nginx后,解压备份的网站数据到目标目录:
# 停止Nginx
sudo systemctl stop nginx
# 解压网站数据
sudo tar -xzvf /backup/www_data_$(date +%Y%m%d).tar.gz -C /var/www/html
# 启动Nginx
sudo systemctl start nginx
说明:若网站数据目录有变更(如修改为/var/www/new_html),需替换-C /var/www/html为目标目录。
恢复前需确保数据库服务已启动,且目标数据库存在(若不存在需先创建):
# 导入备份的SQL文件(需解压)
gunzip < /backup/mysql_all_$(date +%Y%m%d).sql.gz | sudo mysql -u root -p
说明:gunzip解压SQL文件,|管道将解压后的内容导入MySQL。
root权限,但需避免将备份文件设置为全局可读(如chmod 600 /backup/*.tar.gz),防止敏感信息泄露。rsync实现增量备份(仅备份变化部分),减少存储占用与备份时间:sudo rsync -avz /var/www/html/ /backup/www_incremental/$(date +%Y%m%d)/
说明:-a保留属性,-v显示详细过程,-z压缩传输。