博客 / Linux/ Linux VPS 自动备份 MySQL 数据库与网站文件到远程 FTP 服务器的脚本配置指南

Linux VPS 自动备份 MySQL 数据库与网站文件到远程 FTP 服务器的脚本配置指南

Linux VPS 自动备份 MySQL 数据库与网站文件到远程 FTP 服务器的脚本配置指南

脚本配置与使用步骤

本指南将详细介绍如何配置并使用一个自动化备份脚本,将您的 MySQL 数据库和网站文件备份到另一台 FTP 服务器。

1. 修改备份脚本

首先,进入用户主目录并编辑备份脚本文件:

cd ~
vi lnmp1.2-full/tools/backup.sh

使用 Vim 编辑器打开文件后,请根据下文“脚本参数说明”部分,修改相应的配置参数。

2. 创建本地备份目录

编辑完成后,在 /home/ 目录下创建一个用于临时存放备份文件的目录,并设置其权限:

cd /home/
mkdir backup
chmod 777 backup

3. 安装 FTP 客户端工具

脚本使用 lftp 进行文件传输,请确保已安装:

yum install lftp

脚本参数详细说明

以下是脚本中需要您根据实际情况修改的关键参数。请仔细阅读注释并填写。

# 备份文件本地存放目录,请确保此目录已创建且具有写权限
Backup_Home="/home/backup/"

# mysqldump 命令的完整路径。
# 注意:如果您使用的是 MariaDB,请将路径中的 `mysql` 替换为 `mariadb`。
MySQL_Dump="/usr/local/mysql/bin/mysqldump"

# 需要备份的网站目录,用双引号括起来,多个目录用空格分隔。
# 示例:备份 aaa.com 和 bbb.com 的网站文件
Backup_Dir=("/home/wwwroot/aaa.com" "/home/wwwroot/bbb.com")

# 需要备份的数据库名称,多个数据库用空格分隔。
Backup_Database=("aaaDB" "bbbDB")

# MySQL root 账号信息
MYSQL_UserName='root'
MYSQL_PassWord='yourrootpassword'  # 请替换为您的实际 root 密码

# 是否启用 FTP 远程备份。0 表示启用,1 表示不启用。默认值为 0。
Enable_FTP=0

# FTP 服务器连接信息
FTP_Host='1.1.1.1'          # 请替换为您的 FTP 服务器 IP 或域名
FTP_Username='ftp'          # FTP 用户名
FTP_Password='yourftppassword' # FTP 密码
# FTP 服务器上用于存放备份的目录。
# 注意:请确保该目录在 FTP 服务器上已存在且具有写权限。
FTP_Dir="/backup"
# 参数设置结束

注意:以上路径和配置示例基于 LNMP 一键安装包环境。如果您使用的是其他 Web 环境(如 LAMP、宝塔面板等),请根据实际情况调整路径(如 MySQL 安装路径、网站根目录等)。

执行备份操作

方法一:手动执行备份

通过 SSH 连接到 VPS 后,执行以下命令(请确保脚本路径与您的 LNMP 版本一致):

cd ~/lnmp1.2-full/tools/
/bin/bash backup.sh

方法二:设置定时任务自动备份

为了自动化,可以添加一个 Crontab 任务,例如设置为每天凌晨 5 点自动执行备份:

crontab -e

在打开的编辑器中添加以下一行:

00 05 * * * /bin/bash ~/lnmp1.2-full/tools/backup.sh

保存并退出后,定时任务即会生效。

常见问题与解决方法

问题:MySQL 备份时出现权限错误

执行脚本时,可能会遇到如下错误:

mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: YES) when trying to connect

这表明脚本中配置的 MySQL 用户名或密码不正确,导致无法连接数据库。

解决方法一:重置 MySQL root 密码(适用于忘记密码的情况)

警告:此操作会重启 MySQL 服务,请在维护时段进行。

# 停止 MySQL 服务
/etc/init.d/mysql stop

# 以安全模式启动 MySQL,跳过权限验证
mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

# 连接 MySQL
mysql -u root mysql

# 在 MySQL 提示符下执行以下命令(请将 'newpassword' 替换为您的新密码)
UPDATE user SET authentication_string=PASSWORD('newpassword') WHERE User='root';
FLUSH PRIVILEGES;
quit

# 重启 MySQL 服务
/etc/init.d/mysqld restart

# 使用新密码测试连接
mysql -uroot -p

重要更新:对于 MySQL 5.7 及以上版本,密码字段名可能是 authentication_string,而非 Password。请根据您的 MySQL 版本调整上述 SQL 语句。

解决方法二:检查并确认连接凭据

  1. 使用 phpMyAdmin 检查:登录 phpMyAdmin,查看 mysql.user 表,确认 root 用户对应的主机(通常是 localhost)及其密码哈希值。
  2. 确认密码:确保脚本中 MYSQL_PassWord 的值与您通过命令行 mysql -uroot -p 成功登录时使用的密码完全一致。注意区分大小写。
  3. 检查用户权限:有时网站可能使用了非 root 的数据库用户。请确认您备份的数据库(Backup_Database 中列出的)的所有者用户及其密码,并在脚本中使用相应用户的凭据。

完成密码修正或确认后,请重新执行备份命令。

发表评论

您的邮箱不会公开。必填项已用 * 标注。