我尝试在laravel项目中通过终端创建数据库,它告诉我数据库已创建,但是当我转到phpMyAdmin时找不到它。
mysql> create database house
-> ;
Query OK, 1 row affected (0.06 sec)
mysql> SHOW DATABASES;
ERROR 1449 (HY000): The user specified as a definer ('mysql.infoschema'@'localhost') does
not exist
我当时使用的是MAMP,但无法正常运行,所以我使用Xamp的同时也无法正常运行,
mysql> select user from mysql.user
-> ;
+------------------+
| user |
+------------------+
| mysql.infoschema |
| mysql.session |
| mysql.sys |
| root |
| user |
+------------------+
5 rows in set (0.01 sec)
它给我另一个MAMP phpMyAdmin或Xamp phpMyAdmin中不存在的用户。
有没有一种方法可以成功地连接到MAMP或XAMP phpMyAdmin。
注意:
Laravel项目的IP地址:127.0.0.1与MAMP相同 但Xamp的IP地址为:192.168.64.2
这是我的.env文件:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=pizzahouse
DB_USERNAME=root
DB_PASSWORD=
答案 0 :(得分:1)
以某种方式,您的MySQL用户权限被破坏(mysql.infoschema是MySQL的系统用户,可在内部使用)。它为什么存在但不能在MySQL内部使用的原因尚不清楚,但错误消息显示此内部用户已损坏。从中恢复的最简单方法是重新安装MySQL(通过XAMPP或WAMP或最终选择的任何软件包)。您需要确保删除整个MySQL数据目录(卸载程序应该自动执行该操作,或者询问您有关的信息,我不记得是哪个)。请注意,这会破坏数据库中的所有现有数据,因此,如果您要保留现有数据,则不要继续。
重新安装时,MySQL将正确配置这些必需的系统用户,因此您应该备份并运行。
通常不应该将XAMPP和WAMP并排运行,因为它们或多或少地服务于相同的通用目的,并且冒着它们争夺相同端口和(可能)MySQL数据目录的风险。尽管实际上没有足够的信息要知道,但这可能就是这里发生的事情。 MySQL使用“数据目录”(datadir)将所有数据库文件保存在磁盘上。您的两个服务器(XAMPP和WAMP)最终都使用相同的路径(这可能会导致数据库,表和用户的损坏),这似乎是合理的(尽管可能不太可能)。除此之外,某些怪异的服务器崩溃,磁盘损坏或不正确的SQL命令也可能导致了问题。
可能可以使用mysqld --initialize --user=mysql
(documentation之类的命令来还原现有系统用户,并请注意,您需要在下次登录),但由于存在这种不确定性,我认为从头开始重新安装是一个更安全的选择-再次指出,这将破坏数据库中已经存在的所有数据。