因爲筆者只測試過Ubuntu 16.04.四、Ubuntu 19.04和Debian 9,此方法不肯定在其餘版本下適用。mysql
本文章介紹的方法一樣適用於這樣的錯誤信息。sql
➜ ~ mysql -u root -p Enter password: ERROR 1698 (28000): Access denied for user 'root'@'localhost'
某些發行版本,使用包管理器安裝MySQL後,查看這個文件能夠看到安裝後的默認密碼/etc/mysql/debian.cnf
,這個密碼是屬於debian-sys-maint
的,而非root
。
即便在這裏你可能可使用root用戶登陸,由於root用戶默認登陸方式是使用socket鏈接,而不驗證密碼。數據庫
若是須要修改先使用debian-sys-maint
登陸數據庫,完成如下操做網絡
select user, plugin from mysql.user;
查看默認的鏈接方式。auth_socket
(MySQL)的鏈接方式,則繼續下面得步驟,若是是unix_socket
(MariaDB),則轉到MariaDB的處理方法。update mysql.user set authentication_string=password('root'), plugin = 'mysql_native_password' where user = 'root';
使用這一行明令將root密碼修改成root。flush privileges;
應用權限。上面的方法僅針對MySQL測試。
MariaDB的root默認鏈接方式是unix_socket
(MariaDB)
在Debian中軟件包mysql已經替換成了mariadb了。在安裝後/etc/mysql/debian.cnf
預設了root用戶使用socket的鏈接方式,因此不輸入密碼也可在命令行直接使用mysql命令登陸。
要想使用密碼鏈接須要修改鏈接方式socket
select user, plugin from mysql.user
查看默認的鏈接方式。unix_socket
(MariaDB),則繼續下面得步驟。mysqld_safe --skip-grant-tables
放入後臺,並進入mysql
。update mysql.user set authentication_string = password('root'), plugin = 'mysql_native_password' where user = 'root';
。flush privileges;
應用權限。/etc/mysql/mariadb.conf.d/50-server.cnf
中的bind-address
爲容許的網絡地址,若爲整個網絡則填入0.0.0.0
或註釋掉/etc/mysql/mysql.conf.d/mysqld.cnf``/etc/mysql/my.cnf
中的bind-address
爲容許的網絡地址,若爲整個網絡則填入0.0.0.0
或註釋掉use mysql;
進入mysql表grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
容許root用戶遠程使用root爲密碼鏈接。flush privileges;