安装
apt 库有现成的包,直接执行命令安装
sudo apt install mysql-server
配置
执行以下命令
sudo mysql_secure_installation
可能会出现以下报错:
Securing the MySQL server deployment.
Enter password for user root:
Error: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
先重启一下 MySQL 服务
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
执行 start
的时候可能又会报错:
* Starting MySQL database server mysqld
No directory, logging in with HOME=/
mkdir: cannot create directory ‘//.cache’: Permission denied
-su: 19: /etc/profile.d/wsl-integration.sh: cannot create //.cache/wslu/integration: Directory nonexistent
解决办法:
usermod -d /var/lib/mysql/ mysql
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
chown -R mysql:mysql /var/lib/mysql
回到第 2 步,再次执行 sudo mysql_secure_installation
Securing the MySQL server deployment.
Connecting to MySQL using a blank password.
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No: N # 否
Please set the password for root here.
# 设置你的密码
New password:
Re-enter new password:
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
# 是否移除匿名用户
Remove anonymous users? (Press y|Y for Yes, any other key for No) : N
... skipping.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
# 是否禁止 root 远程登录
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : N
... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
# 是否移除 test 数据库
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : N
... skipping.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
# 是否立即刷新表的权限
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.
All done!
配置完成后,重启 MySQL 服务
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
尝试登录
mysql -uroot -p
Enter password:
输入密码后可能又会报错
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
打开 MySQL 配置文件 /etc/mysql/my.cnf
,在 [mysqld]
下新增一行 skip-grant-tables
此操作可以不输入密码登录 MySQL
此处登录不上去并不是密码错误
再次重启 MySQL
免密登录
> mysql -uroot -p
# 直接回车可以登录
> use mysql;
> select user,plugin from user;
# 可以看到 root 用户的 plugin 为 auth_socket,需要修改为 mysql_native_password
> update user set plugin="mysql_native_password" where user="root";
> quit # 退出
打开 MySQL 配置文件 /etc/mysql/my.cnf
,将 skip-grant-tables
注释或者删除
再次重启 MySQL 就可以登录成功了。