Создаем базу данных MySQL с Ansible

от автора

image
Фото Courtesy Of Pexels.com

Ansible идеально подходит для деплоймента MySQL на сервере без лишних усилий с нашей стороны. Давайте вместе посмотрим, как это происходит. Даже если у вас пока нет опыта с Ansible, вы легко во всем разберетесь. Мы используем образ Docker с Ansible, как описано в этой статье.

Чтобы создать базу данных MySQL, мы выполним несколько действий:

  1. Создадим файл hosts (не так уж и нужен в таком простом примере, но всегда используется в реальных проектах).
  2. Создадим плейбук. Обычно это самая главная часть, так что мы изучим его построчно.
  3. Создадим файл SQL. Это необязательно, но с его помощью можно создать данные для базы данных, чтобы потом протестировать ее.
  4. Протестируем внесенные изменения.

Перейдем к делу.

1. Создаем файл hosts

Это не обязательный файл, но мы предпочитаем запускать плейбук с его помощью для тестов на localhost. Потом можно изменить IP-адрес, чтобы перенестись в другую среду. Здесь в файле hosts всего одна запись (можете скопировать ее): touch hosts

[mysql] 127.0.0.1

2. Создаем плейбук MySQL

Здесь происходит самое интересное: устанавливаются приложения, настраиваются так, как нам нужно, создается тестовая база данных и в нее добавляются данные. Все эти настройки нужно где-то хранить, так что начнем с создания файла db-server-playbook.yml:

touch db-server-playbook.yml

Открываем созданный файл в текстовом редакторе и для начала указываем хосты, куда будем деплоить ресурсы (в строке 2 нам как раз пригодится созданный файл hosts). Затем задаем переменную для mysql_root_password в строках 4 и 5. Здесь мы указываем пароль открытым текстом только для демонстрации. В реальном мире мы использовали бы, например, ansible-vault или переменную командной строки:

Примечание: Не добавляйте номера в начале каждой строки — мы пронумеровали их просто для ясности.

1 ---    2 - hosts: mysql    3    4   vars:    5     mysql_root_password: password    6

Настроив переменные, начинаем определять задачи. Для начала мы устанавливаем mysql с помощью apt для установки в образе Ubuntu Docker. Еще можно было бы использовать модуль package или yum, если бы у нас был образ Centos:

7   tasks:   8    - name: install mysql     9      apt:  10    name: mysql  11    update_cache: yes  12      cache_valid_time: 3600 13      state: present

Настроим задачи, чтобы убедиться, что сервис mysql работает и будет запущен при старте:

14     - name: start up the mysql service   15       shell: "service mysql start"   16     - name: ensure mysql is enabled to run on startup   17       service:  18         name:mysql  19         state:started  20         enabled:true

Теперь можно настроить пароль для всех корневых аккаунтов в установке mysql. Хотя mysql устанавливается только на одном хосте (образ Docker), на него ссылаются другие имена, включая localhost и 127.0.0.1. Для всех нужно указать модуль mysql_user и набор привилегий, как в примере ниже, где используется директива with_item:

21     - name: update mysql root password for all root accounts   22       mysql_user:   23         name: root   24         host: "{{ item }}"   25         password: "{{ mysql_root_password }}"   26         login_user: root   27         login_password: "{{ mysql_root_password }}"   28         check_implicit_admin: yes   29         priv: "*.*:ALL,GRANT"   30       with_items:   31       - "{{ ansible_hostname }}"   32       - 127.0.0.1   33       - ::1   34       - localhost

После настройки MySQL можем использовать модуль mysql_db, чтобы создать тестовую базу данных в строках 37-40, а затем в строках 46-51 импортируем в нее данные из файла SQL, который мы скоро создадим:

35     - name: create a new database   36      mysql_db:  37     name: testdb  38     state: present  39     login_user: root  40     login_password: "{{ mysql_root_password }}"   41     - name: add sample data to database   42       copy:  43         src:dump.sql  44         dest:/tmp/dump.sql   45     - name: insert sample data into database   46       mysql_db:  47         name: testdb  48         state: import  49         target: /tmp/dump.sql  50         login_user: root  51         login_password: "{{ mysql_root_password }}"

Сохраним плейбук и создадим файл SQL с тестовыми данными, которые можно импортировать в БД.

3. Создаем файл SQL

В нем содержатся данные для БД. Таблица очень простая, но можно получить представление о том, как это работает. Те же принципы вы сможете применять, чтобы создавать таблицы, схемы и данные.

Для начала создадим файл dump.sql:

touch dump.sql

Откроем файл в текстовом редакторе и добавим код, как показано ниже, чтобы создать новую таблицу test и добавить три строки INSERT:

CREATE TABLE IF NOT EXISTS test (              message varchar(255) NOT NULL            ) ENGINE=MyISAM DEFAULT CHARSET=utf8;            INSERT INTO test(message) VALUES('Ansible To Do List');   INSERT INTO test(message) VALUES('Get ready');            INSERT INTO test(message) VALUES('Ansible is fun')

4. Запуск плейбука Ansible

Если мы все сделали правильно, можно запустить плейбук из командной строки командой ansible-playbook. Выполним следующую команду, чтобы запустить плейбук из каталога, где мы его создали:

ansible-playbook -i hosts db-server-playbook.yml

Это маленький плейбук всего с одним пакетом, а в базе данных мало данных, так что результаты работы плейбука очень скоро будут готовы для тестирования.

5. Тестируем внесенные изменения

Если все в порядке, тест с хоста пройдет успешно. Мы войдем в MySQL, перейдем в базу данных testdb, отобразим все таблицы в базе данных и, наконец, выведем все данные в таблице test, которую мы создали с Ansible:

mysql -u root -h localhost -p Enter password:  Welcome to the MySQL monitor.  Commands end with ; or \g.  Your MySQL connection id is 17  Server version: 8.0.22-0ubuntu0.20.04.3 (Ubuntu)  mysql> use testdb;  Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A  Database changed  mysql> show tables;  +------------------+  | Tables_in_testdb |  +------------------+  | test             |  +------------------+  1 row in set (0.00 sec)  mysql> select * from test;  +--------------------+  | message            |  +--------------------+  | Ansible To Do List |  | Get ready          |  | Ansible is fun     |  +--------------------+  3 rows in set (0.00 sec)

Вот и все. Ничего особенного, правда? Всего несколько минут и несколько строк в Ansible — и у нас есть рабочая база данных.

В книге Practical Ansible: Configuration Management from Start to Finish подробно описывается, как оптимизировать управление конфигурацией с помощью Ansible.

ссылка на оригинал статьи https://habr.com/ru/company/southbridge/blog/557838/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *