【MySQL 11】怎么解决MySQL 8.0.18 大小写敏感问题

2023-05-16

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     |
+------------------------+-------+

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 设置。

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

3、重新初始化MySQL数据库

3.1、停止服务

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

systemctl stop mysqld.service

3.2、删除错误日志

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

rm /var/log/mysqld.log

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

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

[root@localhost mysql]# rm -rf *

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

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

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

(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

3.5、配置 lower_case_table_names

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

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

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

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

保存配置信息。

3.6、初始化 MySql

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

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

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

3.7、启动 MySql 服务

systemctl start mysqld.service

4、登录 MySql

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

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

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

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

mysql -uroot -ppCg3+El.c#ao

在这里插入图片描述

(3)修改root用户密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码'
  • 这里可能会提示 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;

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

在这里插入图片描述

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

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

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

语法格式:CREATE USER <用户名> [ IDENTIFIED ] BY [ PASSWORD ] <口令>
# 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!';

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

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

grant all privileges on *.* to 'siteweb'@'%';  #给root用户授予远程权限
flush privileges; #刷新权限
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)

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)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【MySQL 11】怎么解决MySQL 8.0.18 大小写敏感问题 的相关文章

随机推荐