为了避免服务挂掉,数据库无法恢复,搞个脚本做数据库备份。核心的东西就是一个命令:mysqldump
首先写一个自动备份的shell脚本:
#!/bin/bash
#数据库用户名
db_username="admin"
#数据库密码
db_password="pwd"
#数据库ip
db_host="localhost"
#数据库库名
db_name="test_db"
#mysqldump命令目录
bin_dir="/usr/bin"
#备份数据目录
bck_dir="/home/data/mysqlbackup"
#文件名:日期命名,20220126.sql
date=`date +%F`
#备份命令
$bin_dir/mysqldump --opt -u$db_username -p$db_password -h$db_host $db_name > $bck_dir/$date.sql
升级版本1:压缩文件
$bin_dir/mysqldump --opt -u$db_username -p$db_password -h$db_host $db_name | gzip > $bck_dir/$date.sql.gz
如果gzip未安装需要安装gzip
yum -y install zip gzip
升级版本2:防止锁表
$bin_dir/mysqldump --opt -u$db_username -p$db_password -h$db_host $db_name --skip-lock-tables | gzip > $bck_dir/$date.sql.gz
升级版本3:备份多个库
#数据库库名
db_names=("db-test1" "db-test2")
for db in ${db_names[@]};do
echo database:$db
$bin_dir/mysqldump --opt -u$db_username -p$db_password -h$db_host $db_name --skip-lock-tables | gzip > $bck_dir/$date.sql.gz
done
升级版本4:删除过期数据
expire_flag="ON"
expire_days=15
if [ "expire_flag" == "ON" -a "$bck_dir" != "" ];then
`find $bck_dir/ -type f -mtime +$expire_days | xargs rm -rf`
echo "Expired backup data delete complete!"
fi
添加系统定时任务:
#打开任务列表
crontab -e
#加入定时任务,每天凌晨3点自动执行
00 03 * * * cd /home/script/;sh mysql_dump.sh >> log.txt 2>>log.txt
over!