Ошибка: mysqldump: 1044 Access denied when using LOCK TABLES

В такой статье речь пойдет об ошибке 1044 Access denied when using LOCK TABLES, которую вы сможете получить при попытке сделать запасную копию при помощи утилиты mysqldump.

Описание

Всецело текст ошибки смотрится последующим образом:

mysqldump: Got error: 1044: Access denied for user ‘user’@’localhost’ to database ‘database_name’ when using LOCK TABLES

Как видно из текста ошибки, трудность состоит в том, что пользователь, под которым вы пытаетесь сделать запасную копию, не владеет правами на «LOCK TABLES». Вот что гласит мануал, по данному поводу:

mysqldump requires at least the SELECT privilege for dumped tables, SHOW VIEW for dumped views, TRIGGER for dumped triggers, and LOCK TABLES if the —single-transaction option is not used. Certain options might require other privileges as noted in the option descriptions.
For each dumped database, lock all tables to be dumped before dumping them. The tables are locked with READ LOCAL to permit concurrent inserts in the case of MyISAM tables. For transactional tables such as InnoDB, —single-transaction is a much better option than —lock-tables because it does not need to lock the tables at all.
Because —lock-tables locks tables for each database separately, this option does not guarantee that the tables in the dump file are logically consistent between databases. Tables in different databases may be dumped in completely different states.

Исправляем ошибку

Как видно из описания, решить данную проблему можно как минимум двумя разными способами.

Способ (быстрый)

Достаточно добавить к mysqldump аргумент --single-transaction, т.е. целиком команда для создания резервной копии будет выглядеть примерно так:

mysqldump -u user -p --single-transaction database_name > database_backup.sql

Способ (чуть дольше)

Необходимо просто выдать тому пользователю (в нашем примере «user»), под которым мы пытаемся создать резервную копию права на «LOCK TABLES» на ту базу(-ы), резервную копию которой(-ых), мы пытаемся создать. Для этого, необходимо подключиться под учетной записью root к MySQL серверу и выдать нужные права. Делается это следующим образом:
1) Подключаемся к MySQL серверу под учетной записью root

mysql -u root -p

2) Выдаем нужные права для пользователя, под которым мы пытаемся сделать резервную копию

GRANT LOCK TABLES ON database_name.* TO 'user'@'localhost';

database_name — название базы данных, резервную копию которой вы пытаетесь сделать, необходимо поменять на то, которое подходит для вашего случая.
user — имя пользователя под которым вы пытаетесь сделать резервную копию, необходимо поменять на то, которое подходит для вашего случая.
3) Отключаемся

exit;

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *