Linux下实现MySQL的自动备份

目录

 

一、说明

二、原生环境

1.创建shell脚本文件

2.验证脚本是否可用

3.把脚本文件添加到crontab

三、Docker环境

1.在MySQL容器内添加自动备份脚本并执行计划

2.在Linux系统下添加一个复制脚本并执行计划

四、参考链接


一、说明

上一篇文章介绍了Windos环境下的数据库(MySQL)备份,这篇文章介绍Linux下数据库备份。Linux系统数据库安装有两种情况,分别为原生环境和Docker环境:原生环境指数据库直接安装在系统中;Docker环境指MySQL作为容器安装。

自动备份实现方式为:脚本+crontab定时任务。

原生环境安装MySQL:https://www.runoob.com/mysql/mysql-install.html

Docker环境安装MySQL:https://www.runoob.com/docker/docker-install-mysql.html

注:以上两篇文章,本人未做验证,仅供参考。

Linux版本:

MySQL版本:

二、原生环境

1.创建shell脚本文件

[root]# vim /usr/sbin/mysqlbak.sh

mysqlbak.sh脚本内容如下:

#!/bin/bash

# 保存的目录
data_dir="/backup/mysql"
# 保存文件的名字,注意date是用#倒引号#包起来的 
data_name="bak_`date +%Y%m%d%H`.sql"

if [ ! -d $data_dir ]; then
  mkdir -p $data_dir
fi

# mysqldump备份命令
# -uroot   用户名
# -p123456 密码
# talentpool_lg 数据库名称
mysqldump -uroot -p123456 talentpool_lg > $data_dir/$data_name

# 删除7天前的备份文件
find $data_dir -name "bak_*.sql" -type f -m +7 -exec rm -rf {} \;

2.验证脚本是否可用

[root]# sh /usr/sbin/mysqlbak.sh   #执行shell脚本
[root]# cd /backup/mysql           #进入备份目录
[root]# ls -l                      #查看是否有备份文件

3.把脚本文件添加到crontab

crontab的命令可参考:https://www.runoob.com/linux/linux-comm-crontab.html

[root@JD ~]# date                            #查看当前系统时间
Thu Jun 20 11:47:55 CST 2019       
[root@JD ~]# crontab -e                      #进入编辑界面
>50 11 * * * sh /usr/sbin/mysqlbak.sh
crontab: installing new crontab
[root@JD ~]# crontab -l                      #查看内容
50 11 * * * sh /usr/sbin/mysqlbak.sh
[root@JD ~]# /usr/sbin/crond restart         #重启cron服务
crond: can't lock /var/run/crond.pid, otherpid may be 9051: Resource temporarily unavailable
[root@JD ~]# sudo rm -rf /var/run/crond.pid  #针对以上报错,执行此命令
[root@JD ~]# /usr/sbin/crond restart         #再次重启cron服务
[root@JD ~]# cd /backup/mysql                #过设定的备份时间(11:50)后进入备份目录
[root@JD mysql]# ls                          #查看是否有备份文件
bak_2019062011.sql

三、Docker环境

Docker下的MySQL自动备份,原理与原生一致,区别在于,脚本写在容器内部,cron计划在容器内执行,备份文件也保存在容器目录下。

1.在MySQL容器内添加自动备份脚本并执行计划

[root]# docker ps
CONTAINER ID     IMAGE           COMMAND           CREATED      STATUS  PORTS   NAMES                                             
b47f1cb38e21  mysql:5.6.40  "docker-entrypoint.s…" 9 days ago  Up 2 hours   new_mysql
[root]# docker exec -it new_mysql bash          #进入mysql容器
# apt-get update && apt-get install vim         #安装vim
# apt-get update && apt-get install cron        #安装cron
# vim /usr/sbin/dockerbak.sh

//---dockerbak.sh脚本内容开始---//
!/bin/bash
data_dir="/backup/mysql"
data_name="bak_`date +%Y%m%d%H`.sql"

if [ ! -d $data_dir ]; then
  mkdir -p $data_dir
fi

mysqldump -uroot -p123456 talentpool_lg > $data_dir/$data_name

find $data_dir -name "bak_*.sql" -type f -mtime +7 -exec rm -rf {} \;
//---dockerbak.sh脚本内容结束---//

//验证脚本是否可用
# sh /usr/sbin/dockerbak.sh                     #直接执行脚本
# cd /backup/mysql                              #进入备份目录
# ls -l                                         #查看目录下文件

//添加脚本到crontab
# crontab -e                                    #添加脚本到crontab
> 30 23 * * * sh /usr/sbin/dockerbak.sh         #设定为每天23:30备份
# crontab -l                                    #查看crontab内容
> 30 23 * * * sh /usr/sbin/dockerbak.sh
# service cron status                           #查看cron状态
>[FAIL] cron is not running ... failed!
# service cron start                            #启动cron
>[ ok ] Starting periodic command scheduler: cron.
# service cron status                           #再次查看cron状态
>[ ok ] cron is running.
 

注意查看容器时间与系统时间是否一致,时间不一致会导致计划不生效。同步时间方法如下,同步之后重启容器生效。

//同步主机与容器时间的命令,new_mysql为容器名(还可使用容器ID)
[root]# docker cp /etc/localtime new_mysql:/etc/
//重启容器
[root]# docker restart $(docker ps -a -q)
//重启之后,容器的cron服务可能会关闭,再次开启一下
[root]# docker exec -it new_mysql bash
# service cron restart
# exit

2.在Linux系统下添加一个复制脚本并执行计划

 因为备份的文件保存在容器内,不方便查看,可在Linux添加一个复制脚本,把备份文件复制到主机目录下。

[root]# vim /usr/sbin/copybak.sh          #创建复制脚本
//---copyback.sh脚本开始---//
>docker_name=new_mysql
>data_dir="/backup/mysql"
>data_name="bak_`date +%Y%m%d%H`.sql"
>
>if [ ! -d $data_dir ]; then
>  mkdir -p $data_dir
>fi
>
>docker cp $docker_name:$data_dir/$data_name $data_dir
>find $data_dir -name "bak_*.sql" -type f -mtime +7  -exec rm -rf {} \;
//---copyback.sh脚本结束---//

[root]# crontab -e                        #把脚本添加到crontab
40 23 * * * sh /usr/sbin/copybak.sh       #定时备份时间为:23:30,定时复制时间设为:23:40
[root]# # /usr/sbin/crond restart         #重启cron服务    
[root]# sudo rm -rf /var/run/crond.pid    #直接重启会报错,先执行这个命令
[root]# # /usr/sbin/crond restart         #重启cron服务

四、参考链接

1.https://blog.csdn.net/qq_32684319/article/details/86996369

2.https://blog.csdn.net/MR1269427885/article/details/82978311

3.https://www.jianshu.com/p/be1e581acb8e

4.https://www.cnblogs.com/taomylife/p/8022253.html

5.https://blog.csdn.net/stonexmx/article/details/72974500

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡卡木樨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值