Linux 下定时备份 MySQL 数据库

前言

       由于项目需要,要求实现定时备份用户数据的功能,以便数据库出现意外时可以恢复数据。本项目为 SaaS 架构,我们会为每个新注册的公司动态生成一个数据库,用来存放该公司下的所有数据,因此,我们做数据备份的时候也需要动态备份该项目相关的所有数据库。

 

实现思路

      经过一番查阅,决定采用 mysql 自带的备份命令,配合 Linux 的定时任务,实现每天定时备份所有用户数据。即编写一个 shell 脚本,写入备份命令,然后让 Linux 去定时执行这个脚本

 

实现步骤

1. 创建目录 /root/mysqlbackup/shell/ ,并将 mysql_dump_script.sh 和 mysqlCron.cron 移动到该目录下

2. 为 mysql_dump_script.sh 和 mysqlCron.cron 赋予可执行权限:

sudo chmod 777 XXX.XX

3. 添加定时任务,执行命令:

crontab mysqlCron.cron

4. 查看定时任务是否成功创建:

crontab -l

注:

1. mysql_dump_script.sh 是执行数据库备份脚本,如本例中每次执行会导出所有以 cloud_ 开头的数据库的所有结构和数据,

并存至 xx.sql 文件,xx为执行时的日期。另外,默认保存最近 31 份文件,超出部分会从最原始的文件开始删除,直至总量保持在 31。

2. mysqlCron.cron 是定时任务文件

 

附上本文提及的脚本源码:

mysql_dump_script.sh

#!/bin/bash
#保存备份个数,备份31天数据
number=31
#备份保存路径
backup_dir=/root/mysqlbackup
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#用户名
username=root
#密码
password=1234
#如果文件夹不存在则创建
if [ ! -d $backup_dir ]; 
then     
    mkdir -p $backup_dir; 
fi
#数据备份命令,导出所有数据结构和数据
mysql -e "show databases;" -u$username -p$password | grep "cloud_*" | xargs mysqldump -u$username -p$password --databases > $backup_dir/backup-$dd.sql
#记录创建备份日志
echo "create $backup_dir/$backup-$dd.dupm" >> $backup_dir/log.txt
#找出需要删除的备份
delfile=`ls -l -crt  $backup_dir/*.sql | awk '{print $9 }' | head -1`
#判断现在的备份数量是否大于$number
count=`ls -l -crt  $backup_dir/*.sql | awk '{print $9 }' | wc -l`
if [ $count -gt $number ]
then
  #删除最早生成的备份,只保留number数量的备份
  rm $delfile
  #写删除文件日志
  echo "delete $delfile" >> $backup_dir/log.txt
fi

mysqlCron.cron

0 2 * * * /root/mysqlbackup/shell/mysql_dump_script.sh

 

你可能感兴趣的:(初入,Linux)