mysql-备份
将mysql数据库备份到...任何地方!
概述
mysql-backup是一种简单的方法来执行MySQL数据库备份和恢复,以及管理您的备份。
它具有以下功能:
- 转储和恢复
- 转储到本地文件系统或SMB服务器
- 选择数据库用户和密码
- 连接到同一系统上运行的任何容器
- 选择执行转储的频率
- 选择开始第一次转储的时间,无论是一天中的某个时间还是相对于容器启动时间
- 删除早于特定时间段或数量的备份
请查看CONTRIBUTORS.md获取贡献者列表。
版本
这是最新版本,基于2023年底完成的1.0.0版本的代码库完全重建,使用golang开发。
支持
可在databack Slack频道获得支持;在此处注册。我们在这里接受问题,并在Slack上回答常规支持问题。
如果您对商业支持感兴趣,请通过上面的Slack与我们联系。
运行mysql-backup
mysql-backup
既可作为单独的独立二进制文件使用,也可作为容器镜像使用。
备份
要运行备份,请使用正确的参数启动mysql-backup
- 作为容器或二进制文件。
例如:
docker run -d --restart=always -e DB_DUMP_FREQ=60 -e DB_DUMP_BEGIN=2330 -e DB_DUMP_TARGET=/local/file/path -e DB_SERVER=my-db-address -v /local/file/path:/db databack/mysql-backup dump
# 或
mysql-backup dump --frequency=60 --begin=2330 --target=/local/file/path --server=my-db-address
# 或通过unix域套接字以当前用户身份连接到本地mysqld
mysql-backup dump --frequency=60 --begin=2330 --target=/local/file/path --server=/run/mysqld/mysqld.sock
或mysql-backup --config-file=/path/to/config/file.yaml
,其中/path/to/config/file.yaml
是具有以下内容的文件:
server: my-db-address
dump:
frequency: 60
begin: 2330
target: /local/file/path
上述命令将每60分钟执行一次转储,从下一个本地时间2330开始,从容器my-db-address
中可访问的数据库进行转储。
docker run -d --restart=always -e DB_USER=user123 -e DB_PASS=pass123 -e DB_DUMP_FREQ=60 -e DB_DUMP_BEGIN=2330 -e DB_DUMP_TARGET=/db -e DB_SERVER=my-db-address -v /local/file/path:/db databack/mysql-backup dump
# 或
mysql-backup dump --user=user123 --pass=pass123 --frequency=60 --begin=2330 --target=/local/file/path --server=my-db-address --port=3306
有关执行备份的更详细说明,请参阅backup。
有关所有配置选项的详细列表,请参阅configuration。
恢复
要执行恢复,只需反向运行该过程。您仍然连接到数据库,但不是使用转储命令,而是传递恢复命令。您不传递转储目标,而是传递恢复目标。
转储恢复
如果您希望对现有数据库进行恢复,可以使用mysql-backup执行恢复。
您只需要以下环境变量:
您应该考虑使用--env-file=
来将您的密钥保存在shell历史记录之外
DB_SERVER
: 连接到数据库的主机名或unix域套接字路径(以斜杠开头)。必需。DB_PORT
: 用于连接数据库的端口。可选,默认为3306
DB_USER
: 数据库的用户名DB_PASS
: 数据库的密码DB_NAMES
: 要恢复的数据库名称,用空格分隔。如果SINGLE_DATABASE=true
,则必需。SINGLE_DATABASE
: 如果设置为true
,则DB_NAMES
是必需的,且必须只包含一个数据库名称。Mysql命令将使用--database=$DB_NAMES
标志运行。这避免了需要USE <database>;
语句,这在从使用SINGLE_DATABASE
设置为true
保存的文件恢复时很有用。DB_RESTORE_TARGET
: 实际恢复文件的路径,应该是压缩的转储文件。目标可以是应该挂载的绝对路径,smb或S3 URL,类似于目标。DB_DUMP_DEBUG
: 如果为true
,在恢复时向容器日志输出大量输出。- 要使用S3驱动程序,需要定义
AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
和AWS_DEFAULT_REGION
。
示例:
- 从本地文件恢复:
docker run -e DB_SERVER=gotodb.example.com -e DB_USER=user123 -e DB_PASS=pass123 -e DB_RESTORE_TARGET=/backup/db_backup_201509271627.gz -v /local/path:/backup databack/mysql-backup restore
- 使用ssl从本地文件恢复:
docker run -e DB_SERVER=gotodb.example.com -e DB_USER=user123 -e DB_PASS=pass123 -e DB_RESTORE_TARGET=/backup/db_backup_201509271627.gz -e RESTORE_OPTS="--ssl-cert /certs/client-cert.pem --ssl-key /certs/client-key.pem" -v /local/path:/backup -v /local/certs:/certs databack/mysql-backup restore
- 从SMB文件恢复:
docker run -e DB_SERVER=gotodb.example.com -e DB_USER=user123 -e DB_PASS=pass123 -e DB_RESTORE_TARGET=smb://smbserver/share1/backup/db_backup_201509271627.gz databack/mysql-backup restore
- 从S3文件恢复:
docker run -e DB_SERVER=gotodb.example.com -e AWS_ACCESS_KEY_ID=awskeyid -e AWS_SECRET_ACCESS_KEY=secret -e AWS_REGION=eu-central-1 -e DB_USER=user123 -e DB_PASS=pass123 -e DB_RESTORE_TARGET=s3://bucket/path/db_backup_201509271627.gz databack/mysql-backup restore
恢复特定数据库
如果您的数据库中有多个模式,您可以选择只恢复其中的一些。
要做到这一点,您必须使用DB_DUMP_BY_SCHEMA=true
转储数据库,然后使用DB_NAMES
指定要恢复的模式。
执行此操作时,模式将以其原始名称恢复。要使用其他名称恢复,您必须在转储和恢复时都使用SINGLE_DATABASE=true
,并且一次只能恢复一个模式。
示例:
- 转储多模式数据库并仅恢复其中一些:
docker run -e DB_SERVER=gotodb.example.com -e DB_USER=user123 -e DB_PASS=pass123 -e DB_DUMP_BY_SCHEMA=true -v /local/path:/backup databack/mysql-backup dump
docker run -e DB_SERVER=gotodb.example.com -e DB_USER=user123 -e DB_PASS=pass123 -e DB_RESTORE_TARGET=/backup/db_backup_201509271627.gz -e DB_NAMES="database1 database3" -v /local/path:/backup databack/mysql-backup restore
- 以不同名称转储和恢复模式:
docker run -e DB_SERVER=gotodb.example.com -e DB_USER=user123 -e DB_PASS=pass123 -e SINGLE_DATABASE=true -e DB_NAMES=database1 -v /local/path:/backup databack/mysql-backup dump
docker run -e DB_SERVER=gotodb.example.com -e DB_USER=user123 -e DB_PASS=pass123 -e DB_RESTORE_TARGET=/backup/db_backup_201509271627.gz -e SINGLE_DATABASE=true DB_NAMES=newdatabase1 -v /local/path:/backup databack/mysql-backup restore
有关执行恢复的更详细说明,请参阅restore。
有关所有配置选项的详细列表,请参阅configuration。
许可证
根据MIT许可证发布。 版权所有 Avi Deitcher https://github.com/deitch