本脚本支持多数据库压缩备份
1.新建文件 mysql_data.sh
内容如下:
#!/bin/sh
DUMP=/www/wdlinux/mysql/bin/mysqldump #mysqldump的路径,不知道的可以全局搜索一下 find / -name mysqldump
OUT_DIR=/www/web/xxxx_com/public_html/dbbak #备份文件的目录,没有提前建好
DB_NAME=("db_test1" "db_test2") #要备份的数据库名字 数组形式
DB_USER=root #数据库登录名
DB_PASS=password #数据库登陆密码
HOST=127.0.0.1 #服务器ip
USE=root #用户
DATE=`date +%Y%m%d%H%M` #当前时间
# 循环备份多个数据库
for dbname in ${DB_NAME[@]}
do
OUT_SQL="mysqldata_bak_${dbname}_${DATE}.sql.gz" #备份出来的sql文件名
$DUMP -u$DB_USER -p$DB_PASS $dbname | gzip -c >$OUT_DIR/$OUT_SQL
done
以上内容根据自己实际情况修改参数,
上传脚本到服务器
2.ssh root@xxx.xxx.xxx.xxx 登录远程服务器
3.将脚本设置成可执行的文件类型(chmod +x的意思就是给执行权限)
chmod +x /路径/mysql_bak.sh
4.添加定时任务 crontab
crontab -e
添加如下命令 (不带bash -x时没有触发任务)
30 1 * * * bash -x /路径/mysql_bak.sh
计划任务实例(以下路径是存放脚本的地址,根据自己实际情况修改):
01 03 * * * bash -x /www/web/xxx_com/public_html/dbbak/mysq_data.sh
查看计划任务并编辑:crontab -e
查看计划任务:crontab -l
附crontab说明:
minute hour day-of-month month-of-year day-of-week commands
分钟 小时 天 月 星期 要执行的命令
前面五个参数中间用空格隔开,最后是要执行的命令。
合法值为:00-59 00-23 01-31 01-12 0-6 (0 is sunday)
5 重启定时任务
service crond restart
附1:删除太久之前的数据备份脚本(以下是保留最近一个月的备份脚本)
DAYS=30 #过期天数
BACKUP_DIR=/www/web/xxxx_com/public_html/dbbak #(这个文件和上面备份的文件一致)
#删除过期的文件
find $BACKUP_DIR -name "mysqldata_bak*" -type f -mtime +$DAYS -exec rm {} \; #删>除30天前的备份文件(注意:{} \;中间有空格)
附2:恢复备份命令
1.解压缩
gunzip 备份文件名
2.还原数据库
mysql -u root -p datapase < 备份文件名
桌面备份恢复到数据库db_test1(本地测试用用户名:root 密码:root):
mysql -u root -proot db_test1<C:\Users\Administrator\Desktop\mysqldata_bak_202103230301.sql