LINUX.ORG.RU
ФорумAdmin

Как в плэйбуке передать значение mysql?

 , ,


0

1

Здравствуйте! Делаю репликацию ансиблем. Стоит задача вывода информации о текущем состоянии двоичного журнала источника (мастера). В терминале команда выглядит так:

SHOW MASTER STATUS;

Таск в плэйбуке сейчас выглядит так:

  tasks:
  - name: Get the current master servers replication status
    community.mysql.mysql_info:
      filter: "master_status"
      login_unix_socket: /run/mysqld/mysqld.sock

Плучаю инфу в таком виде:

  "master_status": {
        "Binlog_Do_DB": "",
        "Binlog_Ignore_DB": "",
        "Executed_Gtid_Set": "",
        "File": "binlog.000004",
        "Position": 157

Мне надо извлечь значения «File» и «Position». Как это сделать?


Ответ на: комментарий от ivanov17

Сохранить результат таска в переменной

Как это сделать?

Совсем другой вопрос что с этим потом планируется делать.

Укажу параметры соединения для репликации, типа:

CHANGE MASTER TO MASTER_HOST='192.168.56.121', MASTER_USER='slave_user', MASTER_PASSWORD='password',
MASTER_LOG_FILE = 'binlog.000004', MASTER_LOG_POS = 157

paa66
() автор топика
Ответ на: комментарий от KiVug7A

Быть может, посредством jq

Посмотрел, инстумент мощный, но моя квалификация не позволит сейчас его задействовать :(

paa66
() автор топика
Последнее исправление: paa66 (всего исправлений: 1)
Ответ на: комментарий от ivanov17

Попробовал сделать так:

  - name: Get the current master servers replication status
    community.mysql.mysql_info:
      filter: "master_status"
      register: command_result
      login_unix_socket: /run/mysqld/mysqld.sock

Ответ системы, что register - неподдерживаемый параметр модуля:

Unsupported parameters for (community.mysql.mysql_info) module: register.

paa66
() автор топика
Ответ на: комментарий от Anoxemian

Очевидно, ты register не в ту область видимости/скоуп пихаешь.

Сейчас у меня таск выглядит так:

  - name: Get primary binlog File name and binlog Position
    community.mysql.mysql_replication:
      mode: getprimary
      login_unix_socket: /run/mysqld/mysqld.sock
    register: master_status

Ответ ансибла такой:

ok: [ubu1] => {
    "Binlog_Do_DB": "",
    "Binlog_Ignore_DB": "",
    "Executed_Gtid_Set": "",
    "File": "binlog.000005",
    "Is_Primary": true,
    "Position": 737,
    "changed": false,
    "invocation": {
        "module_args": {
            "ca_cert": null,
            "channel": null,
            "check_hostname": null,
            "client_cert": null,
            "client_key": null,
            "config_file": "/root/.my.cnf",
            "connect_timeout": 30,
            "connection_name": null,
            "fail_on_error": false,
            "login_host": "localhost",
            "login_password": null,
            "login_port": 3306,
            "login_unix_socket": "/run/mysqld/mysqld.sock",
            "login_user": null,
            "mode": "getprimary",
            "primary_auto_position": false,
            "primary_connect_retry": null,
            "primary_delay": null,
            "primary_host": null,
            "primary_log_file": null,
            "primary_log_pos": null,
            "primary_password": null,
            "primary_port": null,
            "primary_ssl": null,
            "primary_ssl_ca": null,
            "primary_ssl_capath": null,
            "primary_ssl_cert": null,
            "primary_ssl_cipher": null,
            "primary_ssl_key": null,
            "primary_ssl_verify_server_cert": false,
            "primary_use_gtid": null,
            "primary_user": null,
            "relay_log_file": null,
            "relay_log_pos": null
        }
    },
    "queries": []
}
В ответе я не нашёл значение переменной status_master.

Сделал иначе:

  - name: Get the current master servers replication status
    community.mysql.mysql_info:
      filter: "master_status"
      login_unix_socket: /run/mysqld/mysqld.sock
    register: master_status

Ответ ансибля:

ok: [ubu1] => {
    "changed": false,
    "invocation": {
        "module_args": {
            "ca_cert": null,
            "check_hostname": null,
            "client_cert": null,
            "client_key": null,
            "config_file": "/root/.my.cnf",
            "connect_timeout": 30,
            "exclude_fields": null,
            "filter": [
                "master_status"
            ],
            "login_db": null,
            "login_host": "localhost",
            "login_password": null,
            "login_port": 3306,
            "login_unix_socket": "/run/mysqld/mysqld.sock",
            "login_user": null,
            "return_empty_dbs": false
        }
    },
    "master_status": {
        "Binlog_Do_DB": "",
        "Binlog_Ignore_DB": "",
        "Executed_Gtid_Set": "",
        "File": "binlog.000005",
        "Position": 737

Тоже не нашёл переменную status_master.

paa66
() автор топика
Последнее исправление: paa66 (всего исправлений: 1)
Ответ на: комментарий от paa66

В ответе я не нашёл значение переменной status_master.

Плучаю инфу в таком виде

Ну, то есть, в какую переменную результат сохраняется, из такой его и надо брать, а как уж её назвать – дело десятое.

Поддерживаю предложение почитать документацию.

На всякий случай, ансибл – он про описание состояния системы, в документации об этом тоже есть. А то я как-то не обратил внимания сначала, а теперь в глаза бросилось:

Делаю репликацию ансиблем

ivanov17
()
Ответ на: комментарий от ivanov17

Я уже всё сделал, сразу после ответа участника форума под ником Anoxemian. Через debug … msg… вывел значение переменной и убедился в её существовании (сейчас нет под рукой кода). Кстати, надо обязательно написать решение здесь. Сразу не отписался, т.к. увлёкся дальнейшей работой (так бывает, наверно, не только у меня). Про «читать документацию»: в принципе, иного пути нет, для меня - это настольная книга, постоянно держу открытой. Если в Яндексе я введу поисковый запрос «репликация mysql ансиблем», то быстро найду подходящий пример. Если то же самое сделаю на сайте ансибля, то найду, конечно, модуль соответствующий, а как сделать репликацию - нет.

paa66
() автор топика
Ответ на: комментарий от paa66

Если то же самое сделаю на сайте ансибля

Чтение документации к модулю может дать больше представлений о его возможностях, чем найденные в рунете howto под конкретные кейсы, обычно криво переведённые с английского.

Вообще, рекомендую использовать глобальные поисковики и англоязычные запросы при поиске технической информации. Будет меньше необходимости ходить на форумы.

ivanov17
()