我使用Ubuntu服务器16.04(xenial)和Mysql 14.14 Distrib 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
文件的重量为22mb,就像网站的常规sql备份一样,所以操作似乎很成功。
我还登录了 mysql控制台,并为test
网站创建了一个授权的,所有权限最高的数据库用户和实例:
CREATE user "test"@"localhost" IDENTIFIED BY "${sps}";
CREATE database test;
GRANT ALL PRIVILEGES ON test.* TO test@localhost;
注意:rps
和sps
代表"(mysql)root密码"和#34;(mysql)网站密码"。回应两者都显示正确的值。
然后我退回到Ubuntu控制台。
在/var/www/html/
时,我尝试导入我的test.sql
文件到其相应的数据库实例中:
mysql -u test -p"${sps}" < test.sql
然而,我的导入操作失败了。
我也尝试了这种导入语法:
mysql -u test -p"${sps}" test < test.sql
两个导入操作均以完全相同的错误失败:
ERROR 1045(28000):拒绝用户访问&#39;测试&#39; localhost&#39; (使用 密码:是)
当我似乎使用正确的密码时,为什么我会被拒绝访问?
我强调我已经仔细检查并确保${sps}
按echo ${sps}
保留了正确的密码。
即使此会话包含代码的主要部分you can view the entire code here。
似乎问题是由于在创建用户时未扩展变量:
CREATE user "test"@"localhost" IDENTIFIED BY "${sps}";
我在手动创建具有密码的用户时已经确认了这一点。来自变量的密码只是不会计数。
答案 0 :(得分:0)
它发生的原因是因为变量$ {sps}没有在Mysql shell中扩展; Mysql shell不是bash,不包括变量扩展的这种行为(在这种情况下,类型变量替换)。