Docker初识:mysql 使用mysqldump定时备份数据库

时间:2025-04-01 10:28:53

一、说明

1、docker启动的mysql 容器:

[docker@iZ2ze7edxmvc77g249gzmmZ backup]$ docker ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                               NAMES
c66a9075448c        mysql                   "…"   13 months ago       Up 13 months        0.0.0.0:3306->3306/tcp, 33060/tcp   mysql

2、mysqldump

使用mysqldump对mysql 每天定时备份, 并删除7天以前的备份

3、备份脚本 mysql_dump.sh

#!/bin/bash
docker exec mysql mysqldump -uroot -p123456 cx | gzip > /opt/mysql/backup/cx_`date +%Y%m%d`.
send=`date '+%Y-%m-%d %H:%M:%S'`
if [ $? -ne 0 ];
then
    echo "$send 数据备份失败"
    exit -1
else
    echo "$send 数据备份成功!"
fi

find /opt/mysql/backup/ -mtime +7 -name 'cx_[1-9].sql' -exec rm -rf {} \;

脚本说明:

a、mysqldump备份命令

mysqldump -uroot -p123456 cx  > /opt/mysql/backup/cx_`date +%Y%m%d`.sql

b、删除7天以前的备份,根据情况保留

find /opt/mysql/backup/ -mtime +7 -name 'cx_[1-9].sql' -exec rm -rf {} \;

c、| gzip 备份的同时进行压缩

3、通过linux cron设置定时任务

crontab -e:
#每周日凌晨2点
00 02 * * 7 sh /opt/mysql/backup/mysql_dump.sh > /opt/mysql/backup/mysql_dump.log 2>&1

二、补充

1、举例说明。

一次性备份这个数据

mysqldump -uroot -p123456 --all-databases  > /opt/mysql/backup/all_`date +%Y%m%d`.sql

备份一个或多个数据库

mysqldump -uroot -p123456 test1 test2  > /opt/mysql/backup/all_`date +%Y%m%d`.sql

备份一张表student

mysqldump -uroot -p123456 test student > /opt/mysql/backup/test_student_`date +%Y%m%d`.sql

备份多张表student和grade

mysqldump -uroot -p123456 test student grade  > /opt/mysql/backup/test_student_grade_`date +%Y%m%d`.sql

利用循环备份多个数据库

#!/bin/bash
if [ ! -d $(date +%Y%m%d)  ];then
  mkdir $(date +%Y%m%d)
fi
for t in "test1" "test2" "test3"
do
mysqldump -uroot -proot123 $t | gzip > /opt/mysql/backup/$(date +%Y%m%d)/${t}_`date +%Y%m%d`.
if [ $? -ne 0 ];
then
    echo $t "数据备份失败"
else
    echo $t "数据备份成功!"
fi
done


随手用到,就随手记录一下。