Как эксклюзивную блокировку базы данных mysql? - PullRequest
9 голосов
/ 20 мая 2009

У меня есть несколько баз данных mysql, и я хочу выполнить некоторые административные задачи для конкретной базы данных. Как я могу гарантировать, что никто не сможет подключиться к этой базе данных во время выполнения задач?

Ответы [ 3 ]

11 голосов
/ 20 мая 2009

Видимо, вы можете использовать для этого команду FLUSH:

> ТАБЛИЦЫ С ПОМОЩЬЮ ЧИТАНИЯ,

, а затем

> РАЗБЛОКИРОВАТЬ СТОЛЫ;

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

Дополнительная информация о команде FLUSH

0 голосов
/ 20 мая 2009

Если вы можете позволить себе остановить сервер на время обслуживания, остановите демон и перенастройте его так, чтобы он не прослушивал сетевые подключения. Разрешить соединения только через локальный сокет UNIX.

Затем войдите в систему локально на той же машине, либо физически, либо через SSH. Пока никто не имеет доступа к машине, это гарантирует, что вы одни. Когда закончите, восстановите исходный файл конфигурации и перезапустите демон.

Другой подход заключается в том, чтобы временно отключить все учетные записи пользователей, кроме «root» (или того, что вы используете для обслуживания) для конкретной базы данных. Однако у этого есть недостаток, заключающийся в том, что он действительно портит данные учетной записи, что немного опаснее, чем просто предотвращение сетевых подключений.

0 голосов
/ 20 мая 2009

У вас есть пара вариантов, как я вижу:

  • Завершение работы mysqld, демон, который устанавливает соединения с базами данных. Недостатком этого является предотвращение доступа к всем базам данных MySQL на этом компьютере.

  • Переместите файл или измените права доступа к нему, чтобы с ним мог работать только ваш пользователь. (Я понятия не имею, будет ли это работать.) Файлы базы данных расположены где-то вроде /var/lib/mysql. Только не забудьте, когда вы закончите, чтобы изменить их обратно на что-то, с чем mysqld сможет работать!

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...