Присоединяйтесь к клиенту MySQL полностью через FIFO

В скрипте Bash я хочу, чтобы сеансы MySQL были открыты для нескольких последовательных обращений; Распространенный способ доступа к MySQL - это открытие отдельного сеанса для каждой команды SQL или набора команд, таких как

mysql -u user -e "show tables;"

Ограничением этого метода является потеря атомарности и статусов блокировки для тех транзакций, которые должны быть двоякими: например, он 'невозможно сохранить статус блокировки на столеT на всю длину следующей двойной операции:

### Minimalistic example
data=$(mysql -e "\
    lock table T write;
    select col from T;
")
# ...
# parse 'data' and compute 'output' variable
# ...
mysql -e "insert into T values ($output);"

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

Предложенное решение:

Создайте пару FIFO:.mkfifo IN OUT

Установите экземпляр MySQL-клиента на место вместе с фиктивнымwhile держать трубы открытыми и предотвратитьSIGPIPE сигналы:

mysql --xml --batch --raw --skip-column-names \
    -h "$hostname" -u "$username" "$db" >IN OUT
read OUT  # this produces the expected output

Ожидается ли такое поведение? Также мне интересно, можно ли в Bash запускать двойные операции без пользовательских домашних пивоваров.

Ответы на вопрос(4)

Ваш ответ на вопрос