您现在的位置是:博客 > 文章详情文章详情
Mysql 定时备份(mysql-backup)
一、前言
如果想每天定时备份MySQL数据库,一般情况下可以使用以下两种方法:
1. 使用MySQL自带的命令:
打开终端或命令提示符,登录到MySQL服务器。
使用以下命令创建一个备份:
mysqldump -u 用户名 -p 数据库名 > 备份文件名.sql
将”用户名”替换为你的MySQL用户名,”数据库名”替换为要备份的数据库名称,”备份文件名”替换为你要创建的备份文件名。- 执行该命令后,它会要求你输入密码。输入密码后,命令将执行并创建备份文件。
2. 使用第三方工具:
你可以使用一些第三方工具来自动化MySQL数据库的备份过程。其中一些工具包括:
mysqldumper:一个功能强大的MySQL备份工具,可以创建完整的数据库备份,并支持增量备份和定时备份。
mysql-backup:一个简单易用的MySQL备份工具,支持定时备份和压缩备份文件。
Percona XtraBackup:一个开源的MySQL备份工具,可以创建一致性的备份,支持定时备份和增量备份。这些工具通常提供了更丰富的功能和灵活性,可以满足各种备份需求。你可以根据自己的需求选择其中一个工具,并按照其文档进行配置和使用。
二、mysql-backup
本章节主要介绍使用 mysql-backup
的备份方案。
mysql-backup 它具有以下特点:
- 转储和恢复
- 转储到本地文件系统或SMB服务器
- 选择数据库用户和密码
- 连接到在同一系统上运行的任何容器
- 选择运行转储的频率
- 选择何时开始第一次转储,无论是一天中的时间还是相对于容器启动时间
1、mysql-backup 开源地址
https://github.com/databacker/mysql-backup
2、镜像地址
https://hub.docker.com/r/databack/mysql-backup
3、备份计划
有几个选项可以安排备份的运行频率:
RUN_ONCE
:只运行一次就退出 【优先级最高】DB_DUMP_CRON
:按照计划运行 【优先级次之】DB_DUMP_FREQ 和 DB_DUMP_BEGIN
:每x分钟运行一次,并在特定时间运行第一个 【优先级最低】
4、镜像环境变量
DB_SERVER
:连接到数据库的主机名。必填的DB_PORT
:用于连接数据库的端口。可选,默认为3306DB_USER
:数据库的用户名DB_PASS
:数据库密码DB_NAMES
:要转储的数据库名称(以空格分隔);如果 SINGLE_DATABASE=true 则为必需,否则无效。虽然名称是复数,但它必须只包含一个库名。DB_NAMES_EXCLUDE
:要从转储中排除的数据库名称(以空格分隔);information_schema. performance_schema,sys并且mysql默认情况下被排除在外。这仅适用于DB_DUMP_BY_SCHEMA设置为true。比如你设置DB_NAMES_EXCLUDE=database1 db2然后DB_DUMP_BY_SCHEMA=true这两个数据库不会被mysqldump转储SINGLE_DATABASE
:如果设置为true,mysqldump 命令将不带—databases标志运行。此避免USE <database>;语句对于要将转储文件导入具有不同名称的数据库的情况很有用。DB_DUMP_FREQ
:多久做一次转储,以分钟为单位。默认为 1440 分钟(每天一次)。DB_DUMP_BEGIN
:什么时候做第一次dump。默认为立即。必须是以下两种格式之一:- 绝对:HHMM,例如2330或0415
- 相对:+MM,即启动容器后多少分钟,例如+0(立即),+10(10分钟内),或+90一个半小时内
DB_DUMP_CRON
:使用标准 crontab 语法设置转储计划,单行。RUN_ONCE
:运行一次备份,如果RUN_ONCE设置则退出。如果您使用外部调度程序(例如,作为 Cattle 或 Docker Swarm 或kubernetes cron 作业等编排解决方案的一部分)并且不希望容器在内部进行调度,则很有用。如果您使用此选项,则所有其他计划选项(如DB_DUMP_FREQandDB_DUMP_BEGIN和DB_DUMP_CRON)都将过时。DB_DUMP_DEBUG
:如果设置为true,则将大量的 shell 脚本消息打印到容器日志中。否则只打印基本消息。DB_DUMP_TARGET
:转储文件放在哪里,应该是一个目录。支持四种格式:- Local:如果值DB_DUMP_TARGET以字符开头/,将转储到本地路径,该路径应该是卷挂载的。
- SMB:如果 的值DB_DUMP_TARGET是格式的 URL,smb://hostname/share/path/那么它将通过 SMB 连接。
- S3:如果 的值DB_DUMP_TARGET是格式的 URL,s3://bucketname/path那么它将通过 awscli 连接。
- 多个:如果 的值DB_DUMP_TARGET包含多个目标,则目标应该用空格分隔,值用引号括起来,例如”/db s3://bucketname/path”
DB_DUMP_SAFECHARS
: 转储文件名通常包含:日期中的字符,以符合 RFC3339。一些系统和 shell 不喜欢这个字符。如果设置了此环境变量,它将全部替换:为-.AWS_ACCESS_KEY_ID
:AWS 密钥 IDAWS_SECRET_ACCESS_KEY
: AWS 秘密访问密钥AWS_DEFAULT_REGION
: 存储桶所在区域AWS_ENDPOINT_URL
:为 s3 互操作系统指定一个替代端点,例如 DigitaloceanAWS_CLI_OPTS
:要传递给命令aws部分的附加参数aws s3 cp,单击此处查看列表。AWS_CLI_S3_CP_OPTS
:要传递给命令s3 cp部分的附加参数aws s3 cp,单击此处查看列表。如果您使用的是 AWS KMS sse,sse-kms-key-id可能会感兴趣。SMB_USER
:SMB 用户名。也可以DB_DUMP_TARGET用smb://url 指定。如果同时指定,此变量将覆盖 URL 中的值。SMB_PASS
:SMB 密码。也可以DB_DUMP_TARGET用smb://url 指定。如果同时指定,此变量将覆盖 URL 中的值。COMPRESSION
:压缩使用。支持的是:(gzip默认),bzip2DB_DUMP_BY_SCHEMA
:是在压缩文件 ( true) 中为每个模式使用单独的文件,还是使用单个转储文件 ( false)。默认为falseDB_DUMP_KEEP_PERMISSIONS
:是否保留文件目标的权限。默认情况下,mysql-backup将备份压缩文件复制到使用cp -a. 在具有某些权限的某些文件系统中,这可能会导致错误。您可以通过设置禁用-a标志DB_DUMP_KEEP_PERMISSIONS=false。默认为true.MYSQLDUMP_OPTS
:传递给的选项字符串mysqldump,例如MYSQLDUMP_OPTS=”—opt abc —param def —max_allowed_packet=123455678”将运行mysqldump —opt abc —param def —max_allowed_packet=123455678
NICE
:true 使用 ionice 和 nice 选项执行 mysqldump:- 检查更多信息:TMP_PATH
:在备份创建和其他操作期间要使用的 tmp 目录。可选,默认为/tmp
5、权限
默认情况下,备份/恢复过程不以root身份运行(UID O)。只要有可能,您应该以root以外的用户身份运行进程(不仅仅是在容器中)。在这种情况下,它以UID/GID 1005的用户名appuser运行。
在这种情况下,您有两个选择:
- 以root身份运行容器,docker run—user 0…或者,在idocker-comp. yml中,user:”0”
- 确保挂载的目录可写为UID或GID 1005。
三、实战 mysql-backup
语法
docker run -d --restart=always \ # 自启
--user 0 \ # 使用 root 权限运行
--name=mysql-backup \ # 容器名称
-v /root/mysqlback:/data/backup/mysql \ # 将备份文件挂载出来
-e DB_DUMP_FREQ=1440 \ # 多久备份一次
-e DB_DUMP_TARGET=/data/backup/mysql \ # 备份文件存放目录(容器内的目录)
-e DB_SERVER=数据库IP \ # 数据地址
-e DB_PORT=数据库端口 \ # 数据库端口
-e DB_USER=用户名 \ # 用户名
-e DB_PASS="password" \ # 密码
-e DB_NAMES=数据库名 \ # 需要备份的数据库名称
-e DB_DUMP_BEGIN=+0 \ # 立即备份
databack/mysql-backup:latest
(1)、单个数据库立即备份
docker run -d --restart=always \
--user 0 \
-v /root/mysqlback:/data/backup/mysql \
--name=mysql-backup-59 \
-e DB_DUMP_FREQ=1440 \
-e DB_DUMP_TARGET=/data/backup/mysql/db-59 \
-e DB_SERVER=10.1.20.59 \
-e DB_PORT=**** \
-e DB_USER=**** \
-e DB_PASS="*****" \
-e DB_NAMES=cwcssims \
-e DB_DUMP_BEGIN=+0 \
databack/mysql-backup:latest
结果:
(2)、多数据库定时备份,17:00 备份
注意:这里会有存在一个时区问题, 中国和UTC相差8个小时。中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、马来西亚、菲律宾、西澳大利亚州的时间与UTC的时差均为+8,也就是UTC+8。所以
DB_DUMP_BEGIN
填写的值要比实际时间小8小时。
docker run -d --restart=always \
--user 0 \
-v /root/mysqlback:/data/backup/mysql \
--name=mysql-backup-59 \
-e DB_DUMP_FREQ=1440 \
-e DB_DUMP_TARGET=/data/backup/mysql/db-59 \
-e DB_SERVER=10.1.20.59 \
-e DB_PORT=**** \
-e DB_USER=**** \
-e DB_PASS="*****" \
-e DB_NAMES="cwcssims cwcstest22222" \
-e DB_DUMP_BEGIN=0900 \
databack/mysql-backup:latest
(3)、DB_DUMP_CRON 自定义备份
有些时候,我们想 每周六晚上 10点运行 ,类似这种比较特殊的计划就需要使用 DB_DUMP_CRON
的备份策略了, 因为另外两种有些局限性。
具体语法请看:crontab命令语法规则
为了方便测试, 这里运行的计划规则是一个小时备份一次
docker run -d --restart=always \
--user 0 \
-v /root/mysqlback:/data/backup/mysql \
--name=mysql-backup-59 \
-e DB_DUMP_FREQ=1440 \
-e DB_DUMP_TARGET=/data/backup/mysql/db-59 \
-e DB_SERVER=10.1.20.59 \
-e DB_PORT=3306 \
-e DB_USER=**** \
-e DB_PASS="*****" \
-e DB_NAMES="cwcssims cwcstest22222" \
-e DB_DUMP_CRON="0 * * * *" \
databack/mysql-backup:latest
执行日志:
[root@2653423094 mysqlback]# docker logs -f 3e17d2842222
Starting at Mon Sep 25 03:55:34 UTC 2023
./
./backup_2023-09-25T04:00:34Z.sql
执行结果:
四、还原数据备份
还原数据备份请看另外一篇文章《mysql-backup 恢复备份的数据库》
目录
推荐阅读
-
.net 项目发布中的 Debug和Release的区别是什么?
![.net 项目发布中的 Debug和Release的区别是什么?](/ArticleFile/2023-09-09/93b4042444ff40aba6e7c913250e425f.png '.net 项目发布中的 Debug和Release的区别是什么?') 一、Debug 版本 Debug 是“调试”的意思,
-
Vs2022 设置类、接口默认创建的模板
一、前言 在团队协作中,每个人都负责这自己模块的代码。为了清楚的分辨代码是谁开发的, 我们往往会在类、接口增加一个额外的注释信息,例如:创建人、创建时间、描述等等。所以有些时候,我们希望 visual Studio 在创建类,接口的时候,生成的代码文件能更丰富一下, 例如:自动增加基础的注释功能, 类文件自动增加 p
-
如何使用 vs 2022 远程调试 Linux系统中的Docker容器项目
一、前言 在项目上,总会遇到一些奇怪的问题,例如:“在本地好好的, 为什么部署到线上就不行” 等等,这样的问题时长困扰着我们。但是作为一个资深的码农,“远程调试” 是一个不可或缺的手段。下面就来看下如果使用 vs 在本地远程调试部署在Linux系统中,运行在Docker容器中的项目吧。 二、远程调试 调试的前提,
-
移除Linux系统启动时的等待时间
一、前言 VMware 虚拟机中安装了很多Linux 系统,每次启动的时候, 都卡在系统选择的界面上,除非手动选择, 否则要等很久才会进入系统,如下图所示: ![移除Linux系统启动时的等待时间](/ArticleFile/2024-06-24/e3ab02212cc946bd9c23159895177fb3.png '移除Linux系统启动时的等待时间') 二、关闭系统等待的事件 我们
-
GitLab 私有化部署
一、GitLab 概述 git作为目前最流行的代码管理工具,已经成为了程序员必备的技能。虽然目前有 github(对国人不太友好) 、gitee 两个比较大的代码托管平台。但是出于各种原因,搭建自己的私有代码平台也成了一部分开发人员的选择。针对这种需求,这里为大家介绍的是其中的佼佼者gitlab,也是我们公司内部正在使用的一个代码管理平台。 GitLab是一个基于Git的开源代码管理平台,它
-
云服务器购买按量付费实例,并搭建私有网络图解
一、前言 最近在自学 k8s 集群化部署, 奈何云服务器包年包月太贵了, 学习成本飙升。好在各大云服务商支持按量计费 , 接下来就带大家一起过一下购买流程,并且使用私有网络。 二、私有网络 在购买云服务器之前,先了解下什么是私有网络。官网给出的解释是:私有网络(Virtual Private Cloud,VPC)是一块在云服务器上自定义的逻辑隔离网络空间,可以使云服务器, 云数据库资源构建逻
-
Docker 部署FastTunnel,实现内网穿透
一、前言 最近在学习搭建Elasticsearch集群,但是发现云服务(2核4G)资源根本就不够用,部署上去就直接宕机了。想着服务器资源太贵, 家里刚好有一台64G内存的闲置电脑。不如做一个内网穿透,可以远程访问。工作学习两不误。其实目前市面上已经有很多穿透工具了,比如向日葵~~ ,但是奈何带宽太小了,免费的才1M~~~ 二、什么是 FastTunnel FastTunnel 是用.net
-
IP地址和子网掩码的关系
一、概述 IP地址(Internet Protocol Address)和子网掩码(Subnet Mask)是计算机网络中两个核心的概念,它们共同工作以确保数据能够正确地在复杂的网络环境中传输到目标设备。 二、IP地址 `IP地址`是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。它是一个32位的二进制数,但是在习惯上,我们
-
修改Docker默认的存储驱动程序目录
一、前言 今天使用jenkins对程序进行更新的时候,发现更新失败。经排查是因为系统磁盘满了,然而通过堡垒机看了下,系统空间还有很多,于是看了下系统分区: ![修改Docker默认的存储驱动程序目录](/ArticleFile/2024-06-06/444ede8a1b1b42058db18690fa995952.png '修改Docker默认的存储驱动程序目录') ![修改Docker默认
-
Windows 安装git的详细安装步骤 ,以及TortoiseGit 图形化工具
一、前言 `Git` 是一个开源的分布式版本控制系统,用于有效、高速地处理从很小到非常大的项目版本管理。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不需要服务器端软件支持。 二、安装Git 1、Git 下载地址 [Git 下载地址](https://git-scm.com/downloads "Git 下载地址") ![Windows
全部评论(2 条)
逍遥剑仙
感谢,刚好要了解这个, 讲解的很清楚。