mysqlimport: ошибка: 1045, доступ запрещен
Кто-нибудь знает, почему я получаю эту ошибку при запуске mysqlimport?
mysqlimport -u someone -pwhatever --columns=a,b,c,d,e bar /var/tmp/baz.sql
mysqlimport: Error: 1045, Access denied for user 'someone'@'%' (using password: YES), when using table: baz
Тем не мение...
mysql -u someone -pwhatever
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 199
Server version: 5.1.41-3ubuntu12.10 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show grants;
+------------------------------------------------------------------------------------------------------------+
| Grants for someone@% |
+------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'someone'@'%' IDENTIFIED BY PASSWORD '*BLAHBLAHBLAH' |
| GRANT ALL PRIVILEGES ON `bar`.* TO 'someone'@'%' |
+------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql>
5 ответов
Итак, получается, что привилегия FILE является "глобальной" привилегией, что, очевидно, означает, что вы не можете выборочно включить ее в определенных базах данных, таблицах. и т.д. Вот почему мое предыдущее заявление о предоставлении гранта для бара.* не имело никакого эффекта:
GRANT ALL PRIVILEGES ON `bar`.* TO 'someone'@'%'
Вы должны предоставить привилегии FILE на *.*
:
GRANT FILE ON *.* to 'someone'@'%';
Надеюсь, это кому-нибудь поможет.
Вы можете избежать необходимости в дополнительных привилегиях, используя параметр --local для mysqlimport:
--local, -L
Read input files locally from the client host.
Некоторые вместо этого предпочли бы эту команду, пропуская дополнительный грант FILE.
mysql -u username -p <yourdbname> < yourfile.sql
mysqlimport - это интерфейс командной строки для оператора LOAD DATA INFILE, для которого вам нужна привилегия "FILE" (уровень сервера).
Из синтаксиса LOAD DATA INFILE:
Also, to use LOAD DATA INFILE on server files, you must have the FILE privilege.
TLDR: используйте аргумент `--set-gtid-purged=OFF` в MySQLDump.
При выполненииmysqldump -u username -p
чтобы создать файл, который вы собираетесь импортировать в другом месте, введите аргумент--set-gtid-purged=OFF
.
GTID необходимы для репликации и, вероятно, не применяются к тому, что вы делаете, если вы просто хотите скопировать/вставить БД 1 в БД 2.
Общая помощь по отладке
Мой процесс отладки здесь немного отличался от того, что делали другие. Я предлагаю это для отладки: измените свой.sql
к простейшей возможной вещи, может быть, всего к одному единственномуCREATE TABLE
оператор и посмотрите, работает ли он.
Если он работает, то вы хотите удалить из файла импорта SQL следующие вещи:
- Любая настройка линии
@@GLOBAL.GTID
. -
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
-
SET @@SESSION.SQL_LOG_BIN= 0;
-
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
Как вы можете видеть, это много вещей GTID , которые представляют собой информацию об идентификаторе транзакции, используемую для выполнения репликации. Таким образом, это важно при репликации сервера, но не при копировании-вставке одной БД в другую БД, и в этом случае мы можем их удалить.