一、创建存放备份文件的地址
mkdir -p /home/mysql-back
二、创建日志文件用于记录
touch /home/mysql-backlog.log
三、创建备份所需的脚本文件
touch /home/save-all-data.sh
四、编写sh脚本
vim /home/save-all-data.sh
#全量备份
source /etc/profile # 加载系统环境变量
source ~/.bash_profile # 加载用户环境变量
# 定义全局变量
#登录数据库用户名
user="root"
#访问数据库密码
password="root"
#访问地址
host="localhost"
#访问数据库端口
port="3306"
#备份数据库名称,多个数据库用空格进行间隔
db=("newLEO" "test")
local="--single-transaction"
#数据库位置
mysql_path="/www/server/mysql"
#备份地址
backup_path="/home/mysql-back"
date=$(date +%Y%m%d_%H:%M:%S)
day=30
#日志路径
backup_log="/home/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 --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}'
五、添加可执行权限
chmod +x /home/save-all-data.sh
六、手动进行备份进行测试
./save-all-data.sh
七、查看mysql-back目录下是否拥有该文件
cd /home/mysql-back
八、进行备份数据恢复
1.解压
tar --force-local -zxvf LOGLEO.000015_20200708_09:17:27.tar.gz
2.执行sql脚本
mysql -uroot -p你的mysql密码 要还原的数据库名 </home/mysql-back/LOGLEO.000015_20200708_09:17:27.sql
九、创建定时执行脚本的任务
crontab -e
#每日22:30执行该脚本进行数据备份
30 22 * * 0 /home/save-all-data.sh > /dev/null 2>&1