Linux自动备份MySql数据库

手动备份执行脚本:

1
mysqldump --socket=/tmp/mysql.sock -ubackupdb -p123456 --databases test test01 > test_20221121.sql;

  

创建自动备份脚本

1.创建备份数据库文件的根目录:

1
# mysql数据库文件目录<br><br>mkdir -p /data/db/mysql

  

2.创建数据库的备份文件目录   

1
cd  /data/db/mysqlmkdir 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 文件: 

1
2
3
4
5
# 创建文件
touch mysql_govern_db_backup.sh
# 打开编辑文件
vi mysql_govern_db_backup.sh
# 输入以下内容#!/bin/bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/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 设置脚本的执行权限

1
chmod +x /usr/sbin/mysql_db_backup.sh

3.3 执行测试脚本是否能正常备份

1
sh /usr/sbin/mysql_db_backup.sh

3.4 进入到目录中查看是否存在备份文件

1
cd /data/db/mysql/govern

4.设置定时执行

1
2
3
4
# 加入到定时服务中
crontab -e
# 设置 周二至周六凌晨 2:30 执行<br># {minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script} <br># minute: 区间为 0 – 59 <br># hour: 区间为0 – 23 <br># day-of-month: 区间为0 – 31 <br># month: 区间为1 – 12. 1 是1月. 12是12月. <br># Day-of-week: 区间为0 – 7. 周日可以是0或7.
0 2 * * 2-6 /usr/sbin/mysql_db_backup.sh

 5. 查看定时指令

1
crontab -l

  

posted @   雨末君.℡°  阅读(740)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示