bertvv.mariadb

Ansible角色 mariadb

这是一个用于管理RedHat系列发行版中MariaDB的Ansible角色。该角色的主要职责包括:

  • 从MariaDB官方仓库安装MariaDB软件包
  • 移除不安全的默认设置:
    • 设置数据库根用户密码(注意:设置后,此角色不能更改数据库根密码)
    • 删除匿名用户
    • 删除测试数据库
  • 创建用户和数据库
  • 管理配置文件 server.cnfcustom.cnf
  • 上传SSL证书并配置服务器使用它们

请参阅更改日志以获取每个版本的显著变化。

您是否在使用/喜欢此角色?请考虑为它点个星。如果您在Ansible Galaxy上给这个角色评分,并发现其不足之处,请考虑提出问题或提交PR,以便我们进行改进。谢谢!

要求

没有特定要求

角色变量

下面的变量均不是必需的。当用户未定义时,将使用默认值

基本配置

变量 默认值 备注
mariadb_bind_address '127.0.0.1' 设置该值为监听的网络接口的IP地址,或设置为'0.0.0.0'以监听所有接口。
mariadb_configure_swappiness true 当设置为true,此角色将设置"swappiness"值(见 mariadb_swappiness)。
mariadb_custom_cnf {} 自定义配置的字典。
mariadb_databases [] 指定要添加的数据库的字典列表。详细信息见下文。
mariadb_mirror yum.mariadb.org .rpm包的下载镜像(1)
mariadb_port 3306 监听客户请求的端口号
mariadb_root_password '' MariaDB根用户密码(2)
mariadb_server_cnf {} 服务器配置的字典。
mariadb_service mariadb 服务名称(例如在CentOS 5.5中应为'mysql')
mariadb_swappiness '0' "Swappiness"值(字符串)。系统默认值为60。值为0表示尽量避免进程交换。
mariadb_users [] 指定要添加的用户的字典列表。详细信息见下文。
mariadb_version '10.5' 要安装的MariaDB版本。默认为当前稳定版本。
mariadb_ssl_ca_crt null 证书颁发机构根证书的路径
mariadb_ssl_server_crt null 服务器SSL证书的路径
mariadb_ssl_server_key null 服务器SSL证书密钥的路径

备注

(1) 从官方仓库安装MariaDB可能非常慢(一些用户报告超过10分钟)。变量 mariadb_mirror 允许您指定一个靠近您地理位置的自定义下载镜像,可以加快安装过程。例如:

# 对于RHEL/Fedora
mariadb_mirror: 'mariadb.mirror.nucleus.be/yum'
# 对于Debian
mariadb_mirror: 'mirror.mva-n.net/mariadb/repo'

(2) 强烈建议设置数据库根用户密码! 保留密码为空是严重的安全风险。如果该变量未设置,角色将发出警告。

服务器配置

您可以通过提供键值对的字典在变量 mariadb_server_cnf 中指定 /etc/my.cnf.d/server.cnf(在RHEL/Fedora中,在Debian中为 /etc/mysql/conf.d/server.cnf)中的配置,特别是在 [mariadb] 部分。有关可能的设置,请参阅MariaDB服务器系统变量文档

对于没有 = value 的设置,请将值留空。所有值都应作为字符串给出,因此数值应加引号。

在以下示例中,slow-query-log 的值被留空:

mariadb_server_cnf:
  slow-query-log:
  slow-query-log-file: 'mariadb-slow.log'
  long-query-time: '5.0'

这将生成以下 server.cnf

[mariadb]
slow-query-log
slow-query-log-file = mariadb-slow.log
long-query-time = 5.0

自定义配置

除了 [mariadb] 部分之外的其他部分的设置,可以使用 mariadb_custom_cnf 设置。这些设置将写入 /etc/mysql/my.cnf.d/custom.cnf(在RHEL/Fedora中,在Debian中为 /etc/mysql/conf.d/custom.cnf)。

mariadb_server_cnf 一样,变量 mariadb_custom_cnf 应该是一个字典。键是部分名称,值是带有单个设置的键值映射的字典。

以下示例启用一般查询日志:

mariadb_custom_cnf:
  mysqld:
    general-log:
    general-log-file: queries.log
    log-output: file

生成的配置文件将如下所示:

[mysqld]
general-log-file=queries.log
general-log
log-output=file

添加数据库

数据库是通过包含字段 name:(必需)和 init_script:(可选)的字典来定义的。初始化脚本是一个SQL文件,在创建数据库时执行以初始化表并填充数据。

mariadb_databases:
  - name: appdb1
  - name: appdb2
    init_script: files/init_appdb2.sql

添加用户

用户是通过包含字段 name:password:priv:,以及可选的 host:append_privs 的字典来定义的。密码为明文,priv: 指定该用户的权限,如Ansible文档中所述。

示例:

mariadb_users:
  - name: john
    password: letmein
    priv: '*.*:ALL,GRANT'
  - name: jack
    password: sekrit
    priv: 'jacksdb.*:ALL'
    append_privs: 'yes'
    host: '192.168.56.%'

依赖

无依赖项。

示例剧本

请参见test playbook

测试

可以使用Ansible Molecule测试此角色。Molecule配置将:

  • 运行Yamllint和Ansible Lint
  • 创建一个名为db的Docker容器
  • 运行语法检查
  • 使用test playbook应用角色
  • 使用BATS运行验收测试

此过程将为每个支持的Linux发行版重复进行。

本地Docker测试环境

如果您想设置本地测试环境,可以使用基于Vagrant+VirtualBox的可重复设置:https://github.com/bertvv/ansible-testenv。手动安装必要工具的步骤:

  1. 您的机器上应该安装Docker和BATS(假定运行Linux)。测试开始时不应有Docker容器运行。
  2. 按照Molecule的建议,创建一个python虚拟环境
  3. 安装软件工具 python3 -m pip install molecule docker netaddr yamllint ansible-lint
  4. 导航到角色目录的根目录,并运行 molecule test

Molecule会在测试后自动删除容器。如果您想自己查看容器,可以先运行 molecule converge 然后再运行 molecule login --host HOSTNAME

Docker容器基于Jeff Geerling为Ansible测试创建的映像(查找名为 geerlingguy/docker-DISTRO-ansible 的映像)。您可以使用他的任何映像,但只有在meta/main.yml中提到的发行版才受支持。

默认配置将启动一个Centos 7容器(目前主要支持的平台)。通过设置 MOLECULE_DISTRO 变量,可以选择其他发行版,例如:

MOLECULE_DISTRO=fedora32 molecule test

MOLECULE_DISTRO=fedora32 molecule converge

您可以在两台服务器上运行验收测试,使用 molecule verify 或手动执行:

SUT_IP=172.17.0.2 bats molecule/common/mariadb.bats

您需要初始化变量 SUT_IP,即待测试系统的IP地址。 db 容器应具有IP地址172.17.0.2。

本地Vagrant测试环境

或者,您也可以使用完整的虚拟机而不是Docker容器来运行Molecule测试。运行测试的系统上需要安装Vagrant、VirtualBox、Ansible、Molecule和BATS。

molecule test -s vagrant

这将为受支持的平台创建VirtualBox虚拟机,基于Bento项目的基础箱,应用测试剧本并运行验收测试。

许可证

2条款BSD

贡献者

关于项目

Manage MariaDB on a RedHat based Linux distribution.

安装
ansible-galaxy install bertvv.mariadb
许可证
other
下载
66.6k
拥有者
Hi! My contribs are often related to my job (teaching Linux), but are mostly done in my free time. I can't always respond quickly to PRs and Issues. Sorry!