docker利用mysqldump备份导出mysql容器中的数据

作者: 小新

发布于 2020-01-07 | 最后更新 2020-01-07


引言

数据库备份重中之重,那使用docker应该怎么样备份数据呢?

用法

查看Docker中运行的容器
docker ps

假如容器名是mysql_server

导出数据
docker exec -it  mysql_server mysqldump -uroot -proot test_db > /opt/sql_bak/test_db.sql

此时导入可能出现以下问题:

mysql: [Warning] Using a password on the command line interface can be insecure 

mysql从5.6版本后命令行方式直接写密码会提示不安全的。 可以在my.cnf内指定,于是打开我的my.cnf,在[mysqldump]下增加: vim /etc/mysql/my.cnf

[mysqldump]
user=your_backup_user_name
password=your_backup_password

修改完配置文件后, 只需要执行mysqldump 脚本就可以了;备份脚本中不需要涉及用户名密码相关信息;

docker exec -it  mysql_server mysqldump test_db > /opt/sql_bak/test_db.sql

压缩

备份的原始文件可能会很大,为了节省空间,我们在备份成功再进入压缩。压缩成功后直接删除原始文件。

cd /opt/sql_bak
tar -czvf test_db.tar.gz ./test_db.sql
rm -f ./test_db.sql

定时备份

  1. 把上面的命令全部集合到一个/yourpath/backup.sh文件里:

    # 数据库名
    db="test_db"
    # 保存路径
    path="/opt/sql_bak/$db"
    # 文件名
    name=$(date +%Y%m%d%H)
    # 判断目录是不是已经存在,如果不存在则创建
    if [ ! -d $path ]; then
    mkdir -p $path
    fi
    # 进入目录
    cd $path
    # docker 执行备份
    docker exec -it mysql mysqldump $db > ./$name.sql
    #压缩文件
    tar -czvf $name.tar.gz ./$name.sql
    #删除sql文件的
    rm -f ./$name.sql
    
  2. 使用crontab定时任务: 在夜里自动执行,此时系统负载不大。 在 12:01 a.m 运行,即每天凌晨过一分钟。 定时备份可以按时自己的需求进行调整。

    crontab –e
    1 0 * * * /yourpath/backup.sh
    

    结语

    这样就大功告成,定时自动备份数据库,以保证数据库万一出现问题,可以有备份还原。