通过 show variables 命令查看当前 mysql 是否是区分大小写,如下:
mysql> show variables like '%case_table%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_table_names | 0 |
+------------------------+-------+
1 row in set (0.00 sec)注意:
lower_case_table_names=1 表示 mysql 是不区分大小写的
lower_case_table_names=0 表示 mysql 是区分大小写的
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 服务停止。执行下面命令:
hxstrive@course:/var/lib$ sudo systemctl stop mysql.service为了方便查看 mysql 的错误日志,可以先将 /var/log/mysqld.log 删除。命令如下:
hxstrive@course:/var/lib$ sudo rm /var/log/mysqld.log将 mysql 数据库中的系统数据库和用户数据库都删除掉,执行下面命令:
(1)查看 /var/lib/mysql 目录下面的内容
hxstrive@course:/var/lib$ sudo ls mysql
auto.cnf binlog.000006 client-cert.pem ib_logfile0 private_key.pem undo_001
binlog.000001 binlog.000007 client-key.pem ib_logfile1 public_key.pem undo_002
binlog.000002 binlog.000008'#ib_16384_0.dblwr' '#innodb_temp' server-cert.pem
binlog.000003 binlog.index'#ib_16384_1.dblwr' mysql server-key.pem
binlog.000004 ca-key.pem ib_buffer_pool mysql.ibd sys
binlog.000005 ca.pem ibdata1 performance_schema test(2)递归删除 /var/lib/mysql 目录下面的内容
hxstrive@course:/var/lib$ sudo rm -rf mysql上面将已存在的数据库目录 /var/lib/mysql 删除,下面将手动创建一个空目录且进行授权。命令如下:
(1)手动创建一个 mysql 目录,即上面刚刚删除的 mysql 目录
hxstrive@course:/var/lib$ sudo mkdir mysql(2)为 /var/lib/mysql 目录授权,设置目录的所属用户和所属组
hxstrive@course:/var/lib$ sudo chown -R mysql:mysql mysql(3)查看目录详细信息,授权成功
hxstrive@course:/var/lib$ ll | grep mysql
drwxr-xr-x 2 mysql mysql 4096 3月 17 12:42 mysql/
drwxrwx--- 2 mysql mysql 4096 3月 16 13:32 mysql-files/
drwxr-x--- 2 mysql mysql 4096 3月 16 13:32 mysql-keyring/使用 vim 编辑器编辑 /etc/mysql/mysql.conf.d/mysqld.cnf 文件,如下:
hxstrive@course:/etc/mysql$ sudo vim mysql.conf.d/mysqld.cnf在文件中的最后一行添加 lower_case_table_names 配置,配置如下:
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
# 刚刚添加的配置
lower_case_table_names = 1保存配置信息。
执行如下命令初始化 mysql 数据库:
hxstrive@course:/etc/mysql$ sudo mysqld --defaults-file=/etc/mysql/my.cnf --initialize --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysqlhxstrive@course:/etc/mysql$ sudo systemctl start mysql.service由于上面执行了 MySql 初始化操作,曾经的密码已经不能用了。MySQL 将在初始化过程中创建临时密码,临时密码存储在 /var/log/mysql/error.log 中。
(1)使用 cat 和 grep 命令配合查找,命令如下:
hxstrive@course:/var/log/mysql$ sudo cat error.log | grep password
2022-03-17T04:45:44.640510Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: qJhapdkn5_ui注意:上面的 qJhapdkn5_ui 就是临时密码
(2)使用临时密码登录 MySql
hxstrive@course:~/Desktop$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.27
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>(3)修改用户密码,将密码修改为 aaaaaa
mysql> alter user 'root'@'localhost' identified with mysql_native_password by 'aaaaaa';
Query OK, 0 rows affected (0.01 sec)注意:其中 MYSQL_NATIVE_PASSWORD 是由于客户端连接 MySQL 时提示 “plugin caching_sha2_password” 错误,把 plugin 换成MYSQL_NATIVE_PASSWORD 后就没问题。
(4)确认配置是否生效
mysql> show variables like '%lower_case%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | OFF |
| lower_case_table_names | 1 |
+------------------------+-------+
2 rows in set (0.01 sec)