需求
关于MySQL的lower_case_table_names
参数,在Windows系统下和在Linux系统下,默认值是不同的。
- Unix,Linux下默认为0,大小写敏感。创建的库表名将原样保存在磁盘上。如create database TeSt;将会创建一个TeSt的目录,create table AbCCC …将会原样生成AbCCC.frm文件,SQL语句也会原样解析。
- Windows下默认为1,大小写不敏感。创建的库表时,MySQL将所有的库表名转换成小写存储在磁盘上。 SQL语句同样会将库表名转换成小写。 如需要查询以前创建的TeSt(生成TeSt.frm文件),即便执行select * from TeSt,也会被转换成select * from test,致使报错表不存在。
- macOS下默认为2, 创建的库表名将原样保存在磁盘上, 但SQL语句将库表名转换成小写。
- 在Linux上不支持值2。
我们实际用的时候,需求的是 设置 lower_case_table_names=1
。 并且MySQL8.x 必须在安装程序初始化之前设置 lower_case_table_names
才起作用,不设置的话取跟随系统的默认值。如果已经初始化之后,再在mysqld.cnf
配置文件中修改 lower_case_table_names
的值,然后重启服务也不起作用。
因此,在通过deb包离线安装MySQL服务的时候,需要提前将lower_case_table_names=1
的配置添加到对应的初始化安装包配置文件中,修改后重新打包成新的deb包,用修改后的deb包安装,从而保证在Ubuntu、Debian上安装的MySQL服务是库表名大小写不敏感的。修改步骤如下:
官网下载deb包
- 官网下载地址
选择对应的 Ubuntu Linux 或者Debian Linux 版本,下载对应的 DEB Bundle 包。
上传到Linux系统
将上一步官网下载的deb包上传到Linux系统(这里以Ubuntu18.04 64位系统为例,安装包以mysql8.0.28为例)。
当然,如果上一步直接是通过Ubuntu系统下载安装包的话,这里就不用上传了。
在Ubuntu系统下解压tar包
tar -xf mysql-server_8.0.28-1ubuntu18.04_amd64.deb-bundle.tar
修改并重新打包指定的deb
切换到解压目录后,需要修改配置文件重新打包的deb文件名为:mysql-community-server_8.0.28-1ubuntu18.04_amd64.deb
。
- 解压 mysql-community-server_8.0.28-1ubuntu18.04_amd64.deb 这个deb包到一个自定义的临时目录 ./tmp/ 下
dpkg -x mysql-community-server_8.0.28-1ubuntu18.04_amd64.deb ./tmp/
解压后的临时目录 ./tmp/ 如下:
- 解压出包的控制信息到 ./tmp/DEBIAN/ 目录下(/DEBIAN/ 目录自动生成)
dpkg -e mysql-community-server_8.0.28-1ubuntu18.04_amd64.deb ./tmp/DEBIAN/
进入./tmp/DEBIAN/
下查看解压出来的控制信息
- 修改默认配置
修改默认配置文件./tmp/etc/mysql/mysql.conf.d/mysqld.cnf
# 添加配置后配置文件如下 [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
- 修改配置后重新打包deb文件,打包后的新包名可以自定义
dpkg-deb -b ./tmp/ mysql-community-server_8.0.28-1ubuntu18.04_amd64_edit.deb
打包后的包名定义为mysql-community-server_8.0.28-1ubuntu18.04_amd64_edit.deb
,因为打包后的新deb包和旧的deb包mysql-community-server_8.0.28-1ubuntu18.04_amd64.deb
在同一目录下,所以起个别名区分一下。
到了这一步,deb的修改后重新打包就全部完成了。后面用修改后mysql-community-server_8.0.28-1ubuntu18.04_amd64_edit.deb
按照步骤在Ubuntu、Debian系统上安装MySQL服务,就是大小写不敏感的了。
说明:
截图是在全部做完之后截的,正常情况下,
- 第一步解压后 /tmp/ 目录下只有etc、lib、usr这三个目录;
- DEBIAN目录是第二步生成的;
- mysql-community-server_8.0.28-1ubuntu18.04_amd64_edit.deb是打包生成的新deb文件。
deb文件解包压包总结
- 解压出包的内容到指定的目录
dpkg -x target.deb target/
- 解压出包的控制信息到 上一步种内容目录的子目录 /DEBIAN/ 目录下
dpkg -e target.deb target/DEBIAN/
- 修改后内容重新打包生成新的deb包
dpkg-deb -b target/ target.deb