实现linux下mysql数据库的自动备份可以使用shell脚本,下面是实现方法:
第一步:安装mysql客户端和sshpass命令
首先需要安装mysql客户端程序和sshpass命令。在Debian/Ubuntu系统中,可以使用以下命令来安装:
sudo apt-get install mysql-client sshpass
在CentOS/RHEL系统中,可以使用以下命令来安装:
sudo yum install mysql mysql-client sshpass
安装完成后,可以使用以下命令验证是否安装成功:
mysql --version
sshpass -V
第二步:创建备份脚本
创建一个新的shell脚本文件,例如backup_mysql.sh,并将以下代码复制到该文件中:
#!/bin/bash
# 数据库服务器相关信息
HOST="localhost"
USER="root"
PASSWORD="password"
# 备份文件存储路径
BACKUP_DIR="/var/backups/mysql"
# 备份名称及其格式
FILENAME=$(date +"%Y%m%d-%H%M%S").sql.gz
# 备份命令
CMD="mysqldump -h$HOST -u$USER -p$PASSWORD --databases mydatabase | gzip > $BACKUP_DIR/$FILENAME"
# 执行备份命令
eval "$CMD"
# 上传命令
sshpass -p "remote_ssh_password" scp $BACKUP_DIR/$FILENAME remote_ssh_username@remote_ssh_server:/remote/backups/mysql/
在这个脚本中,我们首先定义了要备份的数据库服务器相关信息,包括主机名,用户名和密码。接着,我们指定备份文件的存储路径,备份命令以及备份文件名的格式。然后,我们执行备份命令将备份文件保存在指定的目录中。最后,我们使用sshpass命令将备份文件上传到远程服务器上。
第三步:设置定时任务
为了自动执行备份脚本,需要将该脚本添加到cron的定时任务中。打开cron配置文件,使用以下命令:
sudo crontab -e
然后在文件末尾添加以下内容:
0 2 * * * /path/to/backup_mysql.sh
这条命令的含义是每天凌晨2点执行备份脚本。根据需要可以调整时间和执行周期。
示例:
指定备份多个数据库,并以数据库名命名备份文件
#!/bin/bash
# 数据库服务器相关信息
HOST="localhost"
USER="root"
PASSWORD="password"
# 备份文件存储路径
BACKUP_DIR="/var/backups/mysql"
# 备份命令
for db in db1 db2 db3
do
FILENAME=$(date +"%Y%m%d-%H%M%S").${db}.sql.gz
CMD="mysqldump -h$HOST -u$USER -p$PASSWORD $db | gzip > $BACKUP_DIR/$FILENAME"
eval "$CMD"
done
# 上传命令
sshpass -p "remote_ssh_password" scp $BACKUP_DIR/*.sql.gz remote_ssh_username@remote_ssh_server:/remote/backups/mysql/
该脚本备份了3个数据库,并以数据库名命名备份文件。备份文件格式为当前日期加时间戳加数据库名的形式。同时上传所有备份文件到远程服务器。
另一个示例是备份指定日期的数据,并且在备份时排除指定的表:
#!/bin/bash
# 数据库服务器相关信息
HOST="localhost"
USER="root"
PASSWORD="password"
# 备份文件存储路径
BACKUP_DIR="/var/backups/mysql"
# 要备份的数据库
DATABASE="mydatabase"
# 备份命令
FILENAME=$(date +"%Y%m%d").sql.gz
EXCLUDE_TABLES=("table1" "table2")
CMD="mysqldump -h$HOST -u$USER -p$PASSWORD --ignore-table=${DATABASE}.${EXCLUDE_TABLES[0]} --ignore-table=${DATABASE}.${EXCLUDE_TABLES[1]} $DATABASE | gzip > $BACKUP_DIR/$FILENAME"
eval "$CMD"
# 上传命令
sshpass -p "remote_ssh_password" scp $BACKUP_DIR/$FILENAME remote_ssh_username@remote_ssh_server:/remote/backups/mysql/
该脚本备份了指定的数据库,格式为YYYYMMDD.sql.gz。同时在备份的时候,排除EXCLUDE_TABLES数组中指定的表格。最后,将备份文件上传到远程服务器上。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:linux下mysql如何自动备份shell脚本 - Python技术站