pulse-mind.mysql

Ansible角色:MySQL

CI

在RHEL/CentOS或Debian/Ubuntu服务器上安装和配置MySQL或MariaDB服务器。

需求

没有特殊要求;请注意,此角色需要root访问权限,因此要么在全局become: yes的剧本中运行,要么在你的剧本中像这样调用该角色:

- hosts: database
  roles:
    - role: geerlingguy.mysql
      become: yes

角色变量

可用变量列在下面,附带默认值(请参见defaults/main.yml):

mysql_user_home: /root
mysql_user_name: root
mysql_user_password: root

存储Python MySQL设置的主目录,Ansible将在连接MySQL时使用。这应该是运行此Ansible角色的用户的主目录。如果你以非root用户身份运行此角色,可以设置mysql_user_namemysql_user_password以配置一个非root用户。

mysql_root_home: /root
mysql_root_username: root
mysql_root_password: root

MySQL根用户帐户的详细信息。

mysql_root_password_update: false

是否强制更新MySQL根用户的密码。默认情况下,该角色仅在首次配置MySQL时更改根用户的密码。你可以通过将其设置为yes来强制更新。

注意:如果在剧本运行失败或中断后出现ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)的错误,这通常意味着根密码最初没有更新。尝试删除配置的mysql_user_home中的.my.cnf文件,或更新它并设置password=''(不安全的默认密码)。再次运行剧本,mysql_root_password_update设置为yes,设置应该完成。

注意:如果在尝试从CLI登录时出现ERROR 1698 (28000): Access denied for user 'root'@'localhost' (using password: YES)的错误,你可能需要以root或sudo用户身份运行。

mysql_enabled_on_startup: true

MySQL是否应在启动时启用。

mysql_config_file: *默认值取决于操作系统*
mysql_config_include_dir: *默认值取决于操作系统*

主要的my.cnf配置文件和包含目录。

overwrite_global_mycnf: true

每次运行此角色时是否应覆盖全局my.cnf。将其设置为no会告诉Ansible仅在文件不存在时创建my.cnf文件。如果希望使用此角色的变量配置MySQL,则应将其保留为默认值(yes)。

mysql_config_include_files: []

应覆盖默认全局my.cnf的文件列表。数组中的每个项目需要一个“src”参数,即文件的路径。可选的“force”参数可以强制在每次ansible运行时更新文件。

mysql_databases: []

要创建的MySQL数据库。数据库具有nameencoding(默认值为utf8)、collation(默认值为utf8_general_ci)和replicate(默认值为1,仅在配置了复制时使用)的值。这些格式与mysql_db模块中的格式相同。

你还可以通过将state设置为absent(默认值为present)来删除数据库(或确保它不在服务器上)。

mysql_users: []

