2016-07-20 3 views
0

У меня есть сценарий bash, который пытается заблокировать определенные таблицы в моей базе данных только как READ Only. Это команда, которую я пытаюсь выполнить:mysql блокировки таблиц из bash script

mysql -u root -p -e "LOCK TABLES db_name.table1 READ, db_name.table2 READ;" 

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

mysql -u root -p 

(Это берет меня в MySQL, где я вхожу следующее)

LOCK TABLES db_name.table1 READ, db_name.table2 READ; 

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

Кто-нибудь знает, что я делаю неправильно? Комментарий

+2

mysql очищает соединение при закрытии соединения. ваш cli блокирует таблицы, а затем выйдет, заставляя mysql очищать и освобождать блокировки. вам нужно будет поддерживать соединение все время, когда вы хотите, чтобы блокировки были активными. –

+2

@MarcB Вы хотите просто вставить это в ответ, чтобы мы могли обернуть это? Или Саманта, ты это делаешь. Это * ответ. – Drew

+0

@MarcB спасибо !! Постоянное поддержание соединения работает отлично. – Samantha

ответ

0

Per Marc Б выше:

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

0

MySQL очищает, когда соединение закрыто. Это означает, что ваша mysql .... будет подключаться к командной строке, заблокировать ее, а затем выйти - закрыть соединение, в результате чего блокировки будут выпущены.

Вам необходимо поддерживать это «блокирующее» соединение все время, когда вы хотите/нуждаетесь в том, чтобы замки оставались установленными.

Смежные вопросы