当前位置 : 主页 > 操作系统 > centos >

Docker 下MySQL数据库的备份和恢复的操作方法

来源:互联网 收集:自由互联 发布时间:2023-03-17
目录 docker 备份和恢复: 恢复: 自动化备份mysql 设置定时任务 docker 最近迷恋使用doker容器,在docker容器进行部署MySQL,以前针对容器的安全性一直存在怀疑的态度,不过如果能够通过容
目录
  • docker
  • 备份和恢复:
  • 恢复:
    • 自动化备份mysql
  • 设置定时任务

    docker

    最近迷恋使用doker容器,在docker容器进行部署MySQL,以前针对容器的安全性一直存在怀疑的态度,不过如果能够通过容器也能数据库备份问题,就这样开始docker容器备份

    备份和恢复:

    第一种方式

    #全部备份
    [root@localhost home]# docker  exec  c_mysql sh -c 'exec mysqldump --all-databases -uroot -p123456 --all-databases' > /home/movice202302.sql
    #备份数据转移
    [root@localhost home]# docker cp /home/movice202302.sql salve-mysql:/var # salve-mysql 是容器 
    #全部恢复
    root@6faa12ee2d96:/# mysql -uroot -p123456 < /var/movice202302.sql
    
    #查看恢复数据库情况:
    mysql -uroot -p123456 -e 'drop database SCHOOL;'
    mysql -uroot -p123456-e 'SHOW DATABASES;'

    恢复:

    导出数据库的表结构和表数据
    mysqldump -uroot -pdbpasswd db_name >db.sql;

    [root@localhost home]# docker exec c_mysql sh -c 'exec mysqldump  -uroot -p123456 movice_fuli' > /home/movie0216.sql
    Warning: Using a password on the command line interface can be insecure.
    导出数据库表数据
    mysqldump -uroot -pdbpasswd -t db_name >db.sql;
    
    root@localhost home]# docker exec c_mysql sh -c 'exec mysqldump  -uroot -p123456 -t movice_fuli' > /home/movie.sql
    
    导出数据库表结构
    mysqldump -uroot -pdbpasswd -d db_name >db.sql;
    root@localhost home]# docker exec c_mysql sh -c 'exec mysqldump  -uroot -p123456 -d movice_fuli' > /home/movie.sql
    导出数据库中某个表的表结构
    mysqldump -uroot -pdbpasswd -d db_name table_name >db.sql
    root@localhost home]# docker exec c_mysql sh -c 'exec mysqldump  -uroot -p123456 -d movice_fuli user' > /home/movie.sql
    导出数据库中某个表的表结构和表数据
    mysqldump -uroot -pdbpasswd db_name table_name >db.sql;
    
    root@localhost home]# docker exec c_mysql sh -c 'exec mysqldump  -uroot -p123456  movice_fuli user' > /home/movie.sql

    自动化备份mysql

    1 创建目录/usr/data用于存放mysql的数据存放

    root@localhost ~]# cd /usr
    [root@localhost usr]# ls
    bin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp
    [root@localhost usr]# mkdir data
    [root@localhost usr]# ls
    bin  data  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp
    [root@localhost usr]# cd data
    [root@localhost data]# ls 
    [root@localhost data]# touch back_clean.sh 
    [root@localhost data]# touch backup .sh
    [root@localhost data]# mkdir logs
    [root@localhost data]# mkdir mysql_bak
    [root@localhost data]# ls
    back_clean.sh  backup  logs  mysql_bak
    [root@localhost data]# rm backup
    rm:是否删除普通空文件 "backup"?y
    [root@localhost data]# touch backup.sh
    [root@localhost data]# ls
    back_clean.sh  backup.sh  logs  mysql_bak

    2 编辑 备份脚本和清除大于给定期限的备份数据backup.sh,back_clearn.sh

    vi backup.sh
    
    BACKUP_ROOT=/usr/data/
    BACKUP_FILEDIR=$BACKUP_ROOT/mysql_bak
    #当前日期
    DATE=$(date +%Y%m%d)
    # 获取容器
    mysqlid=docker ps  -aqf "name=c_mysql"
    #查询所有数据库
    DATABASES=$(docker exec -i ${mysqlid}  mysql  -uroot -p123456 -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql")
    #循环数据库进行备份
    for db in $DATABASES
    do
    echo
    if [[ "${db}" =~ "+" ]] || [[ "${db}" =~ "|" ]];then
    echo "jump over ${db}"
    else
    echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz BEGIN----------
    docker exec -i ${mysqlid}  mysqldump -uroot -p123456 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B ${db} | gzip > $BACKUP_FILEDIR/${db}_$DATE.sql.gz
    echo ${db}
    echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz COMPLETE----------
    echo
    fi
    done
    
    echo "备份完成"
    vi back_clear.sh
    echo ----------CLEAN BEGIN----------
    find /usr/data/mysql_bak/ -mtime +7 -name "*.gz" -exec rm -rf {} \;
    echo ----------CLEAN COMPLETE---------

    设置定时任务

    利用Linux crontab 进行设置定时任务

    查看定时任务

    crotab -l

    修改定时任务

    crontab -e

    #每天02:00自动清理大于7天的mysql备份
    00 2 * * * /usr/data/backup_clean.sh > /usr/data/logs/backup_full_clean.log 2>&1
    
    #每天11:00自动备份mysql
    00 11 * * * /usr/data/backup.sh > /usr/data/logs/backup.log 2>&1

    到此这篇关于Docker 下MySQL数据库的备份和恢复的文章就介绍到这了,更多相关MySQL数据库的备份和恢复内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

    上一篇:linux中grep命令使用实战详解
    下一篇:没有了
    网友评论