/etc/nginx/
(含nginx.conf
及站点配置);网站文件:/var/www/
(或自定义站点目录)。/var/lib/mysql/
;配置文件:/etc/mysql/mariadb.conf.d/50-server.cnf
(或/etc/mysql/my.cnf
)。/etc/php/<版本>/fpm/
(如/etc/php/8.2/fpm/
,含php.ini
和pool.d/www.conf
);PHP代码:通常与网站文件同目录(/var/www/
)。tar
、gzip
等基础工具;若未安装mysqldump
(MySQL备份工具),可通过sudo apt-get install mysql-client
安装。逻辑备份(推荐):使用mysqldump
导出数据库结构和数据,生成可恢复的SQL文件。
# 备份单个数据库(替换username、mydatabase为实际值) mysqldump -u username -p mydatabase > /backups/mydatabase_$(date +%Y%m%d).sql # 备份所有数据库 mysqldump -u username -p --all-databases > /backups/all_databases_$(date +%Y%m%d).sql # 压缩备份文件(节省空间) gzip /backups/mydatabase_$(date +%Y%m%d).sql
物理备份(可选):使用Percona XtraBackup
(需额外安装)备份整个数据库目录,适合大规模数据或快速恢复场景。
打包关键目录:使用tar
命令将Nginx配置、网站文件、PHP配置打包为压缩文件。
# 备份Nginx配置 sudo tar -czvf /backups/nginx_conf_$(date +%Y%m%d).tar.gz /etc/nginx/ # 备份网站文件 sudo tar -czvf /backups/www_data_$(date +%Y%m%d).tar.gz /var/www/ # 备份PHP配置 sudo tar -czvf /backups/php_conf_$(date +%Y%m%d).tar.gz /etc/php/
增量备份(可选):使用rsync
仅同步自上次备份后的变化,减少备份时间和存储占用。
# 首次备份(全量) sudo rsync -avz /var/www/ /backups/www_full_backup/ # 后续备份(增量,仅同步变化的文件) sudo rsync -avz /var/www/ /backups/www_incremental_backup/
自动化备份:通过crontab
设置定时任务,例如每天凌晨2点执行备份脚本。
# 编辑当前用户的crontab crontab -e # 添加以下内容(每天凌晨2点执行备份脚本) 0 2 * * * /path/to/lnmp_backup_script.sh
脚本示例(lnmp_backup_script.sh
):整合上述备份命令,并将文件传输到远程服务器或云存储。
sudo systemctl stop nginx mysql php8.2-fpm # 根据实际PHP版本调整
逻辑备份恢复:使用mysql
命令导入SQL文件。
# 恢复单个数据库(替换username、mydatabase为实际值) mysql -u username -p mydatabase < /backups/mydatabase_backup.sql # 恢复所有数据库 mysql -u username -p < /backups/all_databases_backup.sql
物理备份恢复:停止MySQL服务,替换数据目录,再启动服务(需确保备份目录权限正确)。
sudo systemctl stop mysql sudo rsync -avz /path/to/physical_backup/ /var/lib/mysql/ sudo chown -R mysql:mysql /var/lib/mysql/ sudo systemctl start mysql
时间点恢复(可选):若有二进制日志(binlog),可恢复到特定时间点。
# 导出binlog文件(需提前开启binlog) mysqlbinlog /var/lib/mysql/mysql-bin.000001 | mysql -u username -p mydatabase # 恢复到指定时间范围(例如2025-09-26 10:00:00至12:00:00) mysqlbinlog --start-datetime="2025-09-26 10:00:00" --stop-datetime="2025-09-26 12:00:00" /var/lib/mysql/mysql-bin.000001 | mysql -u username -p mydatabase
解压备份文件:将备份的压缩文件解压到原目录。
# 恢复Nginx配置 sudo tar -xzvf /backups/nginx_conf_$(date +%Y%m%d).tar.gz -C / # 恢复网站文件 sudo tar -xzvf /backups/www_data_$(date +%Y%m%d).tar.gz -C / # 恢复PHP配置 sudo tar -xzvf /backups/php_conf_$(date +%Y%m%d).tar.gz -C /
增量备份恢复:使用rsync
将增量备份同步到目标目录。
sudo rsync -avz /backups/www_incremental_backup/ /var/www/
恢复完成后,启动Nginx、MySQL、PHP-FPM服务,并检查状态。
sudo systemctl start nginx mysql php8.2-fpm # 根据实际PHP版本调整 sudo systemctl status nginx mysql php8.2-fpm # 验证服务是否运行正常
http://服务器IP
,查看网站是否正常加载。mysql -u username -p USE mydatabase; SHOW TABLES;
info.php
文件(/var/www/html/info.php
),内容为<?php phpinfo(); ?>
,访问该文件确认PHP是否正常工作。sudo
确保有足够权限,避免文件权限错误。mysqldump
命令中的密码可直接跟在-p
后(如-p密码
),但更安全的方式是-p
(不跟密码),然后交互式输入,避免密码泄露。cron
任务的输出),及时发现备份失败问题。