Узнайте, как установить MySQL 8.4 на Red Hat Enterprise Linux release 9.5 (Plow) с помощью ролей Ansible для автоматизации, масштабируемости и повторяемости. Это пошаговое руководство обеспечивает безопасную и эффективную настройку MySQL.
Знакомство
MySQL — это система управления реляционными базами данных (РСУБД) с открытым исходным кодом, широко используемая для веб-приложений и сервисов. При развертывании MySQL на нескольких серверах или средах автоматизация становится необходимой для обеспечения согласованности, повторяемости и масштабируемости. Вот тут-то и пригодится инструмент автоматизации Ansible.
В этой статье блога мы проведем вас через процесс установки MySQL 8.4 на сервер Red Hat Enterprise Linux release 9.5 (Plow) с использованием ролей Ansible. Используя роли Ansible, вы можете лучше организовывать свои плейбуки, повторно использовать код и легко развертывать MySQL на нескольких серверах. Независимо от того, управляете ли вы одним сервером или тысячами, Ansible позволяет легко автоматизировать настройку сервера и установку приложений.
Давайте рассмотрим, как вы можете использовать роли Ansible для автоматизации процесса установки MySQL 8.4 на Red Hat Enterprise Linux release 9.5 (Plow).
Зачем использовать Ansible для установки MySQL 8.4?
Ansible — это инструмент автоматизации ИТ с открытым исходным кодом, который упрощает такие задачи, как установка программного обеспечения, настройка системы и развертывание приложений. Это позволяет:
ВыгодаОписаниеАвтоматизируйте повторяющиеся задачиРучная установка MySQL на нескольких серверах может занять много времени и привести к ошибкам. Ansible помогает оптимизировать этот процесс.Обеспечьте согласованностьСборники сценариев Ansible гарантируют одинаковость этапов установки на всех серверах, обеспечивая согласованную установку и настройку MySQL.Управление крупными инфраструктурамиНезависимо от того, развертываете ли вы развертывание на нескольких серверах или на сотнях, масштабируемость Ansible помогает управлять большими средами.Сокращение количества человеческих ошибокАвтоматизируя процесс установки и настройки, вы снижаете вероятность неправильной настройки.
Использование ролей Ansible обеспечивает модульность и возможность повторного использования. Роли помогают разбивать сложные задачи на более мелкие, управляемые компоненты, что упрощает обслуживание и масштабирование сборников сценариев.
HostnameRAMCoresOSansible.dev.kalyuzhnyy.ru (management or control node)
42Red Hat Enterprise Linux release 9.5 (Plow)mysql-db.dev.kalyuzhnyy.ru (target server or node) | IP: 192.168.1.219
42Red Hat Enterprise Linux release 9.5 (Plow)Для этой демонстрации мы настроили наш экземпляр потока Red Hat Enterprise Linux release 9.5 (Plow) следующим образом:
Предварительные требования для установки MySQL 8.4 на CentOS 9
Прежде чем мы начнем установку MySQL 8.4 с помощью Ansible, убедитесь, что выполнены следующие предварительные условия:
- На целевых серверах установлена CentOS 9.
- Ansible, установленный на локальном компьютере (или узле управления). Если он не установлен, вы можете установить Ansible с помощью следующей команды:
sudo dnf install ansible -y
- SSH-доступ к удаленным серверам, на которых вы планируете установить MySQL.
- Sudo предоставляет привилегии на целевых серверах для установки пакетов и настройки MySQL.
- Файл инвентаризации, определяющий список целевых серверов в Ansible.
Чтобы проверить версию, работающую на вашем узле управления, выполните следующую команду:
ansible --version
ansible [core 2.14.18]
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/admin/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.9/site-packages/ansible
ansible collection location = /home/admin/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/bin/ansible
python version = 3.9.21 (main, Dec 4 2024, 00:00:00) [GCC 11.5.0 20240719 (Red Hat 11.5.0-2)] (/usr/bin/python3)
jinja version = 3.1.2
libyaml = True
Обзор ролей Ansible
Роли Ansible — это способ организации задач, обработчиков, переменных, шаблонов и файлов в повторно используемые компоненты. Роли позволяют инкапсулировать определенные конфигурации, что упрощает применение согласованных параметров к нескольким серверам.
Для установки MySQL 8.4 на CentOS 9 мы создадим пользовательскую роль Ansible, которая содержит:
- Задачи по установке MySQL.
- Переменные для настройки MySQL.
- Обработчики для перезапуска MySQL после установки.
- Файлы и шаблоны для конфигурационных файлов.
Эта структура помогает гарантировать, что ваша установка MySQL может быть применена многократно и согласованно.
Шаг 1: Установка MySQL 8.4 с помощью роли Ansible
Создание роли MySQL
Для начала нам нужно создать роль Ansible для установки MySQL 8.4. Ansible роли создаются в каталоге roles/ вашего проекта. Выполните следующие команды, чтобы создать каталог mysql-84-install, перейдите к нему и создайте новую роль:
mkdir -p mysql-84-install && cd mysql-84-install && ansible-galaxy init mysql_install
- Role mysql_install was created successfully
Эта команда генерирует структуру по умолчанию для роли установки MySQL. Структура будет выглядеть следующим образом:
.
└── mysql_install
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
9 directories, 8 files
Определите переменные по умолчанию
Файл defaults/main.yml в роли Ansible определяет значения по умолчанию для переменных, которые могут быть переопределены пользователем, обеспечивая согласованную конфигурацию между задачами. Используя предпочитаемый текстовый редактор, откройте файл mysql_install/defaults/main.yml.
vim mysql_install/defaults/main.yml
Добавьте следующее содержимое (затем сохраните и закройте файл):
--- # defaults file for mysql_install
# Define MySQL Database variables mysql_hostname: "127.0.0.1" mysql_port: "3306" mysql_database: "my_database" mysql_username: "my_user"
Защита паролей
Конфиденциальные данные, такие как пароли, должны храниться в зашифрованном файле хранилища (например, secrets.yml), а не в виде обычного текста в vars/main.yml или defaults/main.yml. Используйте vars_files в сборнике схем для ссылки на зашифрованное хранилище и всегда защищайте пароль хранилища, гарантируя, что он не предназначен для управления версиями.
Вот как это сделать. Сначала выполните следующую команду, чтобы создать файл secrets.yml.
ansible-vault create mysql_install/vars/secrets.yml
New Vault password:
Confirm New Vault password:
При создании зашифрованного файла хранилища вам будет предложено ввести и подтвердить пароль для безопасного доступа. Убедитесь, что все конфиденциальные переменные, такие как пароли пользователя MySQL и пароли root, включены в файл хранилища, на который будут ссылаться во время выполнения сборника схем (замените его надежным, желательно 12-символьным+ паролем.).
mysql_root_password: "j/ip{,uf7/oT" mysql_user_password: "n#@xPHV4s@ve"
Сохраните и закройте файл. Теперь сохраните пароль, используемый для шифрования secrets.yml (файла хранилища), в виде обычного текста в файле, который мы называем vaultpass.
vim .vaultpass
used-to-crack@mysql_#pass
Замените used-to-crack@mysql_#pass на фактический пароль файла хранилища. Снова сохраните и закройте файл.
Настройка репозитория MySQL
Далее нам нужно добавить репозиторий MySQL в CentOS 9. Для этого мы изменим файл tasks/main.yml внутри роли mysql_install.
Вот как вы можете добавить репозиторий MySQL 8.4:
vim mysql_install/tasks/main.yml
---
# tasks file for mysql_install
- name: Download and install the MySQL repository package
shell: | sudo dnf install -y https://dev.mysql.com/get/mysql84-community-release-el9-1.noarch.rpm
sudo dnf install -y mysql-community-server mysql-community-devel
- name: Install python3-PyMySQL
dnf:
name: python3-PyMySQL
state: present
Этот фрагмент кода загружает и устанавливает репозиторий MySQL 8.4, что позволяет нам установить MySQL 8.4 из официального репозитория MySQL.
Установка MySQL 8.4
Далее в том же файле tasks/main.yml вы определите задачу для установки MySQL 8.4:
- name: Install MySQL 8.4 dnf:
name: mysql-community-server
state: present
Выполните следующие задачи, чтобы извлечь временный пароль из файла журнала и обновить пароль root на тот, который вы установили в файле хранилища.
- name: Start MySQL service service:
name: mysqld
state: started
enabled: yes
- name: Get temporary root password from log
command: "sudo grep 'temporary password' /var/log/mysqld.log" register: temp_root_password
- name: Extract the temporary password using regex
set_fact:
temp_password: "{{ (temp_root_password.stdout | regex_search('generated for root@localhost: (.+)', '\\1'))[0] }}"
- name: Update MySQL root Password
shell: | mysql -u root -p"{{ temp_password }}" --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '{{ mysql_password }}';" when: my_cnf_file.stat.exists == False
Важное примечание: Убедитесь, что при копировании и вставке содержимого используется правильный отступ. Неправильный отступ приведет к ошибкам в выполнении!!
Ваш файл mysql_install/tasks/main.yml должен выглядеть следующим образом (ниже):
Шаг 2: Настройка MySQL
После установки MySQL 8.4 необходимо его настроить. Вот задачи для настройки MySQL в вашей роли:
Создание конфигурационных файлов для MySQL
Создайте файл конфигурации (/etc/my.cnf) в каталоге files/ вашей роли, если вам нужно настроить параметры MySQL.
Например, вот базовый шаблон my.cnf:
vim mysql_install/files/my.cnf
[mysqld] bind-address = 0.0.0.0 sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
# Enable mysql_native_password plugin mysql_native_password=ON
КонфигурацияОписаниеbind-address = 0.0.0.0Заставляет MySQL прослушивать соединения на всех доступных сетевых интерфейсах, обеспечивая удаленный доступ с любого IP-адреса. Это может представлять угрозу безопасности, если не обеспечить надлежащую защиту.sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTIONУстанавливает режимы SQL для MySQL: <ul><li>STRICT_TRANS_TABLES: Применяет строгую проверку для транзакционных таблиц, вызывая ошибки при недопустимых или отсутствующих значениях.</li><li>NO_ENGINE_SUBSTITUTION: Запрещает MySQL использовать альтернативный движок, если запрошенный модуль недоступен.</li></ul>mysql_native_password = ONВключает плагин mysql_native_password, который обычно используется для обеспечения совместимости и необходим для аутентификации некоторых клиентов MySQL или более старых версий.Эта конфигурация гарантирует, что MySQL прослушивает все интерфейсы, применяет строгие стандарты SQL и обеспечивает совместимость со старыми методами аутентификации.
Давайте обратимся к этому файлу в tasks/main.yml вашей роли, чтобы скопировать конфигурацию на целевой сервер:
vim mysql_install/tasks/main.yml
- name: Copy custom MySQL configuration file copy: src: my.cnf dest: /etc/my.cnf owner: root group: root mode: '0644'
Кроме того, включите запись для создания файла /root/.my.cnf, в котором хранится пароль root MySQL.
- name: Create the MySQL (/root/.my.cnf) config file copy: dest: /root/.my.cnf content: | [client] user=root password={{ mysql_root_password }}
Перезапустите базу данных, чтобы изменения вступили в силу.
- name: Restart MySQL service service:
name: mysqld
state: restarted
enabled: yes
Настройка пользователей и баз данных MySQL
В tasks/main.yml вы также можете включить задачи по созданию пользователей и баз данных:
- name: Create MySQL database
community.mysql.mysql_db: name: "{{ mysql_database }}" state: present login_user: root login_password: "{{ mysql_root_password }}"
- name: Create MySQL user
community.mysql.mysql_user: name: "{{ mysql_username }}" password: "{{ mysql_user_password }}" priv: "{{ mysql_database }}.*:ALL" state: present login_user: root login_password: "{{ mysql_root_password }}"
Шаг 3: Запуск и включение MySQL
После установки и настройки MySQL убедитесь, что служба запущена и включена для запуска при загрузке. В файле handlers/main.yml создайте обработчик для перезапуска MySQL в случае каких-либо изменений.
vim mysql_install/handlers/main.yml
--- # handlers file for mysql_install
- name: Start MySQL service service: name: mysqld state: started enabled: yes
Эта задача гарантирует, что MySQL запустится и будет включен для запуска при перезагрузке.
Шаг 4: Создайте тестовый инвентарь
Прежде чем запускать сборник схем, давайте определим узел или узлы для тестового запуска. В файле tests/inventory укажите целевые узлы. В этом примере мы включили IP-адрес нашего сервера CentOS 9 (mysql-db.dev.naijalabs.net).
vim mysql_install/tests/inventory
[mysql_database_server] 192.168.1.219 ansible_ssh_user=admin
Шаг 5: Создание и запуск сборника схем
Наконец, мы можем создать файл mysql_db_install.yml в корневом каталоге роли. Теперь структура вашего каталога должна включать следующее:
.
├── mysql_db_install.yml
├── mysql_install
│ ├── defaults
│ │ └── main.yml
│ ├── files
│ │ └── my.cnf
│ ├── handlers
│ │ └── main.yml
│ ├── meta
│ │ └── main.yml
│ ├── README.md
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ ├── tests
│ │ ├── inventory
│ │ └── test.yml
│ └── vars
│ ├── main.yml
│ └── secrets.yml
└── vaultpass
9 directories, 12 files
Откройте файл mysql_db_install.yml и добавьте следующее содержимое:
vim mysql_db_install.yml
--- - name: Install MySQL 8.4 Database on CentOS 9 hosts: mysql_database_server vars_files: - mysql_install/vars/secrets.yml become: true roles: - mysql_install
Выполните следующую команду для выполнения сборника схем:
ansible-playbook -i mysql_install/tests/inventory mysql_db_install.yml -K --vault-password-file .vaultpass
Когда плейбук будет запущен, у вас должна быть рабочая база данных MySQL!
Шаг 6: Проверьте и протестируйте установку MySQL
После запуска роли Ansible для установки и настройки MySQL важно протестировать установку, чтобы убедиться, что все работает правильно. Используйте следующую команду для проверки состояния MySQL:
systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; preset: disabled)
Active: active (running) since Tue 2025-02-04 03:26:28 EST; 49s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 10088 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 10115 (mysqld)
Status: "Server is operational"
Tasks: 36 (limit: 23127)
Memory: 433.8M
CPU: 37.367s
CGroup: /system.slice/mysqld.service
└─10115 /usr/sbin/mysqld
Вы также можете протестировать вход в MySQL:
sudo mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.4.4 MySQL Community Server - GPL
Copyright (c) 2000, 2025, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Выполните следующую команду, чтобы отобразить базы данных по умолчанию и подтвердить, что база данных была создана:
SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| my_database |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
Передовая практикаОбъяснениеИспользование управления конфигурациейВсегда храните конфигурационные файлы (например, my.cnf) в системах с контролем версий.Обеспечение идемпотентностиУбедитесь, что ваши плейбуки и роли являются идемпотентными, т. е. они должны работать даже при многократном запуске.Использование переменных для паролейИзбегайте жесткого кодирования конфиденциальной информации, такой как пароли. Используйте Ansible Vault для безопасного хранения секретов.Регулярно обновляйте MySQLПоддерживайте MySQL в актуальном состоянии, чтобы обеспечить установку исправлений безопасности и новых функций.Рекомендации по управлению MySQL с помощью ролей Ansible
Чтобы обеспечить чистое и эффективное развертывание MySQL, вот несколько лучших практик:
Устранение распространенных проблем
Вот некоторые распространенные проблемы, с которыми вы можете столкнуться:
- Не удается запустить службу MySQL: Это может быть связано с неправильной конфигурацией или отсутствующими зависимостями. Проверьте журналы в /var/log/mysqld.log для получения дополнительной информации.
- Не удается установить пакет: Убедитесь, что репозиторий MySQL правильно добавлен и доступен.
- Отказано в разрешении при создании баз данных или пользователей: Убедитесь, что пароль root MySQL верен и пользователь Ansible обладает необходимыми привилегиями.
Заключение
Следуя этому руководству, вы можете автоматизировать процесс установки MySQL 8.4 на Rocky Linix 9 с помощью ролей Ansible. Автоматизация установки и настройки MySQL с помощью Ansible не только экономит время, но и обеспечивает согласованность и масштабируемость, особенно при управлении крупными инфраструктурами.
Роли Ansible позволяют разбивать плейбуки на модули и повторно использовать их в различных средах. С помощью Ansible вы можете эффективно управлять установками и настройками MySQL, сокращая количество ручных ошибок и повышая общую производительность.
Если у вас есть какие-либо мысли или вопросы по этой теме, пожалуйста, не стесняйтесь оставить комментарий или отправить мне сообщение. Я хотел бы продолжить дискуссию и услышать вашу точку зрения.
А также вы всегда можете поддержать меня зайдя на сайт и подписаться https://dzen.ru/kalyuzhnyy.ru и найти больше статей на моих ресурсах https://kalyuzhnyy.ru и https://dev.kalyuzhnyy.ru