Я использую сервер Ubuntu 16.04 (xenial) с Mysql 14.14. Распространяется 5.7.20 (x86_64) с оберткой EditLine.
У меня есть сайт Wordpress /var/www/html/${domain}/
который я дублировал с помощью cp
в /var/www/html/test/
и изменил wp-config.php
соответственно.
Я экспортировал резервную копию базы данных из ${domain}
следующим образом:
mysqldump -u root -p"${rps}" "${domain}" > /var/www/html/test.sql
Этот файл test.sql
весит 22 Мб, как обычная резервная копия сайта, поэтому операция кажется успешной.
Я также зашел в консоль mysql и создал авторизованный пользователь и экземпляр DB с привилегированными правами для test
сайта:
CREATE user "test"@"localhost" IDENTIFIED BY "${sps}";
CREATE database test;
GRANT ALL PRIVILEGES ON test.* TO test@localhost;
Примечание: rps
и sps
означают "пароль пользователя root" и "(mysql)".Повторяющиеся оба показывают правильные значения.
Затем я вернулся к консоли Ubuntu.
Хотя в /var/www/html/
я пытался импортировать свой файл test.sql
в соответствующий экземпляр DB:
mysql -u test -p"${sps}" < test.sql
И все же моя операция импорта не удалась.
Я также попробовал этот синтаксис импорта:
mysql -u test -p"${sps}" test < test.sql
Обе операции импорта завершились с той же ошибкой:
ERROR 1045 (28000): доступ запрещен для пользователя 'test' @'localhost' (с использованием пароля: YES)
Почему мне будет отказано в доступе, если я использую правильный пароль?
Я подчеркиваю, что я дважды проверял и гарантировал, что ${sps}
содержит правильный пароль с помощью echo ${sps}
.
Хотя этот сеанс включает в себя основные части кода, вы можете просмотреть весь код здесь.
Похоже, что проблема связана с тем, что переменная не расширяется при создании пользователя:
CREATE user "test"@"localhost" IDENTIFIED BY "${sps}";
Я подтвердил это, когда вручную создавал пользователя с паролем. Пароли от переменных просто не будут учитываться.
Причина этого в том, что переменная $ {sps} не расширилась внутри оболочки Mysql; Оболочка Mysql не является bash и не включает в себя такое поведение расширения переменной (в данном случае подстановки переменных типа).