Linux环境下mysql数据库备份操作说明

如下:

一、 编写数据库备份shell脚本

1、登录服务器,进入mysql安装目录。例:cd /usr/local/mysql

2、创建目录 dbBakShell和 dbbak,用于放置数据备份脚本及备份文件

mkdir dbBakShell

mkdir dbbak

3、将以下脚本上传到dbBakShell文件下,其文件中部分设置根据自己服务器进行配置

 

lzfzMysqlBak.sh文件如下 ,只需要修改如下标红位置即可-(不带压缩版脚本

复制代码
#!/bin/bash
#保存备份个数,备份14天数据
number=14
#备份保存路径
backup_dir=/usr/local/mysql/dbbak
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#备份工具
tool=/usr/local/mysql/mysql8.0/bin/mysqldump
#用户名
username=xxx
#密码
password=xxx
#将要备份的数据库
database_name=xxx
#如果文件夹不存在则创建
echo "$backup_dir";
if [ ! -d $backup_dir ];
  then
    mkdir $backup_dir;
fi
#简单写法 mysqldump -u root -pXXDB_2022 xxxq_mysql > /root/mysqlbackup/users-$filename.sql
$tool -u $username -p$password $database_name >$backup_dir/$database_name-$dd.sql

#写创建备份日志
echo "create $backup_dir/$database_name-$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
复制代码

压缩版脚本如下:

复制代码
#!/bin/bash
#保存备份个数,备份30天数据
number=30
#备份保存路径
backup_dir=/mnt/data/xxx/mysqlBakDir
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#备份工具
tool=/usr/bin/mysqldump
#用户名
username=root
#密码
password=xxx
#将要备份的数据库
database_name=xxx
#如果文件夹不存在则创建
echo "$backup_dir";
if [ ! -d $backup_dir ];
  then
    mkdir $backup_dir;
fi
#简单写法 mysqldump -u root -pXXDB_2022 xxxq_mysql > /root/mysqlbackup/users-$filename.sql
$tool -u $username -p$password $database_name >$backup_dir/$database_name-$dd.sql

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

# 将文件处理成 tar.gz
cd $backup_dir
tar -zcvf $database_name-$dd.tar.gz $database_name-$dd.sql
# 删除对应的备份目录
rm -rf $backup_dir/$database_name-$dd.sql


#找出需要删除的备份
delfile=`ls -l -crt $backup_dir/*.tar.gz | awk '{print $9 }' | head -1`

#判断现在的备份数量是否大于$number
count=`ls -l -crt $backup_dir/*.tar.gz | awk '{print $9 }' | wc -l`

if [ $count -gt $number ];
then
  #删除最早生成的备份,只保留number数量的备份
  rm $delfile
  #写删除文件日志
  echo "delete $delfile" >> $backup_dir/log.txt
fi
 
复制代码

 4、进入dbBakShell目录测试运行shell脚本,判断结果是否与预期一致(在dabak目录下生成数据库备份的sql)

cd dbBakShell/

sh ./lzfzMysqlBak.sh

运行结果如下

注意事项:

复制代码
注意:
a.运行shell脚本,出现以下错误:
/lzfzMysqlBak.sh:行17: $'\r': 未找到命令
原因:脚本文件在Windows下编辑过,在Windows下每一行结尾是\n\r,而在linux下是\n
需执行以下操作:
sed -i 's/\r$//' lzfzMysqlBak.sh
    
b,运行shell脚本,出现以下错误: mysqldump命令找不到 需运行以下操作: ln -fs /usr/local/mysql/bin/mysqldump(此路径为mysqldump所在目录) /usr/bin 原因:这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件。
复制代码

二、 Cron定时任务设置

测试shell脚本没有问题后,设置cron定时器任务。

1、cron命令:

systemctl reload crond.service 重载cron配置

systemctl start crond.service 启动cron

systemctl stop crond.service 停止cron

systemctl status crond.service 查看cron状态

一般情况,服务器cron默认开启

2、设置cron定时器任务

通过命令: crontab -e 创建cron任务文件,文件存放在 /var/spool/cron目录下。该目录独属于各用户的任务文件。例如:使用root账户登录,创建的文件名则为root,如下图所示

命令执行完毕后,会进入文件编辑模式,编辑文件。输入以下cron表达式进行测试

* * * * * echo "hello world" >>/tmp/hello.txt

完成后保存并退出。该表达式意思为每分钟输入“hello word”到tmp目录下的hello.txt文件中。

 3、以上测试没有问题后,停止cron服务。

使用命令vim /var/spool/cron/root。进入编辑模式对root文件进行修改。更改为如下:

0 1 * * * sh /usr/local/mysql/dbBakShell/lzfzMysqlBak.sh

(路径为你的lzfzMysqlBak.sh脚本的路径)

表达式意思为每天晚上1点执行lzfzMysqlBak.sh脚本

 4、重载cron配置,启动cron。

end。

 

posted @   xh_Blog  阅读(4470)  评论(1编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示