Docker环境下的数据库备份——MySQL篇

时间:03/06/2024 09:25:29   作者:ChenReal    阅读:48

前面,我写了一篇文章,介绍了如何备份Docker环境下的PostgreSQL数据库。现在我将MySQL数据库相关的经验也一并介绍给大家吧。

虽然半年前,我就已经把我开发的所有应用的数据库,完成了从MySQL到PostgreSQL的迁移。但不能否认的是,MySQL仍是当今最受欢迎的开源数据之一,仍然有庞大的用户群体。我过往的一些经验,也许还能够帮助到大家。

同时,我在此特别向伟大的MySQL致敬。感谢她在过去的二十年里,陪伴着我一起奋斗一起成长。虽然因性能上原因我不得不抛弃她转投别的阵营。但在精神上,感情上,我们仍然是在一起的。

OK,一番“渣男宣言”讲完之后,我们直接进入正题。

一、安装

1、拉取Docker镜像

docker pull mysql:latest

2、新建目录

主要用于保存持久化数据及配置、日志等

## 数据目录
mkdir -p /var/docker/mysql/data
## 备份脚本及备份目录
mkdir -p /var/docker/mysql/backup/scripts
## 日志目录
mkdir -p /var/docker/mysql/logs
## 配置目录
mkdir -p /var/docker/mysql/conf

3、启动脚本

docker run -d --restart=always \
 --name mysql-server \
 -p 3306:3306 \
 -e MYSQL_ROOT_PASSWORD=12345678 \
 -v /var/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf:rw \
 -v /var/docker/mysql/logs:/var/log/mysql:rw \
 -v /var/docker/mysql/data:/var/lib/mysql:rw \
 -v /var/docker/mysql/backup:/var/db-backup:rw \
 -v /etc/localtime:/etc/localtime:ro \
 -d mysql

4、创建数据库

为了方便后续脚本测试,我们在此创建一个用户账号:testuser,然后在创建一个数据库:test_db。

## 进入docker容器
docker exec -it mysql-server bash

## 用户登录
mysql -uroot -p12345678

## 创建新用户
CREATE USER 'testuser'@'%' IDENTIFIED WITH caching_sha2_password BY '123456';

## 授权
grant all privileges on *.* to 'testuser'@'%';

FLUSH PRIVILEGES;

## 创建数据库并指定用户
create database test_db;

## 列出数据库
show databases;

## 退出mysql客户端
quit

## 退出docker容器
exit

二、备份脚本

1、创建脚本

此脚本是在docker容器内部执行的,因此必须放在备份目录中。

touch /var/docker/mysql/backup/scripts/backup-testdb.sh

打开刚才所创建的脚本文件backup-testdb.sh,写入以下内容:

# 备份数据库
backup_dir="/var/db-backup"
backup_file="testdb_$(date +%Y%m%d%H%M%S).dump"

# 定义数据库名和登录信息
db_name="test_db"
db_user="root"
db_pass="12345678"

# 备份数据库
/usr/bin/mysqldump -u$db_user -p$db_pass $db_name > $backup_dir/$backup_file

脚本中,我们使用到了mysql自带的mysqldump工具。如果想了解里面的命令参数,请到mysql官方网站查阅,我在此不做赘述了。

https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html

2、执行备份脚本

docker exec -it mysql-server bash -c "bash /var/db-backup/scripts/backup-testdb.sh"

注意:以上脚本路径是Docker容器内的路径,并非宿主系统的路径,请注意区分!

执行脚本后,生成的备份文件(*.dump),会出现在目录/var/docker/mysql/backup/下。

三、定时备份

在Linux系统上,如果希望设置定时任务执行以上脚本做数据备份,使用crontab服务应当是不二之选。

1、创建cron脚本

touch cron_script

打开文件cron_script,写入以下内容:

45 5 * * * docker exec -it mysql-server bash -c "bash /var/backup/pgsql/scripts/backup-testdb.sh"

以上cron表达式的意思是:每天的5点45分执行备份test_db数据库的脚本。

2、cron脚本注入服务中

## 将cron脚本注入到crontab服务中
crontab cron_script

## 查看crontab计划列表
crontab -l

四、最后对比一下MySQL与PostgreSQL

  • 空跑着的MySQL
  • 拖着6个应用在跑的PostgreSQL

来一场PK吧,敲下命令:

docker stats

不解释了,请自己看图吧。。

image.png

 

评论
0/200