【Linux】Ubuntu、Debian下对deb包进行修改后重新打包——以MySQL安装包为例

需求

关于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

  1. 解压 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/ 如下: 【Linux】Ubuntu、Debian下对deb包进行修改后重新打包——以MySQL安装包为例_第1张图片
    【Linux】Ubuntu、Debian下对deb包进行修改后重新打包——以MySQL安装包为例_第2张图片
  2. 解压出包的控制信息到 ./tmp/DEBIAN/ 目录下(/DEBIAN/ 目录自动生成)
    dpkg -e mysql-community-server_8.0.28-1ubuntu18.04_amd64.deb ./tmp/DEBIAN/
    
    在这里插入图片描述
    【Linux】Ubuntu、Debian下对deb包进行修改后重新打包——以MySQL安装包为例_第3张图片
    进入 ./tmp/DEBIAN/ 下查看解压出来的控制信息
    【Linux】Ubuntu、Debian下对deb包进行修改后重新打包——以MySQL安装包为例_第4张图片
  3. 修改默认配置
    修改默认配置文件 ./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
    
    
    【Linux】Ubuntu、Debian下对deb包进行修改后重新打包——以MySQL安装包为例_第5张图片
  4. 修改配置后重新打包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在同一目录下,所以起个别名区分一下。
    【Linux】Ubuntu、Debian下对deb包进行修改后重新打包——以MySQL安装包为例_第6张图片
    到了这一步,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文件解包压包总结

  1. 解压出包的内容到指定的目录
    dpkg -x target.deb target/
    
  2. 解压出包的控制信息到 上一步种内容目录的子目录 /DEBIAN/ 目录下
     dpkg -e target.deb target/DEBIAN/
    
  3. 修改后内容重新打包生成新的deb包
     dpkg-deb -b target/ target.deb
    

你可能感兴趣的:(Linux,Ubuntu,linux,debian,mysql,ubuntu)