Linux自动备份MySql数据库
手动备份执行脚本:
mysqldump --socket=/tmp/mysql.sock -ubackupdb -p123456 --databases test test01 > test_20221121.sql;
创建自动备份脚本
1.创建备份数据库文件的根目录:
# mysql数据库文件目录
mkdir -p /data/db/mysql
2.创建数据库的备份文件目录
cd /data/db/mysql
mkdir backup
3.编写shell脚本
3.1 在/usr/sbin目录下分别创建数据库对应的 mysql_govern_db_backup.sh 、mysql_sict_form_db_backup.sh、mysql_sict_management_db_backup.sh、mysql_sict_oaflowwork_db_backup.sh 文件:
# 创建文件 touch mysql_govern_db_backup.sh # 打开编辑文件 vi mysql_govern_db_backup.sh # 输入以下内容#!/bin/bash
#!/bin/bash
#================基础参数===============
user="backupdb"
password="123456"
host=localhost
port="3306"
#备份库名列表,括号内多个数据库空格隔开
db_name_array=("govern" "form" "management" "oaflowwork")
#备份位置(若不存在,会自动创建)
datafile_path="/data/db/mysql/backup"
#mysqlDump的绝对位置,基本为mysql安装路径
mysqlDump_path="/usr/bin/mysqldump"
#是否删除.sql文件(包含子目录): ON开启,其他字符不开启
rf_switch="ON"
#数据保留天数(按文件修改时间计算)
expire_day=10
# socket文件路径
socket_path=/tmp/mysql.sock
#================非开发人员勿改================
#备份最终路径
bak_path="${datafile_path}/${db_name}"
#错误日志文件名称
error_log="${bak_path}/${db_name}_error.log"
#================备份执行指令================
#判断文件夹,不存在则创建
if [ ! -d "$bak_path" ]
then
mkdir -p ${bak_path}
echo "已创建文件夹${bak_path}"
fi
#判断mysql是否开启
checkPort=`lsof -i:${port} | wc -l`
if [ "$checkPort" -gt "0" ]
then
echo "mysql 已启动"
else
echo "mysql 未启动无法进行备份"
echo "mysql 未启动无法进行备份" > $error_log
fi
#执行备份
echo "执行备份"
for db_name in ${db_name_array[*]}
do
${mysqlDump_path} --socket=${socket_path} -u${user} -p${password} --host=${host} -q -R --databases $db_name | gzip > ${bak_path}"/"$db_name$'_'$(date +%Y%m%d_%H%M%S).sql.gz 2>>${error_log}
done
#删除过期文件
echo "删除过期文件"
if [ $rf_switch == "ON" ]
then
find ${bak_path} -name "*.sql" -mtime +${expire_day} | xargs rm -f
fi
echo "脚本执行完毕"
ps:在编辑状态下,使用快捷键:ggdG ,可以清空文件内容。
按esc键然后输入英文冒号继续输入wq,保存并退出。
3.2 设置脚本的执行权限
chmod +x /usr/sbin/mysql_db_backup.sh
3.3 执行测试脚本是否能正常备份
sh /usr/sbin/mysql_db_backup.sh
3.4 进入到目录中查看是否存在备份文件
cd /data/db/mysql/govern
4.设置定时执行
# 加入到定时服务中 crontab -e # 设置 周二至周六凌晨 2:30 执行
# {minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}
# minute: 区间为 0 – 59
# hour: 区间为0 – 23
# day-of-month: 区间为0 – 31
# month: 区间为1 – 12. 1 是1月. 12是12月.
# Day-of-week: 区间为0 – 7. 周日可以是0或7. 0 2 * * 2-6 /usr/sbin/mysql_db_backup.sh
5. 查看定时指令
crontab -l

浙公网安备 33010602011771号