Постоянная блокировка таблицы MySQL

Из того, что я прочитал в следующем: http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html, оператор LOCK TABLES подходит только для текущего сеанса. Как я могу навсегда заблокировать определенные таблицы, чтобы сделать их доступными только для чтения для всех сеансов подключения, пока я не разблокирую их явно?


person Michael Sheaver    schedule 12.11.2013    source источник
comment
Я не верю, что ты сможешь. Какую проблему вы пытаетесь решить?   -  person Flimzy    schedule 12.11.2013
comment
Я привожу несколько больших наборов данных для проведения детального анализа и хочу убедиться, что исходные данные не изменяются после импорта.   -  person Michael Sheaver    schedule 12.11.2013


Ответы (2)


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

Что-то вроде этого:

REVOKE DROP, INSERT, TRUNCATE ON database.table FOR 'user'@'host'
person Rahul Tripathi    schedule 12.11.2013
comment
Спасибо, Рахул, похоже, это мой лучший вариант. - person Michael Sheaver; 12.11.2013

Для таких больших и трудоемких операций хорошим вариантом может быть копирование данных в новое место для выполнения ваших манипуляций. По сути, это создает моментальный снимок данных, оставляя базу данных беспрепятственной (и, возможно, по-прежнему принимая чтение и запись), пока вы выполняете свою операцию.

  1. Остановить MySQL
  2. Скопируйте файлы данных в новое место.
  3. Перезапустите MySqL
  4. Выполните манипуляции с копией данных.
  5. Удалить копию (с помощью DROP TABLE)
person Flimzy    schedule 12.11.2013