• 怎么解决MySQL 8.0.18 大小写敏感问题


    1、查看状态

    通过 show variables 命令查看当前 mysql 是否是区分大小写,如下:

    mysql大小写敏感配置相关的两个参数,lower_case_file_system 和 lower_case_table_names。
    查看当前mysql的大小写敏感配置

    show global variables like '%lower_case%';
    
    +------------------------+-------+
    | Variable_name          | Value |
    +------------------------+-------+
    | lower_case_file_system | ON    |
    | lower_case_table_names | 0     |
    +------------------------+-------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    lower_case_table_names=1 表示 mysql 是不区分大小写的
    lower_case_table_names=0 表示 mysql 是区分大小写的

    2、修改配置

    MySQL 8.0 以上版本,大小写敏感配置比较坑,根据官方文档可以发现如下信息:

    lower_case_table_names can only be configured when initializing the server. 
    Changing the lower_case_table_names setting after the server is initialized is prohibited.
    lower_case_table_names 只能在初始化服务器时配置。 禁止在服务器初始化后更改 lower_case_table_names 设置。
    
    • 1
    • 2
    • 3

    lower_case_table_names 配置必须在安装好 MySQL 后,初始化 mysql 配置时才有效。一旦 mysql 启动后,再设置是无效的,而且启动报错。
    需要重新初始化MySQL数据库,并且在初始化过程中,在初始化之前将lower_case_table_names = 1写入到my.cnf文件中

    3、重新初始化MySQL数据库

    3.1、停止服务

    在修改配置之前,请先把 mysql 服务停止。执行下面命令:

    systemctl stop mysqld.service
    
    • 1

    3.2、删除错误日志

    为了方便查看 mysql 的错误日志,可以先将 /var/log/mysqld.log 删除。命令如下:

    rm /var/log/mysqld.log
    
    • 1

    3.3、删除系统数据库与用户数据库

    将 mysql 数据库中的系统数据库和用户数据库都删除掉,执行下面命令:

    (1)查看 /var/lib/mysql 目录下面的内容

    [root@localhost mysql]# ls
    auto.cnf       binlog.000003  binlog.000006  binlog.000009  ca.pem           ib_buffer_pool  ib_logfile1   mysql               phoenix          server-cert.pem  undo_001
    binlog.000001  binlog.000004  binlog.000007  binlog.index   client-cert.pem  ibdata1         ib_logfile2   mysql.ibd           private_key.pem  server-key.pem   undo_002
    binlog.000002  binlog.000005  binlog.000008  ca-key.pem     client-key.pem   ib_logfile0     #innodb_temp  performance_schema  public_key.pem   sys
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    (2)递归删除 /var/lib/mysql 目录下面的内容

    [root@localhost mysql]# rm -rf *
    
    • 1

    3.4、创建数据库目录

    上面将已存在的数据库目录 /var/lib/mysql 删除,下面将手动创建一个空目录且进行授权。命令如下:

    (1)手动创建一个 mysql 目录,即上面刚刚删除的 mysql 目录

    [root@localhost lib]# mkdir mysql
    [root@localhost lib]# ls
    alternatives  dbus      games      logrotate  misc   mysql-files    NetworkManager  plymouth  postfix  rpm-state  stateless  tuned   yum
    authconfig    dhclient  initramfs  machines   mysql  mysql-keyring  os-prober       polkit-1  rpm      rsyslog    systemd    vmware
    
    • 1
    • 2
    • 3
    • 4

    (2)为 /var/lib/mysql 目录授权,设置目录的所属用户和所属组

    [root@localhost lib]# chown -R mysql:mysql mysql
    
    • 1

    (3)查看目录详细信息,授权成功

    [root@localhost lib]# ll|grep mysql
    drwxr-xr-x. 2 mysql   mysql     6 Jul  1 17:01 mysql
    drwxr-x---. 2 mysql   mysql     6 Sep 20  2019 mysql-files
    drwxr-x---. 2 mysql   mysql     6 Sep 20  2019 mysql-keyring
    
    • 1
    • 2
    • 3
    • 4

    3.5、配置 lower_case_table_names

    使用 vim 编辑器编辑 /etc/my.cnf 文件,如下:

    [root@localhost lib]# vim /etc/my.cnf
    
    • 1

    在文件中的最后一行添加 lower_case_table_names 配置,配置如下:

    #是否对sql语句大小写敏感,1表示不敏感
    lower_case_table_names = 1
    
    
    • 1
    • 2
    • 3

    保存配置信息。

    3.6、初始化 MySql

    执行如下命令初始化 mysql 数据库:

    [root@localhost /]# mysqld --defaults-file=/etc/my.cnf --initialize  --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql
    
    • 1

    Tips:注意my.cnf 文件路径是否正确

    3.7、启动 MySql 服务

    systemctl start mysqld.service
    
    • 1

    4、登录 MySql

    由于上面执行了 MySql 初始化操作,曾经的密码已经不能用了。MySQL 将在初始化过程中创建临时密码,临时密码存储在 /var/log/mysql/error.log 中。

    (1)查找临时密码
    使用 cat 和 grep 命令配合查找,命令如下:

    cat /var/log/mysql/mysqld.log |grep temp
    
    • 1

    Tips:如果不确定路径,可以使用find 命令查找mysqld.log 文件
    在这里插入图片描述
    (2)使用临时密码登录 MySql

    mysql -uroot -ppCg3+El.c#ao
    
    • 1

    在这里插入图片描述

    (3)修改root用户密码

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码'
    • 1
    • 这里可能会提示 Your password does not satisfy the current policy requirements,意思是您的密码不符合当前规定的要求,你要么就把你的密码设置得复杂点,要么就去降低密码的校验规则。

    • 在 Linux 上安装 MySQL 时会自动安装一个校验密码的插件,默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。修改密码时新密码是否符合当前的策略,不满足则会提示ERROR;

    • 所以可以将这个限制密码位数设小一点,复杂度类型调底一点

    # 将密码复杂度校验调整简单类型
    set global validate_password.policy = 0;
    # 设置密码最少位数限制为 9set global validate_password.length = 9;
    
    • 1
    • 2
    • 3
    • 4

    就可以设置较为简单的密码了。

    在这里插入图片描述

    (4) 创建用户与权限分配

    默认的 root 用户只能当前节点localhost访问,是无法远程访问的

    在这里插入图片描述
    创建用户命令:

    语法格式:CREATE USER <用户名> [ IDENTIFIED ] BY [ PASSWORD ] <口令>
    
    • 1
    # mysql 8.0 以下
    create user 'siteweb'@'%' IDENTIFIED BY 'siteweb1!';
    create user 'siteweb'@'%' identified by 'siteweb1!'; #授予root远程权限
    # mysql 8.0
    create user 'siteweb'@'%' IDENTIFIED WITH mysql_native_password BY 'siteweb1!';
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Tips: mysql8.0 的默认密码验证不再是 password 。所以在创建用户时,create user ‘username’@‘%’ identified by ‘password’; 客户端是无法连接服务的,所以在创建用户的时候需要加上 WITH mysql_native_password

    在这里插入图片描述
    创建完用户之后还需要给用户分配权限

    grant all privileges on *.* to 'siteweb'@'%';  #给root用户授予远程权限
    flush privileges; #刷新权限
    
    • 1
    • 2
    mysql> grant all privileges on *.* to 'siteweb'@'%';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> grant all privileges on *.* to 'root'@'%';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select host,user from user;
    +-----------+------------------+
    | host      | user             |
    +-----------+------------------+
    | %         | root             |
    | %         | siteweb          |
    | localhost | mysql.infoschema |
    | localhost | mysql.session    |
    | localhost | mysql.sys        |
    | localhost | root             |
    +-----------+------------------+
    6 rows in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    5、确认配置是否生效

    mysql> show global variables like '%lower_case%';
    +------------------------+-------+
    | Variable_name          | Value |
    +------------------------+-------+
    | lower_case_file_system | OFF   |
    | lower_case_table_names | 1     |
    +------------------------+-------+
    2 rows in set (0.00 sec)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    XUbuntu22.04之安装pkg-config(一百九十二)
    Bitcoin+STARK: ZeroSync & Khepri
    TypeScript 泛型及应用
    C++ 面试资料总结(全)
    Cython代码加密, 使用 Cython 将 Python 代码编译为二进制(将整个Django项目编译成功并部署)
    【Java】JAVASE面向对象知识点总结
    这玩意也太猛了!朋友们,我在此严正呼吁大家:端好饭碗,谨防 AI!
    开发人员新常态:和云原生相爱相杀
    Java的原子性操作
    uni-app实现路由拦截 请求封装
  • 原文地址:https://blog.csdn.net/qq_22938603/article/details/125569061