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。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步