cytopia/mysqldump-secure

带加密、压缩、日志记录、黑名单和Nagios监控集成的安全mysqldump脚本

0.16.5 2022-03-23 13:34 UTC

README

注意

请升级到最新版本,以便在受影响的情况下通知您关于 OpenSSL SMIME Bug

GIT 注意

通过Git克隆时,务必始终检出最新的标签。由于 MASTER 分支始终处于开发中,因此是不稳定的。

特性 | 安装 | 配置 | 使用 | 文档 | 贡献 | 许可证 | 版本

Build Status Latest Stable Version Total Downloads Latest Unstable Version License POSIX Type

Mysqldump-secure 是一个符合POSIX规范的 mysqldump 包装脚本,具有许多特性,并注重非常强的安全性。它将备份每个可用的数据库(由指定的用户可读)作为单独的文件,并可通过黑名单选择退出。可以可选地将导出的数据库直接管道传输到gzip或openssl以压缩和/或加密备份。加密在文件写入磁盘之前完成,以避免可能的竞争条件(有关安全措施更多信息,请参阅文档)。

项目网站: https://mysqldump-secure.org 整个帖子: https://www.everythingcli.org

运行在

FreeBSD RedHat CentOS Debian ArchLinux Ubuntu OSX

(如果脚本在未在此处提及的其他系统上运行,请给我发个消息。)

稳定可靠且经过充分测试

每次向 mysqldump-secure 推送都会触发 travis-ci,它会针对新代码运行数百种各种测试,并以各种可能的配置以各种可能的方式对工具进行压力测试。

您可以在 test 文件夹中找到测试,包括用于设置具有SSL加密的主从服务器的自动化设置。这些测试也可以在本地运行。

有关检查操作,请参阅 https://travis-ci.org/cytopia/mysqldump-secure,有关测试的描述,请参阅 test

1. 特性