MySQL用户及其权限。用户具有以下值:

  • name
  • host(默认值为localhost
  • password(可以是明文或加密—如果加密,请设置encrypted: yes
  • encrypted(默认值为no
  • priv(默认值为*.*:USAGE
  • append_privs(默认值为no
  • state(默认值为present

这些格式与mysql_user模块中的格式相同。

mysql_packages:
  - mysql
  - mysql-server

(操作系统特定,列出了RedHat/CentOS的默认值)要安装的包。在某些情况下,你可能需要添加额外的包,例如mysql-devel

mysql_enablerepo: ""

(仅限RedHat/CentOS)如果你启用了任何额外的仓库(例如geerlingguy.repo-epel或geerlingguy.repo-remi),可以在此变量下列出这些仓库(例如remi,epel)。这可能很方便,例如,如果你想安装较新版本的MySQL。

mysql_python_package_debian: python3-mysqldb

(仅限Ubuntu/Debian)如果需要明确覆盖MySQL Python包,可以在此设置。如果使用旧分发版并运行Python 2,则将其设置为python-mysqldb

mysql_port: "3306"
mysql_bind_address: '0.0.0.0'
mysql_datadir: /var/lib/mysql
mysql_socket: *默认值取决于操作系统*
mysql_pid_file: *默认值取决于操作系统*

默认MySQL连接配置。

mysql_log_file_group: mysql *adm在Debian上*
mysql_log: ""
mysql_log_error: *默认值取决于操作系统*
mysql_syslog_tag: *默认值取决于操作系统*

MySQL日志配置。将mysql_log(常规查询日志)或mysql_log_error设置为syslog将使MySQL使用mysql_syslog_tag记录到syslog。

mysql_slow_query_log_enabled: false
mysql_slow_query_log_file: *默认值取决于操作系统*
mysql_slow_query_time: 2

慢查询日志设置。请注意,日志文件将由此角色创建,但如果在使用SELinux或AppArmor的服务器上运行,可能需要将此路径添加到MySQL的允许路径中,或禁用mysql配置。例如,在Debian/Ubuntu上,可以运行sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/usr.sbin.mysqld && sudo service apparmor restart

mysql_key_buffer_size: "256M"
mysql_max_allowed_packet: "64M"
mysql_table_open_cache: "256"
...

defaults/main.yml中的其余设置控制MySQL的内存使用和一些其他常见设置。默认值是针对能够消耗512 MB RAM的服务器进行调优的,因此你应该考虑调整它们以更好地适应你的特定服务器。

mysql_server_id: "1"
mysql_max_binlog_size: "100M"
mysql_binlog_format: "ROW"
mysql_expire_logs_days: "10"
mysql_replication_role: ''
mysql_replication_master: ''
mysql_replication_user: {}

复制设置。按服务器设置mysql_server_idmysql_replication_role(例如,主服务器ID为1mysql_replication_rolemaster,从服务器ID为2mysql_replication_roleslave)。mysql_replication_user使用与mysql_users中的每个列表项相同的键,并在主服务器上创建,并用于在所有从服务器上复制。

mysql_replication_master需要解析为Slave可以访问的IP或主机名(这可以是/etc/hosts的注入或其他方式),否则从服务器无法与主服务器通信。

如果复制主服务器在你运行ansible的地方和MySQL副本运行的地方有不同的IP地址,你可以选择指定mysql_replication_master_inventory_host以访问该机器(例如,你在本地计算机上运行ansible,但MySQL主服务器和副本需要在不同的网络上进行通信)。

在CentOS 7上安装更新版本的MySQL

如果你想从官方仓库安装MySQL,而不是安装系统默认的MariaDB等效项,可以在剧本中添加以下pre_tasks任务:

  pre_tasks:
    - name: Install the MySQL repo.
      yum:
        name: http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
        state: present
      when: ansible_os_family == "RedHat"
  
    - name: Override variables for MySQL (RedHat).
      set_fact:
        mysql_daemon: mysqld
        mysql_packages: ['mysql-server']
        mysql_log_error: /var/log/mysqld.err
        mysql_syslog_tag: mysqld
        mysql_pid_file: /var/run/mysqld/mysqld.pid
        mysql_socket: /var/lib/mysql/mysql.sock
      when: ansible_os_family == "RedHat"

MariaDB的使用

此角色适用于MySQL或相应版本的MariaDB。在RHEL/CentOS 7及更高版本中,mariadb数据库引擎被替换为默认的MySQL替代包。虽然所有变量仍然以'mysql'为引用,但不需要进行修改。

Ubuntu 14.04和16.04 MariaDB配置

在Ubuntu上,软件包名称不同,因此需要更改mysql_package变量。至少设置以下变量:

mysql_packages:
  - mariadb-client
  - mariadb-server
  - python-mysqldb

依赖

如果你已经安装了ansible(例如pip3 install ansible),则无需其他依赖。

如果你只安装了ansible-core,请确保在collections/requirements.yml中要求community.mysql,或手动使用ansible-galaxy collection install community.mysql进行安装。

示例剧本

- hosts: db-servers
  become: yes
  vars_files:
    - vars/main.yml
  roles:
    - { role: geerlingguy.mysql }

vars/main.yml

mysql_root_password: super-secure-password
mysql_databases:
  - name: example_db
    encoding: latin1
    collation: latin1_general_ci
mysql_users:
  - name: example_user
    host: "%"
    password: similarly-secure-password
    priv: "example_db.*:ALL"

许可证

MIT / BSD

作者信息

此角色由Jeff Geerling于2014年创建,他是Ansible for DevOps的作者。

关于项目

MySQL server for RHEL/CentOS and Debian/Ubuntu.

安装
ansible-galaxy install pulse-mind.mysql
许可证
mit
下载
133
拥有者