mysqldump + crontab 定时备份MySQL数据

mysqldump是MySQL的逻辑备份工具,产生一系列SQL语句,之后重新执行以产生备份的库、表及数据。也可产生CSV、XML等格式的数据。适用于各类引擎的表。

运行mysqldump需要一定的权限。备份表的最低权限为select,备份视图需要show view权限,备份触发器需要trigger权限。若不使用—single-transaction选项则还需lock tables权限,不同的选项可能需要对应的不同的权限。相应的载入备份文件也至少需要创建备份文件时相同的权限。

#创建相应权限的mysqldump专属用户
grant select, show view, lock tables, trigger, replication client, reload, event  on *.* to dumper@'localhost' IDENTIFIED BY "Evan2018dump";

#完整备份命令
mysqldump -udumper -pEvan2018dump -P3316 -S /data/mysql/3316/mysql.sock -A -B -F -R -E --master-data=2 -x | gzip > /opt/backup/edevops_$(date -I).gz

#各参数含义
-A 备份全部数据
-B 备份建库语句
-R 备份存储过程
-E 备份事件
-x 提交请求锁定所有数据库中的所有表,以保证数据的一致性。

mysqldump + crontab

vim /opt/scripts/Db_back.sh

#!/bin/bash

user=dumper
passwd=Evan2018dump
port=3316

/usr/local/mysql-5.7.23/bin/mysqldump -u$user -p$passwd -P$port -S /data/mysql/3316/mysql.sock -A -B -F -R -E --master-data=2 -x | gzip > /opt/backup/edevops_$(date -I).gz

/bin/bash /opt/scripts/rmOldFile.sh

crontab -e

0 0 * * * /bin/bash /opt/scripts/Db_back.sh &>/dev/null

Db_back.sh中mysqldump命令一定要是全路径,不然crontab的变量环境不认识此命令就不能正常的定时定点备份了,最后一行执行的脚本是用来删除过旧备份冗余的,详细脚本内容也会给出的:

vim /opt/scripts/rmOldFile.sh

ReservedNum=5
Dir=/opt/backup/
FileNum=$(ls -l $Dir | grep ^- | wc -l)

while(( $FileNum > $ReservedNum ))
do
  OldFile=$(ls -rt $Dir | head -1)
  rm -f $Dir$OldFile
  let "FileNum--"
done

原文链接

你可能感兴趣的:(mysqldump + crontab 定时备份MySQL数据)