OnlyTL

OnlyTL

Linux下定时备份Mysql数据库

748
2022-02-26
Linux下定时备份Mysql数据库

Linux下定时备份Mysql数据库

前言

    作为一个菜鸟程序员 ,时刻心系公司数据问题, 生怕屎山一样的代码引起故障 ,导致数据丢失 ,所以定时备份我的一亩三分田显得尤为重要。在此分享一下我的备份计划。

备份

  首先, 我们得找一个足够大的地方 ,足够去存储备份的数据库文件 ,先通过df -h 找到一个空间大的目录 。

image-20220509110459250

  可以看到 /wanwutech目录空间很大 ,此目录挂载了一个500G的云盘 ,所以就他了。

1. 创建备份目录

cd /wanwutech 						# 进入选定目录

mkdir /wanwutech/backup    	#创建要备份到的目录

2. 创建备份脚本

cd /wanwutech/backup
vi mysql_backup.sh

输入/粘贴脚本内容:

#!/bin/bash

#database_name 为数据库名 如果有多个数据库需要备份 ,可以在 mysqldump 语句中将数据库名'$database_name'参数更改为'-A' ,表示备份所有数据库
database_name='application'    #数据库名

#这里我想每天备份 ,按日期目录存储 ,所以备份文件按日期目录存储 ,备份文件后缀增加当前时间 ,一天可以有多个备份

backup_dir='/wanwutech/backup/'$(date +'%Y-%m-%d')'/'    #备份的路径
current_time=$(date +'%Y-%m-%d_%H%M%S') 					#当前的时间
filepath=$backup_dir$current_time'.sql.gz'  #将backup_dir和时间组合起来,再加个后缀

# 先检验并创建日期文件夹
echo '校验并创建日期文件夹...'
if [ ! -d "$backup_dir" ];then
mkdir $backup_dir
fi

echo '开始数据库备份----------------------------------------'
mysqldump --defaults-extra-file=/wanwutech/backup/mysql_backup.cnf  $database_name | gzip > $backup_dir$current_time'.sql.gz'
# 如果是备份多个数据库, dump语句改为
mysqldump --defaults-extra-file=/wanwutech/backup/mysql_backup.cnf  -A | gzip > $backup_dir$current_time'.sql.gz'
echo '数据库备份成功----------------------------------------'

3. 创建备份配置文件

需要创建备份的配置文件 ,配置数据库用户名密码等

vi mysql_backup.cnf

输入/粘贴内容:

[mysqldump]
#max_allowed_packet = 400M #
host=127.0.0.1						#地址
user=root							#数据库用户名
password='Azxvg78pl,'				#数据库密码
[mysql]
host=127.0.0.1						
user=root
password='Azxvg78pl,'

4.给脚本添加权限

chmod 755 mysql_backup.sh

5.执行脚本

sh mysql_backup.sh

执行完成后就备份成功了 ,如果有错误 ,请根据错误类型自行分析 ,我这样搞是没有错误的 ,当然因环境,人为等因素 ,不能保证在你那不报错。没有问题后说明这样备份是可以的 ,接下来添加定时任务就可以了。

添加定时任务

  使用crontab来创建任务

crontab -e

添加执行脚本, 先解释一下脚本格式, 基本格式为

* * * * * command

前面5个* 分别代表 分 时 日 月 周

后面command代表具体执行的命令

corntab

下面给出一些示例

  1. 每5分钟执行一次 ,在分配置除以5就是每5分钟执行一次

    */5 * * * * /wanwutech/backup/mysql_backup.sh  #每5分钟执行一次
    
  2. 每12小时执行一次

    0 */12 * * * /data/backup/mysql_backup.sh 		#每12小时备份一次
    
  3. 每天定时执行

    0 23 * * * /data/backup/mysql_backup.sh 		# 每天23点执行
    

    可以设置多个定时执行时间, 逗号分隔, 如

    0 12,23 * * * /data/backup/mysql_backup.sh 		# 每天12点和每天23点执行
    

添加完成后保存即可 ,前提是系统要启动crontab 可以通过 system corn start 启动服务

至此 ,定时备份功能已经完成了 ,那接下来 ,如何恢复备份的数据呢?

恢复

    恢复也很简单 ,这里我们备份的是gz压缩文件,所以先解压它.

  1. 解压备份文件

    gzip /wanwutech/backup/2022-05-05/2022-05-05_120000.sql.gz   #解压备份文件
    
    #上面那种解压会删掉原压缩文件 ,可以采用下面这种方式解压
    gunzip -c /wanwutech/backup/2022-05-05/2022-05-05_120000.sql.gz > /wanwutech/backup/2022-05-05/2022-05-05_120000.sql
    
  2. 解压完成后加入mysql ,恢复数据

    mysql -u root -p 
    # 输入密码...
    
    # 进入对应数据库
    use application;
    
    # 恢复数据
    source /wanwutech/backup/2022-05-05/2022-05-05_120000.sql