我在Django上使用MySQL,一切正常。
这是我的Django数据库配置 -
DATABASES['default'] = {
'ENGINE': 'django.db.backends.mysql',
'USER': 'putty',
'PASSWORD': 'putty',
'HOST': '127.0.0.1',
'NAME': 'putty',
}
这就是我在MySQL中用来创建数据库和用户的内容 -
CREATE DATABASE putty CHARACTER SET = 'utf8';
CREATE USER 'putty'@'localhost' IDENTIFIED BY 'putty';
GRANT ALL PRIVILEGES ON putty.* TO 'putty'@'localhost' WITH GRANT OPTION;
然而,当我安装MariaDB时,擦除了我的MySQL数据目录,并尝试了上述操作,我无法再连接到我的数据库。
Django说 -
OperationalError: (1049, "Unknown database 'putty'")
如果我改变我的Django数据库配置 -
'HOST': 'localhost',
它工作正常(但是,这不可行,因为它不适用于我们的MySQL生产)。
如何强制MariaDB使用127.0.0.1的主机?
我尝试删除用户并使用127.0.0.1的主机重新创建它,但MariaDB不允许我这样做。
以putty@127.0.0.1
-
mysql -u putty -h 127.0.0.1 -p
SHOW DATABASES;
我只能看到一个数据库(information_schema
)。
然而,作为putty@localhost
,我可以看到它们。怪异。
即使以root@127.0.0.1
身份登录,我也无法创建数据库。
当我设置--protocol=TCP
时,我得到了同样的结果;然而,--protocol=SOCKET
事情正常。
答案 0 :(得分:1)
localhost
在MariaDB / MySQL上下文中很特别。它选择UNIX域套接字连接。 127.0.0.1使用TCP / IP连接。它们完全不同。您的权限需要明确说明,因此除了'putty'@'localhost'
之外,您还需要包含'putty'@'127.0.0.1'
。另请注意,它们是不同的用户,可以具有不同的权限和不同的密码 - 并且它们引用不同的连接方法。
此外,您需要确保MariaDB正在侦听127.0.0.1。这通常是默认设置,但较旧的迁移配置可能仍会在 my.cnf 中设置 skip-networking 。如果已设置,您需要对其进行评论。较新的配置将绑定到本地环回:
bind-address = 127.0.0.1
这应该足以确保它通过127.0.0.1
接受用户(具有正确的权限)