当前位置: 首页 > news >正文

解决MySQL 8.x初始化后设置忽略表和字段大小写敏感的问题

问题背景:

        当在Linux (如:centos)安装并初始化好了MySQL 8.x版本后,发现该数据库存在表和字段启动了大小写敏感的设置,导致之前已写好的应用系统报了大量的表或字段不存在问题。

解决方案:

        在低版本下,我们只需要在linux的my.cnf配置文件的 [mysqld] 段下添加lower_case_table_names=1后重启mysql即可。

        但是,在MySQL 8.x时,采用低版本的方案添加了该配置后,MySQL根本就无法启动了。原因是MySQL 8.x后要求在安装数据库过程中,初始化数据过时就需要指定是否要忽略表和字段大小写敏感,否则,在初始化之后就无法通过低版本的方案来解决了,设置了也会无法正常启动。你可以这样理解,由于初始化数据库时没有启用忽略表和字段大小写敏感参数,在初始化数据库时已按大小写敏感的规则创建了mysql等数据库和表以及数据,所以,你再要求启用忽略表和字段大小写敏感当然是不可以的。为了解决这个问题,我们可以采用以下步骤解决:

1.停止MySQL 8.x:

/mysql/mysql/bin/mysqladmin -u root -p shutdown

输入密码后完成停止。

2.备份MySQL数据库文件目录,如果没啥用就直接删除吧,我这里采用的是数据库目录改名的方式:

mv /mysql/data /mysql/data1

3.重新初始化mysql数据库:

使用 mysql 用户登录 linux 后,重新执行以下命令进行初始化。特别注意,这次一定要指定启动大小写敏感 --lower-case-table-names=1 参数了。

0:表名存储为给定的大小写,比较也是区分大小写的(在大多数Unix/Linux系统上默认);
1:表名存储为小写,比较时不区分大小写(在Windows系统上默认);
2:表名存储为给定的大小写,但比较时不区分大小写(在Mac OS X上默认);

/mysql/mysql/bin/mysqld --initialize --lower-case-table-names=1 --user=mysql --basedir=/mysql/mysql --datadir=/mysql/data

完成以上命令后,可以在/mysql/mysql/mysql.log中看到随机生成的root用户密码,如下所示的 ./e0=d:5u1aR 就是root用户的密码了:

[mysql@centos144 mysql]$ tail mysql.log
2025-03-13T12:39:56.072822Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /tmp/mysqlx.sock
2025-03-13T12:44:20.496597Z 11 [Warning] [MY-013360] [Server] Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'
2025-03-14T00:55:41.645892Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2025-03-14T00:55:41.646612Z 0 [Warning] [MY-010918] [Server] 'default_authentication_plugin' is deprecated and will be removed in a future release. Please use authentication_policy instead.
2025-03-14T00:55:41.646648Z 0 [System] [MY-013169] [Server] /mysql/mysql/bin/mysqld (mysqld 8.0.41) initializing of server in progress as process 44544
2025-03-14T00:55:41.655125Z 0 [Warning] [MY-013907] [InnoDB] Deprecated configuration parameters innodb_log_file_size and/or innodb_log_files_in_group have been used to compute innodb_redo_log_capacity=1073741824. Please use innodb_redo_log_capacity instead.
2025-03-14T00:55:41.657180Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2025-03-14T00:55:42.566133Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2025-03-14T00:55:45.466762Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ./e0=d:5u1aR
2025-03-14T00:55:45.868971Z 6 [Warning] [MY-013360] [Server] Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'
[mysql@centos144 mysql]$

4.修改/etc/my.cnf文件,在 [mysqld] 段下,添加 lower_case_table_names=1 配置项。

[mysqld]
basedir=/mysql/mysql
datadir=/mysql/data
socket=/mysql/mysql/mysql.sock
pid-file=/mysql/mysql/mysql.pid
log-error=/mysql/mysql/mysql.log


# 设置默认字符集为 utf8mb4
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci

# 认证和安全
default_authentication_plugin=mysql_native_password
skip-name-resolve

# 连接参数
port=3306
bind-address=0.0.0.0

# 资源管理
max_connections=500
innodb_buffer_pool_size=1G
innodb_log_file_size=512M
innodb_flush_log_at_trx_commit=1

# 其他优化参数
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
symbolic-links=0

lower_case_table_names=1

# 设置客户端字符集
[client]
default-character-set = utf8mb4

[mysqld_safe]
log-error=/mysql/mysql/mysql.log
pid-file=/mysql/mysql/mysql.pid

5.使用linux的mysql用户启动MySQL(用于修改root密码和创建自己需要的新登录用户)

nohup /mysql/mysql/bin/mysqld > /dev/null 2>&1 &

5.使用root用户登录mysql数据库,并修改root密码,创建自己需要的新登录用户:

/mysql/mysql/bin/mysql -u root -p

输入数据库的root用户的密码 ./e0=d:5u1aR 登录到数据库,在数据库命令行中修改root的密码。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

6.添加root用户可以远程登录mysql数据库,并分配权限

mysql> create user 'root'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.02 sec)

mysql> grant all privileges on *.* to 'root'@'%' with grant option;
Query OK, 0 rows affected (0.01 sec)

至此,问题已解决。可以用mysql客户端远程登录到数据库测试验证问题是否已解决。

启动MySQL:

/mysql/mysql/bin/mysqld_safe --user=mysql &

停止MySQL:

/mysql/mysql/bin/mysqladmin -u root -p shutdown

相关文章:

  • 算法刷题整理合集(二)
  • C题库-判断水仙花数
  • 基于 Redis Stream 实现消息队列功能
  • Java基础关键_021_集合(五)
  • Spring TX配置(声明式事务管理+annotation)
  • 计算矩阵边缘元素之和(信息学奥赛一本通-1121)
  • Python 实现的采集诸葛灵签
  • 研发团队协作软件推荐:18款工具对比
  • win10升级到22H2版本后无法联网
  • 01-Canvas-使用fabric初始
  • 从零搭建微服务项目Pro(第2-2章——JSR303自定义文件校验+整合至微服务公共模块)
  • Java使用JDBC连接操作Sqlite 笔记250314
  • 【算法】 【c++】字符串s1 中删除所有 s2 中出现的字符
  • 总结 HTTP 协议的基本格式, 相关知识以及抓包工具fiddler的使用
  • 67.Harmonyos NEXT 图片预览组件之性能优化策略
  • 【Scala】
  • 论文分享 | HE-Nav: 一种适用于复杂环境中空地机器人的高性能高效导航系统
  • TIA博途在编译 PLC时出现崩溃的解决方法
  • 测不准关系
  • 【redis】zset 类型:基本命令(上)
  • 德州国资欲退出三东筑工,后者大股东系当地房企东海集团
  • 新片|《碟中谍8:最终清算》定档5月30日
  • A股午后拉升,沪指收复3400点:大金融发力,两市成交超1.3万亿元
  • 中国-拉共体成员国重点领域合作共同行动计划(2025-2027)
  • 继71路之后,上海中心城区将迎来第二条中运量公交
  • 睡觉总做梦是睡眠质量差?梦到这些事,才要小心