MySQL备份

6/15/2023 MySQLubuntubashmysqldump

# 一、场景

# 1 备份对象

对MySQL中名为zabbix的数据库实例的全部内容进行备份

# 2 备份要求

  • 备份文件路径:"~/data_backup/<以当前"年月日"命名的文件见>/zabbix.sql"。
    以当前登录用户为cqcet为例,在23年5月8日进行的备份文件的路径应该如下:
    /home/cqcet/data_backup/230508/zabbix.sql
    
    1
  • 执行备份时需使用zabbix用户身份进行备份。
  • 备份完成后需要删除90天以前的备份文件。

# 5 备份方式

使用bash脚本实现自动化。

# 二、实现

# 1 创建bash脚本文件

在当前登录用户的home路径下,通过vim指令创建并编辑一个名为sqlbackup.sh的bash文件

$ cd ~
$ sudo vim sqlbackup.sh
1
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

# 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
Last Updated: 12/2/2023, 9:58:12 PM