主要特性

  • 加密(混合加密:RSAAES 通过 openssl smime - 不需要密码)
  • 压缩gzippigzbzip2pbzip2lzoplzmaxz
  • 集成tmpwatchtmpwatchtmpreaper
  • 事务安全 / 一致的 表级备份(适用于具有:InnoDB仅混合非InnoDB 表的数据库)
  • 条件性mysqldump选项(例如:仅在数据库 > 200MB 时应用 --quick
  • 安全性(各种内置检查和预防措施)
  • SSL远程备份
  • Nagios / Icinga 监控集成(通过 check_mysqldump-secure

次要功能

  • 自定义mysqldump选项
  • 主/从识别
  • 黑名单
  • 白名单
  • 文件日志
  • 自我验证
  • 非常稳定(参见travis上的数百次检查)
  • 100% POSIX兼容

2. 安装

2.1 Linux、BSD和OSX

wget https://github.com/cytopia/mysqldump-secure/archive/0.16.5.tar.gz -O - | tar -xz
cd mysqldump-secure
./configure
make
sudo make install

2.2 OSX

brew tap cytopia/tap
brew install mysqldump-secure

有关更详细的说明,请参阅 安装指南

3. 配置

有两个单独的配置文件

第一个用于设置MySQL凭据,第二个用于配置备份数据库的行为。

您无需担心文件权限或目录。脚本将自动检查以下选项并根据需要调整它们

  • 日志文件存在
  • 日志文件可写
  • 自动创建日志文件
  • 自动关闭日志记录
  • 目标目录存在
  • 目标目录可写
  • 自动创建目标目录
  • 必需的系统二进制文件存在
  • MySQL凭据有效

有关更详细的说明,请参阅 设置指南

4. 使用方法

4.1 使用方法

Usage: mysqldump-secure [--conf] [--cron] [--test] [-v[v]]
       mysqldump-secure --help
       mysqldump-secure --version

When invoked without any arguments, it will start dumping databases as
defined in mysqldump-secure.conf.

  --conf          Pass a different configuration file than the default one.
                  E.g.: --conf=/etc/mysqldump-secure-alt.conf

  --cron          Use for cron run. It will only output errors and warnings
                  and will silence all info, debug and trace output.

  --test          Test requirements and exit.
                  Combine with -v or -vv for more verbose output.

  -v              Show debug output.
                  Specify twice (-vv) to also show trace output.
                  Can be combined with --conf  and --test

  -vv             Show debug and trace output.
                  Can be combined with --conf  and --test

  --help          Show this help screen.

  --version       Show version information.


Exit codes

  0               All fine, no fatals, no errors and no warnings occured.
  1               Warnings occured, but all dumps were successfull.
  2               Errors occured, but all dumps were successfull.
  3               Failed. Mysqldump encountered errors.
  4               Abort. The program aborted, due to missing requirements,
                  wrong arguments or a misconfiguration.

Further reading

See 'man mysqldump-secure' for more help.
Visist http://mysqldump-secure.org and browse documentation.

4.2 默认设置

测试是否正确配置了所有设置

mysqldump-secure --test -vv

从命令行手动运行

mysqldump-secure -v

从cron中运行

mysqldump-secure --cron

4.3 自定义配置

通过不同的配置文件,可以在您的机器上拥有多个 mysqldump-secure 实例。想象一下您想加密一些敏感的转储,而其他应该以纯文本形式转储。您可以通过使用两个配置文件以及每个相应配置的 IGNORE 块来排除其他文件来实现这一点。

测试指定配置中是否正确配置了所有设置

mysqldump-secure --test --config=/etc/mysqldump-secure.encrypted.conf

从命令行手动运行

mysqldump-secure --config=/etc/mysqldump-secure.encrypted.conf

从cron中运行

mysqldump-secure --cron --config=/etc/mysqldump-secure.encrypted.conf

4.4 测试运行

$ mysqldump-secure --test -v
[INFO]  (OPT): Logging enabled
[DEBUG] (OPT): Log level: 3
[DEBUG] (OPT): Logfile: /var/log/mysqldump-secure.log
[DEBUG] (CFG): Destination dir: /var/mysqldump-secure
[DEBUG] (CFG): Using file Prefix: 2016-03-09_10-07__
[INFO]  (OPT): MySQL SSL connection enabled
[DEBUG] (OPT): MySQL SSL arguments: --ssl-ca=/etc/mysql.ca.pem.
[INFO]  (OPT): Compression enabled
[DEBUG] (OPT): Compression arguments: gzip -9 --stdout
[INFO]  (OPT): Encryption enabled
[DEBUG] (OPT): Encryption algorithm: -aes256
[INFO]  (OPT): Deletion enabled
[DEBUG] (OPT): Deleting files older than 2 days. Using: tmpwatch
[INFO]  (OPT): Nagios log enabled
[DEBUG] (OPT): Nagios logfile: /var/log/mysqldump-secure.nagios.log
[DEBUG] (SRV): MySQL server connection: 127.0.0.1 via TCP/IP
[DEBUG] (SRV): MySQL server connection: Using SSL (Cipher in use is DHE-RSA-AES256-GCM-SHA384)
[DEBUG] (SRV): MySQL server version:    MariaDB 10.1.11-MariaDB-log Homebrew
[DEBUG] (SRV): MySQL server hostname:   notebook.home.lan:3306
[DEBUG] (SRV): MySQL server rep type:   master

4.5 示例运行

$ mysqldump-secure -v
[INFO]  (OPT): Logging enabled
[DEBUG] (OPT): Log level: 3
[DEBUG] (OPT): Logfile: /var/log/mysqldump-secure.log
[DEBUG] (CFG): Destination dir: /var/mysqldump-secure
[DEBUG] (CFG): Using file Prefix: 2016-03-09_10-13__
[INFO]  (OPT): MySQL SSL connection enabled
[DEBUG] (OPT): MySQL SSL arguments: --ssl-ca=/etc/mysql.ca.pem.
[INFO]  (OPT): Compression enabled
[DEBUG] (OPT): Compression arguments: gzip -9 --stdout
[INFO]  (OPT): Encryption enabled
[DEBUG] (OPT): Encryption algorithm: -aes256
[INFO]  (OPT): Deletion enabled
[DEBUG] (OPT): Deleting files older than 2 days. Using: tmpwatch
[INFO]  (OPT): Nagios log enabled
[DEBUG] (OPT): Nagios logfile: /var/log/mysqldump-secure.nagios.log
[DEBUG] (SRV): MySQL server connection: 127.0.0.1 via TCP/IP
[DEBUG] (SRV): MySQL server connection: Using SSL (Cipher in use is DHE-RSA-AES256-GCM-SHA384)
[DEBUG] (SRV): MySQL server version:    MariaDB 10.1.11-MariaDB-log Homebrew
[DEBUG] (SRV): MySQL server hostname:   notebook.home.lan:3306
[DEBUG] (SRV): MySQL server rep type:   master
[DEBUG] (SQL): Retrieving list of databases... 9
[INFO]  (SQL): 1/9 Dumping:  db_InnoDB_and_MyISAM (19.90 MB) (compressed) (encrypted) (--lock-tables) (--skip-quick) 0 sec
[INFO]  (SQL): 2/9 Dumping:  db_InnoDB_only (10.52 MB) (compressed) (encrypted) (--single-transaction) (--skip-quick) 1 sec
[INFO]  (SQL): 3/9 Dumping:  db_MyISAM_only (9.38 MB) (compressed) (encrypted) (--lock-tables) (--skip-quick) 0 sec
[INFO]  (SQL): 4/9 Skipping: information_schema (ignored)
[INFO]  (SQL): 5/9 Skipping: my_empty_db1 (DB is empty)
[INFO]  (SQL): 6/9 Skipping: my_empty_db2 (DB is empty)
[INFO]  (SQL): 7/9 Dumping:  mysql (0.62 MB) (compressed) (encrypted) (--lock-tables) (--skip-quick) 0 sec
[INFO]  (SQL): 8/9 Skipping: performance_schema (ignored)
[INFO]  (SQL): 9/9 Skipping: test (DB is empty)
[DEBUG] (RUN): Dumping finished (OK: 4 dbs, IGN: 5 dbs, ERR: 0, TOTAL: 9)
[DEBUG] (RUN): Took 2 seconds
[DEBUG] (RUN): Total size dumped: 40.42 MB
[INFO]  (RUN): Deleting files older than 2 days ... 4
[INFO]  removing file /var/mysqldump-secure/2016-03-07_01-52__db_InnoDB_and_MyISAM.sql.gz.enc
[INFO]  removing file /var/mysqldump-secure/2016-03-07_01-52__db_InnoDB_only.sql.gz.enc
[INFO]  removing file /var/mysqldump-secure/2016-03-07_01-52__db_MyISAM_only.sql.gz.enc
[INFO]  removing file /var/mysqldump-secure/2016-03-07_01-52__mysql.sql.gz.enc
[DEBUG] (RUN): Writing nagios logfile
[OK]    Finished successfully

5. 文档

6. 贡献

欢迎贡献者。

如果脚本在当前尚未包括在此文档顶部的操作系统产品上运行,请让我知道,以便我可以添加它供参考。

如果您使用此脚本,请给它加星或以某种方式让我知道。

如果您想查看 贡献指南 并看看是否有任何您想负责的事情。

7. 许可证

license

8. 版本

有关版本列表的完整列表,请参阅 变更日志