ubuntu20上使用mysql8,关联database,auth_socket,mysql_native_password,mariadb,arch,manjaro

安装

1
2
sudo apt update
sudo apt install mysql-server

安装完成后,系统自动启动mysql

1
2
$ sudo systemctl is-enabled mysql
enabled

运行 sudo mysql 直接以 root@localhost 身份登录mysql,不需要输入密码。

应为 root 默认使用的认证插件是 auth_socket / Unix auth_socket plugin ,也就是使用系统用户认证模式。

初始化安全设置

sudo mysql_secure_installation

  1. 是否设置VALIDATE PASSWORD component
  2. 选择密码的强度要求: 选 2=STRONG (numeric, mixed case, special characters and dictionary)
  3. 下面就让输入root的密码了。
  4. 后面就是删除匿名帐号、测试库之类的,按照提示就好。

实际上面即使设置了root密码,也没法使用root帐号密码登录mysql。参见: 解决无法使用帐号密码登录root

技巧

arch linux 连接 mysql server

在arch 上 mariadb 替代 oracle mysql

1
2
3
4
5
6
sudo pacman -S mariadb-clients

$ mysql --version
mysql  Ver 15.1 Distrib 10.7.3-MariaDB, for Linux (x86_64) using readline 5.1

# 能连上 mysql  Ver 8.0.28-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))

开启 3306 非本机登录

修改 /etc/mysql/mysql.conf.d/mysqld.cnf

1
2
[mysqld]
bind-address            = 127.0.0.1

改为

1
2
[mysqld]
bind-address            = 0.0.0.0

最后,重启mysql, sudo systemctl restart mysql.service

解决无法使用帐号密码登录root

root 默认使用的认证插件是 auth_socket, 运行 sudo mysql 直接以 root@localhost 身份登录mysql,不需要输入密码。

但是,root帐号无法通过设置在mysql的密码登录:

1
2
3
$ mysql -u root -p
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
  • 解决方法
  1. 查看当前认证方式为: auth_socket
    1
    2
    3
    4
    5
    6
    7
    8
     mysql> USE mysql;
     mysql> SELECT User, Host, plugin FROM mysql.user;
    
     +------------------+-----------+-----------------------+
     | User             | Host      | plugin                |
     +------------------+-----------+-----------------------+
     | root             | localhost | auth_socket           |
     +------------------+-----------+-----------------------+
    
  2. sudo mysql 登录进去修改登录方式和密码:

    1
    2
    3
    4
    5
    6
     mysql> USE mysql;
    
     ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password'; 
    
     mysql> FLUSH PRIVILEGES;
     mysql> exit;
    
  3. 重启 mysql

    1
     sudo systemctl restart mysql.service
    
  4. 查看当前认证方式为: mysql_native_password

    1
    2
    3
    4
    5
    6
    7
    8
     mysql> USE mysql;
     mysql> SELECT User, Host, plugin FROM mysql.user;
    
     +------------------+-----------+-----------------------+
     | User             | Host      | plugin                |
     +------------------+-----------+-----------------------+
     | root             | localhost | mysql_native_password |
     +------------------+-----------+-----------------------+
    
  5. 就可以使用密码登录root了

修改密码等级,使能设置简单6位数密码

# 显示当前mysql 密码策略
mysql> SHOW VARIABLES LIKE 'validate_password%';

# 设置密码的强度验证等级为LOW
mysql> set global validate_password.policy=LOW;

# 设置密码长度为6
mysql> set global validate_password.length=6;