美文网首页
Centos中使用脚本备份docker中的mysql - 以及恢

Centos中使用脚本备份docker中的mysql - 以及恢

作者: zhanglb12 | 来源:发表于2022-03-30 22:10 被阅读0次

    备份数据库脚本mysql_backup_docker_dbname.sh

    #!/bin/bash
    # 设置mysql的登录用户名和密码(根据实际情况填写)
    mysql_user="root"
    mysql_password="root&"
    mysql_host="6.135.32.78"
    mysql_port="3306"
    mysql_charset="utf8mb4"
    mysql_database="db_name"
    mysql_docker_name="mysql_docker"
    
    # export MYSQL_PWD=${mysql_password}
    
    # 备份文件存放地址(根据实际情况填写)
    backup_location=/mysql-backup/dbname
    
    #如果文件夹不存在,创建文件夹
    if [ ! -d $backup_location ]; then
      mkdir $backup_location
    fi
    
    
    # 是否删除过期数据
    expire_backup_delete="OFF"
    expire_days=30
    backup_time=`date +%Y%m%d%H%M`
    backup_dir=$backup_location
    backup_file_name=$mysql_database"_"$backup_time".sql"
    backup_file_name_zip=$mysql_database"_"$backup_time".sql.gz"
    welcome_msg="Welcome to use MySQL backup tools!"
    
    # 加上参数 -t 在定时任务中 不执行
    # 备份指定数据库中数据(此处假设数据库是mysql_backup_test)
    # docker exec -i mysql_docker mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -B $mysql_database > $backup_dir/mysql_backup_test-$backup_time.sql
    # 正常备份
    #   docker exec -i $mysql_docker_name mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password --default-character-set $mysql_charset --databases $mysql_database > $backup_dir/$backup_file_name
    # 压缩 备份
    docker exec -i $mysql_docker_name mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password --default-character-set $mysql_charset --databases $mysql_database  | gzip> $backup_dir/$backup_file_name_zip
    
     
    # 删除过期数据
    if [ "$expire_backup_delete" == "ON" -a  "$backup_location" != "" ];then
            `find $backup_location/ -type f -mtime +$expire_days | xargs rm -rf`
            echo "Expired backup data delete complete!"
    fi
    

    可以执行一下脚本看看 mysql_backup_file 文件会不会有备份出来的sql文件

    执行脚本命令 - (这个报错是说 数据库密码明文显示不安全,没关系)

    cd 到脚本目录下

    执行命令

    sh  mysql_daybackup.sh
    

    看到备份出来

    使用crontab 进行定时备份 每天备份一次

    #新建定时任务命令
    crontab -e
    #查看定时任务命令
    crontab -l
    #删除所有定时任务命令
    crontab -r
    

    crontab定时命令
    crontab -e

    编辑 定时任务表 添加下面内容

    每5分钟执行一次

    */5 * * * * sh /mysql-backup/mysql_backup_docker_dbname.sh

    每天的 2:05 执行

    5 2 * * * sh /mysql-backup/mysql_backup_docker_dbname.sh

    在 crontab 命令中只有 “绝对路径”,不存在相对路径,故执行任何命令都需要写绝对路径

    1、每小时的第5分钟执行 ls 命令

    5 * * * * ls

    2、每5分钟执行 ls 命令

    */5 * * * * ls

    3、每天的 4:30 执行 ls 命令

    30 4 * * * ls

    4、每小时执行 ls 命令

    0 * * * * ls

    5、每天执行 ls 命令

    0 0 * * * ls

    可以使用命令查看定时任务
    crontab -l

    然后重启crontab服务

    service crond restart
    systemctl restart crond
    

    恢复命令(这个报错是说 数据库密码明文显示不安全,没关系)

     docker exec -i docker容器ID mysql -uroot -p数据库密码 -D 需要恢复的数据库名 < ./20210903_对应的备份好的数据库名.sql
    

    把备份好的sql 减压后 db_name_20220331.sql

    执行下面的命令

    docker exec -i docker容器名或ID sh -c 'exec mysql -h8.120.152.117 -P3306 -uroot -p"root&"'  -D 需要恢复的数据库名 < /mysql-backup/db_name_20220331.sql
    

    错误排查

    错误1

    添加定时任务crontab -e时出现了

    no crontab for chenrui - using an empty one
    No modification made
    

    chenrui是我机器的名字,也就是当前用户的username

    解决方法是,根据你的系统确定系统的编辑器是什么。
    我的是vim,那么解决方法是:切换到root用户,终端输入

    export EDITOR=vim
    

    如果是emacs,切换到root用户,终端输入

    export EDITOR=emacs
    

    如果是nano,切换到root用户,终端输入

    export EDITOR=nano
    

    知道解决方法后,这个错误的原因是,系统没有指定默认的编辑器。上面的命令也就是选择一个默认编辑器就可以了。
    再此执行crontab -e。

    错误2

    在linux下修改crontab,新增了一个定时任务,保存后报以下错误:
    errors in crontab file, can’t install

    检查发现是新增的定时任务格式不对,在每天8:30执行某个sh脚本的crontab命令本来应该是这样:

    30 8 * * * sh脚本
    

    相关文章

      网友评论

          本文标题:Centos中使用脚本备份docker中的mysql - 以及恢

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