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
网友评论