mysql8 不区分大小写6_mysql8大小写不明感

--背景知识:

MySQL8.0 新增了data dictionary的概念,数据初始化的时候在linux下默认使用lower-case-table-names=0的参数,数据库启动的时候读取的my.cnf文件中的值。若二者值不一致则在mysql的错误日志中记录报错信息。

在MySQL 5.7之前则允许数据库初始化和启动的值不一致且以启动值为准。

在MySQL 官方提供的RPM包中默认是使用lower-case-table-names=0,不太适合生产环境部署。在生产环境建议使用官方的二进制包。

--官方解释:

After initialization, is is not allowed to change this setting.So "lower_case_table_names" needs to be set together with --initialize .

--解决办法:

在mysql数据库初始化的时候指定不区分大小写,在数据库实例启动的时候也要指定不区分大小写。即数据库初始化时lower_case_table_names的值和数据库启动时的值需要一样。

在实际开发生产的应用中多是不区分大小写的即lower-case-table-names=1。

--操作步骤:

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

my.cnf

[mysqld]

lower_case_table_names = 1

[root@localhost system]# find / -name mysqld.service

/sys/fs/cgroup/systemd/system.slice/mysqld.service

/etc/systemd/system/multi-user.target.wants/mysqld.service

/usr/lib/systemd/system/mysqld.service

2、比较粗暴的方法

mysql8的大小写敏感配置比较坑,根据官方文档可以发现,该配置只能在数据库初始化之前配置。之后添加该配置会导致mysql服务无法启动。

如果这个操作是初始化数据库之后,也就是安装后运行过服务,那就可能会出错。

错误类似于Job for mysqld.service failed because the control process exited with error...

然后就无法启动 mysql 服务了,除非打开 vim /etc/my.cnf把追加的lower_case_table_names=1删除掉。

将数据库下所有数据保存备份,如果你不在意数据的话直接删除数据

1 停止MySQL

systemctl stop mysqld.service

2 删除 MySQL的数据

rm -rf /var/lib/mysql

3 修改/etc/my.cnf

vi /etc/my.cnf

增加

[mysqld]

#1表示不区分大小写,0区分大小写

lower_case_table_names = 1

4 启动 mysql

systemctl daemon-reload

systemctl restart mysqld.service

在重新初始化之后所有账号数据都会被重置,这里需要查看重新初始化的root账户登陆密码:

查看临时密码grep "A temporary password" /var/log/mysqld.log

登陆mysql修改账户信息即可!

重启mysql 出现问题 查看 /var/log/mysql.log日志

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值