MySQL 8 忽略表名大小写

MySQL 8 忽略表名大小写


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

​ 而,修改数据库默认策略,要在 mysql8.0安装完成之后,第一次启动初始化之前,否则会启动报错,无法启动。若已经初始化过数据库,修改步骤如下:

一、修改步骤:

如果是初次安装,安装完rpm包后,先执行:

mysqld --initialize --user=mysql --lower-case-table-names=1

执行完初始化语句,再启动服务。否则,按以下步骤修改。

1、备份数据

​ 修改过程需要重新初始化数据库,因此会造成数据丢失,需提前备份数据;

2、停止MySQL服务
systemctl stop mysqld;
3、删除数据目录
#查找数据库安装目录 ../lib/mysql
find / -type d -name mysql

eg: /var/lib/mysql
#备份好数据后,删除/var/lib/mysql 目录

4、修改 my.cnf 配置文件
# 配置文件一般在 /etc/my.cnf 下
vim /etc/my.cnf
# 添加 skip-grant-tables,实现免密登陆
[mysqld] 
......

skip-grant-tables 
#default_authentication_plugin=mysql_native_password

......

#ps:MySQL8 需要配置 default_authentication_plugin=mysql_native_password 也可以添加上去
#保存并且退出。 
5、重新初始化 MySQL
#重新初始化mysql,并制定策略
mysqld --initialize --user=mysql --lower-case-table-names=1

#启动服务
systemctl start mysqld;
6、mysql无密码登陆
#mysql 免密登陆
mysql;
7、修改user表数据
-- 指定数据库
use mysql;

-- 查看user、host、加密策略等信息
select user,host,plugin,authentication_string from user;

+------------------+-----------+-----------------------+---------------------------+
| user             | host      | plugin                | authentication_string     |
+------------------+-----------+-----------------------+---------------------------+
| nacos            | %         | mysql_native_password | *016DE411332FB            |
| root             | localhost | mysql_native_password | *7ED2CA2AD9               |
| healthchecker    | localhost | mysql_native_password | *30A4BDF7                 |
| mysql.infoschema | localhost | caching_sha2_password | $A$0RBRBEUSED             |
| mysql.session    | localhost | caching_sha2_password | $NEVERBRBEUSED            |
| mysql.sys        | localhost | caching_sha2_password | $TNEVERBRBEUSED           |
| root             | localhost | mysql_native_password | *A2AD9                    |
+------------------+-----------+-----------------------+---------------------------+

-- 清空root 密码,并更改 root用户 host选项为 %
update user set host = '%',authentication_string = '' where user = 'root';

-- 修改成功后,退出mysql
exit;
8、再次修改配置文件
# vim /etc/my.cnf

#注释掉  skip-grant-tables
[mysqld] 
......
#skip-grant-tables
9、重启服务
systemctl restart mysqld;
10、重新登陆
#经过步骤7,已经将root密码置空,无需输入密码,直接回车即可登录
mysql -uroot -p;
Enter password: 
11、重新给root设置密码
alter user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Bowden_12345';

至此,完成mysql 8 表名大小写配置。

二、docker 环境下修改

​ 如果mysql是docker方式部署的话,可以先备份数据,然后重新运行一个容器,在启动命令后面追加参数即可,例如:

#--lower-case-table-names=1  配置 mysql忽略大小写
# 镜像 mysql:8.0
docker run --name mysql --restart=always \
    -v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf \
    -v /home/mysql/data:/var/lib/mysql \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD="root" \
    -e TZ=Asia/Shanghai \
    -d mysql:8.0 \
    --lower-case-table-names=1
  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值