# 安装 **Linux** ```shill # centos $ sudo yum install mysql-server # ubuntu $ sudo apt-get install mysql ``` # linux 安装mysql、mariadb的坑 把mysql安装好以后准备连接, 却遇到了这样的问题。 ``` ERROR 1698 (28000): Access denied for user 'root'@'localhost' ``` 十分令人抓狂,每次都是好了伤疤忘了疼, 不长记性 这次把它记录一下 ## 被禁止访问的原因 1. mysql默认`auth_socket`登录鉴权 2. 未初始化数据库、设置默认密码 ## 解决办法 **1.mysql默认`auth_socket`登录鉴权** `auth_socket` 是免密码登录的方式。 因此密码登录需要把它改成`mysql_native_password` ```bash $ sudo mysql -u root # 需要使用“sudo”,因为是新安装的 mysql> USE mysql; mysql> SELECT User, Host, plugin FROM `user`; +------------------+-----------------------+ | User | plugin | +------------------+-----------------------+ | root | auth_socket | | mysql.sys | mysql_native_password | | debian-sys-maint | mysql_native_password | +------------------+-----------------------+ mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root'; mysql> FLUSH PRIVILEGES; # 刷新权限 ``` **2.未初始化数据库、设置默认密码** 新安装的mysql是没有密码的, 可以通过命令初始化设置密码和配置远程登录等 ```bash $ sudo mysql_secure_installation # 需要使用“sudo”,因为是新安装的 ```