侧边栏壁纸
  • 累计撰写 31 篇文章
  • 累计创建 6 个标签
  • 累计收到 2 条评论
标签搜索

目 录CONTENT

文章目录

mysql开启定时备份(本地备份 全量+增量)

lj2508_com
2022-08-28 / 0 评论 / 0 点赞 / 190 阅读 / 1,087 字

使用场景。目前数据库长期处于无人管理情况下,数据安全性没有保障性,万一数据库崩溃数据就无从找起所以准备给自己的数据库加一个备份。但全全量备份又显得太大,定期删除,前期数据其实也有一定的作用,万一中途有问题未处理也比较麻烦,所以采用全量+增量的模式

  • 全量部分
    1.建立本地路径用来存储脚本和数据
    比如我的目录是。 /root/disk/mysqlback
    建立目录即可
    2.书写脚本
    在目录下新建 mysql_backup.sh 内容如下,根据自己情况修改
#!/bin/bash
#保存备份个数 保存总共多少天的备份备份
number=31
#备份保存路径
backup_dir=/root/disk/mysqlback
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#日期格式化
lastmonth=`date -d "$(date +%Y%m)01 last month"  +%Y-%m`

#备份工具
tool=mysqldump
#用户名  此处改成自己的
username=root
#密码 此处改成自己的密码
password=lj2508_T@
#将要备份的数据库 改成自己的的数据名
database_name=test


#如果文件夹不存在则创建
if [ ! -d $backup_dir ]; 
then     
    mkdir -p $backup_dir; 
fi

mysqldump -u$username  -p$password  $database_name > $backup_dir/mysql-backup-$database_name-$dd.sql


# 备份成功之后,删除上月备份数据
cd $backup_dir

find $backup_dir  -type f -mtime +$number -name *.sql -exec rm -rf {} \;


#写创建备份日志
echo "create $backup_dir/$database_name-$dd.dupm and delete lastmonth backup data" >> $backup_dir/log.txt

运行脚本查看脚本情况

bash mysql_backup.sh
--- mysqldump: [Warning] Using a password on the command line interface can be insecure.

报上面的错不用管。查看目录下备份的文件。看是否成功。
3.设置定时任务

运行如下命令 
crontab -e
 然后加入下面内容
0 3 * * 0 /root/disk/mysqlback/mysql_backup.sh
--- 每周日凌晨3点定时备份就完成了
#!/bin/bash

# 增量备份时复制mysql-bin.00000*的目标目录,提前手动创建这个目录
BakDir=/root/disk/mysqlback/daily
# 日志文件
LogFile=/root/disk/mysqlback/bak-daily.log

# mysql的数据目录  以下两个路径可以在mysql中使用  show variables like 'log_bin%';  来查询
BinDir=/var/lib/mysql 
# mysql的index文件路径,放在数据目录下的增量日志记录文件
BinFile=/var/lib/mysql/binlog.index 
#用户名  此处改成自己的
username=root
#密码 此处改成自己的密码
password=lj2508_T@
#备份工具   可以在/目录使用命令find -name mysqladmin  或者直接mysqladmin 可以执行的话可以直接写mysqladmin 
tool=/usr/bin/mysqladmin 
#如果文件夹不存在则创建
if [ ! -d $BakDir ]; 
then     
   mkdir -p $BakDir; 
fi

# 这个是用于产生新的mysql-bin.00000*文件
$tool -u$username -p$password flush-logs

Counter=`wc -l $BinFile | awk '{print $1}'`
NextNum=0
# 这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的
for file in `cat $BinFile`
do
       base=`basename $file`
       NextNum=`expr $NextNum + 1`
       if [ $NextNum -eq $Counter ]
       then
               echo $base skip! >> $LogFile
       else
               dest=$BakDir/$base
               #test -e用于检测目标文件是否存在,存在就写exist!到$LogFile去
               if(test -e $dest)
               then
                       echo $base exist! >> $LogFile
               else
                       cp $BinDir/$base $BakDir
                       echo $base copying >> $LogFile
               fi
       fi
done

echo `date +"%Y年%m月%d日 %H:%M:%S"` $Next Bakup succ! >> $LogFile

2.运行脚本查看脚本情况

bash mysql_daily_backup.sh
--- mysqldump: [Warning] Using a password on the command line interface can be insecure.

报上面的错不用管。查看目录下备份的文件。看是否成功。
3.设置定时任务

运行如下命令 
crontab -e
 然后加入下面内容
0 3 * * 1-6 /root/disk/mysqlback/mysql_daily_backup.sh
---  周一到周六凌晨3:00做增量备份

补充,如果执行时遇到权限不足时间。

脚本无法执行时   给予权限
chmod 777 mysql_daily_backup.sh

执行中无权限  可以直接放在root的定时任务中执行
sudo crontab -u root -e
0

评论区