今天我以root身份登录Ubuntu 14.04.1 LTS ll
然后apt-get install mariadb-server
(没有sudo但是作为root)。
mySQL -h localhost -u root --password=<PW>
我得到了
拒绝访问用户'root'@'localhost'(使用密码:YES)
使用mySQL -u root -p
我登录了数据库并执行了
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<PW>';
FLUSH ALL PRIVILEGES;
但这没有用。你有什么想法吗? 我没有找到类似问题的答案。
答案 0 :(得分:202)
TL; DR:要以root用户身份访问较新版本的mysql / mariadb,在新安装之后,您需要位于root shell中(即sudo mysql -u root
,或者mysql -u root
内部的su -
sudo -i
或sudo /usr/bin/mysql_secure_installation
首先启动
刚刚在Ubuntu上进行了相同的升级,我遇到了同样的问题。
奇怪的是
root
接受我的密码,并允许我进行设置,但我无法通过mysql
客户端<{1}}登录
我必须用
开始mariadbsudo mysqld_safe --skip-grant-tables
以root用户身份访问,而所有其他用户仍然可以正常访问。
查看我注意到的mysql.user
表,plugin
列设置为unix_socket
,而所有其他用户设置为'mysql_native_password'。快速浏览一下这个页面:https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/解释说,Unix Socket通过匹配运行客户端的进程uid
与mysql.user
表中用户的进程匹配来启用登录。换句话说,要将mariadb作为root
访问,您必须以root用户身份登录。
果然重启我的mariadb守护进程需要身份验证我可以用root身份登录
sudo mysql -u root -p
或
sudo su -
mysql -u root -p
完成这个后,我想到了如何访问而无需执行sudo,这只是运行这些mysql查询的问题
GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
(用您想要的mysql root密码替换<password>
)。这为root用户启用了密码登录。
或者运行mysql查询:
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
FLUSH PRIVILEGES;
将root帐户更改为使用密码登录而不更改密码,但这可能会让您使用没有root密码的mysql / mariadb安装。
在其中任何一个之后你需要重新启动mysql / mariadb:
sudo service mysql restart
我可以通过mysql -u root -p
请注意,这样做会降低安全性据推测,MariaDB开发人员选择像这样的root访问工作是有充分理由的。
考虑一下我很高兴得到sudo mysql -u root -p
所以我转回到那个,但我想我会发布我的解决方案,因为我在其他地方找不到。
答案 1 :(得分:33)
在干净的Ubuntu 16.04 LTS中, localhost 的MariaDB root 登录名从密码样式更改为sudo登录样式...
所以,只需做
sudo mysql -u root
由于我们要使用密码登录,请创建其他用户&#39;
在MariaDB控制台中...(你使用&#39; sudo mysql -u root&#39;进入MariaDB控制台)
use mysql
CREATE USER 'user'@'localhost' IDENTIFIED BY 'yourpassword';
\q
然后在bash shell提示符下,
mysql-workbench
您可以使用&#39; user&#39;使用&#39; yourpassword&#39;在localhost上
答案 2 :(得分:7)
尝试命令
sudo mysql_secure_installation
按Enter并在 mysql / mariadb 中为 root 分配新密码。
如果您收到错误
ERROR 2002(HY000):无法通过套接字连接到本地MySQL服务器 &#39; /var/run/mysqld/mysqld.sock'
使用
启用服务service mysql start
现在,如果您使用
重新进入mysql -u root -p
如果您按照问题输入sudo su
,mysql -u root -p
现在将权限应用于 root
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<password>';
这解决了 MariaDB 中的问题。
祝你好运答案 3 :(得分:3)
我必须以root身份登录Ubuntu才能以root用户身份访问Mariadb。它可能与那些相关&#34;哈登......&#34;它首次安装时会提示您执行此操作。所以:
func isValid(url: URL) -> Bool {
guard let host = url.host else { return false }
let urlDomainComponents = host.reverseDNSComponents
// Make sure that the suffix of the host is in the list of valid domains
return validDomainComponents
.contains { Array(urlDomainComponents.prefix($0.count)) == $0 }
}
你在。
答案 4 :(得分:3)
来自超级用户accepted answer:
sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;
答案 5 :(得分:2)
我曾经遇到过类似的问题。在我的情况下,它发生是因为我以某种方式损坏了MySQL服务器的用户表。
这篇文章帮助了我:mysql-how-to-fix-Access-denied-for-user-'root'@'localhost'
基本上你必须重置root用户。
答案 6 :(得分:1)
刷新权限的新命令是:
FLUSH PRIVILEGES
旧命令FLUSH ALL PRIVILEGES
不再起作用。
您将收到类似的错误:
MariaDB [(none)]> FLUSH ALL PRIVILEGES;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ALL PRIVILEGES' at line 1
希望这会有所帮助:)
答案 7 :(得分:0)
运行mysql_upgrade。
检查
SHOW GRANTS FOR 'root'@'localhost';
说
GRANT ALL PRIVILEGES ON ... WITH GRANT OPTION
检查表是否存在_mysql.proxies_priv _。
答案 8 :(得分:0)
像Ubuntu这样的系统更喜欢使用 auth_socket 插件。它将通过比较您在数据库中的用户名和发出mysql请求的进程来尝试进行身份验证; here
中对此进行了描述套接字插件检查套接字用户名(操作 系统用户名)与客户端指定的MySQL用户名匹配 程序连接到服务器,并且仅当名称 匹配。
相反,您可能想返回 mysql_native_password ,这将需要用户/密码进行身份验证。
关于实现该目标的方法,我建议改用this。
答案 9 :(得分:-2)
你只需要使用sudo来实现它
sudo mysql_secure_installation