美文网首页
mysql定时备份方案

mysql定时备份方案

作者: 后尘L | 来源:发表于2021-06-01 17:31 被阅读0次

数据库数据在软件系统中占有重要地位,为避免数据丢失后无法恢复,需要定时备份。

mysql备份命令

mysql自带mysqldump命令,用于执行数据库备份。
使用以下命令备份数据。注意-p和密码之间没有空格。

mysqldump -u root -pmy_password  db_name > back_name.sql

但是直接在脚本中使用密码,存在泄露风险。所以推荐使用以下方式,把密码保存在数据库配置文件my.cnf中,mysqldump通过读取配置文件来获取密码。这样就避免了脚本中密码的泄露风险。
我的linux服务器上数据库配置文件位于/etc/my.cnf,打开后,添加以下密码配置。注意[client]不可缺少,如果文件中没有的话,必须添加。然后,修改配置文件权限为可读。

# 添加到配置文件/etc/my.cnf
[client]
password="my_password"

# 修改配置文件权限为可读
chmod 600 /etc/my.cnf

之后再使用mysqldump命令时,如下所示:

mysqldump --defaults-file=/etc/my.cnf  db_name > back_name.sql

shell脚本执行mysql备份命令

创建/root/dump目录,在目录中添加dump_mysql.sh文件,添加以下代码:

# 将要备份的数据库
database_name=my_db_name

# 保存备份文件最多个数
count=15
# 备份保存路径
backup_path=/root/dump
# 日期: 2021-06-01-15-57
date_time=`date +%Y-%m-%d-%H-%M`
# 备份文件
target_file=$backup_path/$database_name-$date_time.sql

# 开始备份
mysqldump --defaults-file=/etc/my.cnf $database_name > $target_file
# 开始压缩,压缩后体积降为原有的三分之一
cd $backup_path
tar -zcvf $database_name-$date_time.tar.gz $database_name-$date_time.sql
# 删除源文件
rm -rf $target_file
# 更新备份日志
echo "create $backup_path/$database_name-$date_time.tar.gz" >> $backup_path/dump.log

# 找出列表中第1个文件作为待删除的备份,
# -crt  $backup_path/*.tar.gz 是正则匹配,且以时间排序
# $9是ls -l打印结果的第9列,head -1是取列表的第1项
delfile=`ls -l -crt  $backup_path/*.tar.gz | awk '{print $9 }' | head -1`

# 判断现在的备份数量是否大于阈值,wc -l 是统计列表长度
number=`ls -l -crt  $backup_path/*.tar.gz | awk '{print $9 }' | wc -l`

if [ $number -gt $count ]
then
  # 删除最早生成的备份,只保留count数量的备份
  rm $delfile
  # 更新删除文件日志
  echo "delete $delfile" >> $backup_path/dump.log
fi

然后修改脚本权限,使其可执行。

chmod +x dump_mysql.sh

# 执行备份
./dump_mysql.sh

定时执行shell备份脚本

linux系统自带有crontab命令,用于添加自动执行任务。

crontab -l    # 查看已添加自动执行任务
crontab -e    # 添加自动执行任务

执行crontab -e后,添加以下配置并保存,即成功添加执行任务

# 前5个参数表示自动执行时间,分别代表分、时、日、月、周,最后一个参数表示待执行的脚本
# *表示每
00 03 * * * /root/dump/dump_mysql.sh

相关文章

网友评论

      本文标题:mysql定时备份方案

      本文链接:https://www.haomeiwen.com/subject/jpxgsltx.html