MySQL备份
qinsz 6/15/2023 MySQLubuntubashmysqldump
# 一、场景
# 1 备份对象
对MySQL中名为zabbix的数据库实例的全部内容进行备份
# 2 备份要求
- 备份文件路径:"~/data_backup/<以当前"年月日"命名的文件见>/zabbix.sql"。
以当前登录用户为cqcet为例,在23年5月8日进行的备份文件的路径应该如下:/home/cqcet/data_backup/230508/zabbix.sql1 - 执行备份时需使用zabbix用户身份进行备份。
- 备份完成后需要删除90天以前的备份文件。
# 5 备份方式
使用bash脚本实现自动化。
# 二、实现
# 1 创建bash脚本文件
在当前登录用户的home路径下,通过vim指令创建并编辑一个名为sqlbackup.sh的bash文件
$ cd ~
$ sudo vim sqlbackup.sh
1
2
2
# 2 输入脚本内容
在编辑界面中,输入以下内容
#!/bin/bash
# 备份文件夹的根目录
backup_root_folder=/home/cqcet/data_backup
# 根据当前日期形成的当天备份路径
backup_folder=$backup_root_folder/$(date +%y%m%d)
# 本份文件的完整路径
backup_file_path="$backup_folder/zabbix.sql"
# 用于创建路径的函数
function makedir(){
echo $(date "+%Y-%m-%d %H:%M:%S")
if [ -d $backup_folder ]; then
# 备份路径已经存在
echo "备份路径已经存在: $backup_folder"
else
# 备份路径不存在,则创建该路径
mkdir -p $backup_folder
echo "创建备份路径: $backup_folder"
fi
}
# 生成sql备份文件的函数
function backupsql(){
# 使用mysqldump工具进行备份
# 并将备份文件保存到backup_file_path所指向的位置
mysqldump -uzabbix -ppassword zabbix > $backup_file_path
echo "备份成功, 文件路径:$backup_file_path"
# 删除90天前的记录
delete_folder=$backup_root_folder/$(date -d -90day +%y%m%d)
if [ -d $delete_folder ]; then
rm -r $delete_folder
echo "成功删除历史sql文件夹:$delete_folder"
else
echo "没有要删除的历史sql文件夹"
fi
}
# 执行函数
makedir
backupsql
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
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
# 3 保存bash脚本
输入完成后,在vim编辑器中通过":wq"指令将文件进行保存并退出
:wq
1
# 4 为zabbix用户授权
在执行刚才创建的脚本之前需要确保zabbix用户已经被授权PROCESS权限。
# 4.1 使用root用户登录数据库
$ mysql -u root -p
1
# 4.2 登录数据库后执行如下指令进行授权
GRANT PROCESS ON *.* TO zabbix@localhost;
1
# 4.3 然后执行如下指令使得授权生效
flush privileges;
1
# 4.4 退出数据库
exit;
1
# 5 执行bash脚本完成备份
$ bash sqlbacku.sql
1