cd /mysql-backup
mkdir back
cd back
vi mysql-backlog.log
内容为空,保存
vi save-all-data.sh
#全量备份
source /etc/profile # 加载系统环境变量
source ~/.bash_profile # 加载用户环境变量
# 定义全局变量
#登录数据库用户名
user="root"
#访问数据库密码
password="123456"
#访问地址
host="127.0.0.1"
#访问数据库端口
port="3306"
#备份数据库名称,多个数据库用空格进行间隔
db=("user" "order" "role")
local="--single-transaction"
#数据库位置
mysql_path="/var/bin/mysql"
#备份地址
backup_path="/mysql-backup/data"
date=$(date +%Y%m%d_%H%M%S)
day=30
#日志路径
backup_log="/mysql-backup/back/mysql-backlog.log"
# 判断是否存在目录,不存在则创建目录
if [ ! -e $backup_path ];then
mkdir -p $backup_path
fi
# 删除30天以前备份
find $backup_path -type f -mtime +$day -exec rm -rf {} \; > /dev/null 2>&1
echo "开始备份数据库: ${db[*]}"
# 备份数据库后压缩
backup_sql(){
dbname=$1
#保存的文件名称
backup_name="${dbname}_${date}.sql"
mysqldump -h $host -P $port -u $user -p$password $lock --default-character-set=utf8 --socket=/var/lib/mysql/mysql.sock --flush-logs -R $dbname > $backup_path/$backup_name
if [[ $? == 0 ]];then
cd $backup_path
# tar --force-local参数压缩带有冒号的压缩包
tar czvf $backup_name.tar.gz $backup_name --force-local
size=$(du $backup_name.tar.gz -sh | awk '{print $1}')
rm -rf $backup_name
echo "$date 备份 $dbname($size) 成功"
else
cd $backup_path
rm -rf $backup_name
echo "$date 备份 $dbname 失败"
fi
}
# 多个库循环备份
length=${#db[@]}
for ((i=0;i<$length;i++));do
backup_sql ${db[i]} >> $backup_log 2>&1
done
echo "备份结束,结果查看 $backup_log"
du $backup_path/*$date* -sh | awk '{print "文件:" $2 ",大小:" $1}'
保存脚本
sudo chmod +x save-all-data.sh
crontab用法:
crontab -e 编辑工作表
crontab -l 列出工作表中的命令
crontab -r 删除工作表
HELL=/bin/bash
00 01 * * * /mysql-backup/back/save-all-data.sh
sed -i 's/\r//g' 命令可以格式化sh文件,用法为:sed -i 's/\r//g' xxx.sh
save-all-data.sh 指定12:20和01:00定时间点执行,数据库异地备份
:wq保存文件即可