我已经安装了ubuntu 16.04服务器。默认安装Mysql服务器。当我尝试使用mysql -u root -p
访问mysql时,我无法登录到mysql,因为我没有密码。有没有默认密码?
我也尝试过--skip-grant-tables
,即使这样也行不通。即使尝试使用mysql -u root
登录也是失败的。
这就是你要找的东西:
sudo mysql --defaults-file=/etc/mysql/debian.cnf
基于Debian的Linux上的MySql通常使用带有凭据的配置文件。
默认情况下,Mysql将root用户的身份验证插件设置为auth_socket
,这需要系统用户名和db用户名相同。
具体来说,以root或sudo -i
身份登录,只需键入mysql
,您将以mysql root
身份登录,然后您可以创建其他操作用户。
如果你在主机上没有root,我想你不应该被允许以root用户身份登录mysql?
我在Ubuntu 18.10上安装了全新的mysql-server
,无法使用默认密码登录。然后我才知道默认情况下root用户使用auth_socket
进行身份验证。因此在插件改为mysql_native_password
的答案中,我们可以使用mysql默认密码
$ sudo apt install mysql-server
$ sudo cat /etc/mysql/debian.cnf
你可以在那里找到以下几行
user = debian-sys-maint
password = password_for_the_user
然后:
$ mysql -u debian-sys-maint -p
Enter password:
输入debian.cnf的密码
mysql> USE mysql
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| User | Host | plugin |
+------------------+-----------+-----------------------+
| root | localhost | auth_socket |
| mysql.session | localhost | mysql_native_password |
| mysql.sys | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> COMMIT;
或者:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
要么:
//对于MySQL 5.7+
mysql>UPDATE mysql.user SET authentication_string=PASSWORD('new_password') where user='root';
您可以通过使用--skip-grant-tables运行服务器并通过以root身份或使用sudo运行以下命令而无需密码登录来简单地重置root密码:
service mysql stop
mysqld_safe --skip-grant-tables &
mysql -u root
mysql> use mysql;
mysql> update user set authentication_string=PASSWORD("YOUR-NEW-ROOT-PASSWORD") where User='root';
mysql> flush privileges;
mysql> quit
# service mysql stop
# service mysql start
$ mysql -u root -p
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root
尝试这种方式,我已经用这种方法解决了我的问题。我认为另一个值得关注的地方是/var/lib
。如果你去那里你可以看到三个具有'有趣'权限的mysql文件夹:
user group
mysql mysql
以下是我用root密码解决问题的方法:
跑完之后
sudo apt-get purge mysql*
sudo rm -rf /etc/mysql
我还运行了以下内容(而不是my_username放置你的):
cd /var/lib
sudo chown --from=mysql <my_username> mysql* -R
sudo rm -rf mysql*
然后:
sudo apt-get install mysql-server
这促使我选择了一个新的root密码。我希望它有所帮助
只需运行sudo dpkg-reconfigure mysql-server-5.7
您可以通过运行dpkg --get-selections | grep mysql-server
找到已安装的版本
虽然这是一个老问题,但我们中的一些人仍然很难找到答案。至少我做到了。请不要遵循所有冗长的解决方案。您可以通过在mysql命令之前添加sudo,以root身份登录到您的mysql而不提供任何密码(前提是它是全新的安装,或者您的安装后没有更改密码)。 $sudo mysql -uroot -p
mysql>
这是因为mysql在其中一个最新版本中更改了安全模型。
希望这可以帮助