当前位置:   article > 正文

【Ubuntu 22.04 安装Mysql 8.0 并设置大小写敏感lower_case_table_names属性】_ubuntu mysql 8 ubuntu 设置lower case table

ubuntu mysql 8 ubuntu 设置lower case table

安装过程中遇到的问题

Ubuntu系统中使用apt安装完成Mysql8.0以后,发现数据库对大小写是敏感的,即只能查询到大小写完全匹配的表名和字段名。这时需要设置 lower_case_table_names=1来解决这个问题。具体属性如下(在 Unix 上,lower_case_table_names 的默认值为 0。上 Windows,默认值为 1。在 macOS 上,默认值为 2.):

含义
0表和数据库名称使用信箱存储在磁盘上 在 CREATE 中指定 TABLE 或 CREATE DATABASE 语句。名称比较是 区分大小写。你不应该设置 如果您在系统上运行 MySQL,则此变量设置为 0 具有不区分大小写的文件名(如 Windows 或 macOS)。如果在不区分大小写的文件系统上使用 --lower-case-table-names=0 强制此变量为 0,并使用不同的 Lettercase,可能会导致索引损坏。
1表名以小写形式存储在磁盘上,名称比较不 区分大小写。MySQL将所有表名转换为 存储和查找时的小写字母。此行为还 适用于数据库名称和表别名。
2表和数据库名称使用信箱存储在磁盘上 在 CREATE 中指定 TABLE 或 CREATE DATABASE 语句,但 MySQL 将它们转换为 查找时小写。名称比较不是 区分大小写。这仅适用于 不区分大小写的文件系统! 表名和视图名是 以小写形式存储,至于 .InnoDBlower_case_table_names=1

新的问题

设置完成lower_case_table_names=1后,数据库启动失败。官方给出的解释是,lower_case_table_names 属性需要再数据库初始化的之前设定,初始化完成后无法进行修改。针对Ubuntu系统需要在安装前执行以下命令,将大小写敏感属性设置为开启。
经过实际操作验证:不好使!不能解决问题!!

$> sudo debconf-set-selections <<< "mysql-server mysql-server/lowercase-table-names select Enabled"
  • 1

在这里插入图片描述

最终解决

参考解决方案地址:如何在Ubuntu Server 20.04 LTS上成功安装MySQL 8.0 with lower_case_table_names=1?

完整安装过程

# 更新apt-get系统软件库
sudo apt-get update
# 安装Mysql数据库
# 若已提前准备好配置文件,可直接跳到还原备份文件步骤
sudo apt-get install mysql-server
# 这时候登录数据库,查看 lower_case_table_names 属性时,值为0,会区分大小写
# 停止Mysql服务
systemctl stop mysql
# 备份配置文件
sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.backup
# 卸载已安装的Mysql
sudo apt-get --purge autoremove mysql-server
# 删除安装目录 (data默认位置,如有重要数据注意备份)
sudo rm -rf /var/lib/mysql
# 还原配置文件
sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf.backup /etc/mysql/mysql.conf.d/mysqld.cnf
# 编辑配置文件 注意:新添加的文本要放到[mysqld]标签下,添加 lower_case_table_names=1
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
# 再次执行安装命令
sudo apt-get install mysql-server
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

再次安装时,会提示配置文件已存在,是否覆盖(默认N不覆盖),至此,数据库安装完成。
在这里插入图片描述
登录数据库,查看设置结果。

# 当前没有密码
sudo mysql -u root -p
# 查询lower_case_table_names属性,结果如下
select @@lower_case_table_names;
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

执行安全设置向导

sudo mysql_secure_installation
  • 1

大体意思如下,根据实际情况进行设置即可。

  1. 是否对密码进行强校验?
  2. 是否移除匿名用户?
  3. 是否允许root用户进行远程连接?
  4. 是否删除test数据库?
  5. 是否设置权限立即生效?

修改Root用户密码

sudo mysql -u root -p

mysql> use mysql;
# 解除root用户的访问限制(根据具体情况,也可创建新用户用于外部访问)
mysql> update user set host='%' where user='root';
# 使更新生效
mysql> flush privileges;
# 修改密码
mysql> alter user 'root'@'%' identified with mysql_native_password by 'password';
mysql> flush privileges;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

配置远程登录

Mysql默认只允许本地访问,如不需外部进行连接,此步骤可省略。

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf  

# 修改 bind-address 值为 0.0.0.0 或者注释本行

# 重启mysql
systemctl restart mysql
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

卸载Mysql


# 卸载之前的MySQL安装
sudo apt-get remove --purge mysql-server
# 卸载依赖包
sudo apt autoremove
# 清除配置文件
dpkg -l|grep ^rc|awk '{print$2}'|sudo xargs dpkg -P
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

其他解决方式(未验证,有兴趣的可以进行尝试)

sudo apt-get update
# 安装Mysql数据库
# 若已提前准备好配置文件,可直接跳到还原备份文件步骤
sudo apt-get install mysql-server
# 关闭服务
sudo service mysql stop
# 修改/etc/mysql/mysql.conf.d/mysqld.cnf lower_case_table_names=1 
# 移除data目录
sudo  rm -rf /var/lib/mysql/
# 重建data目录及用户
sudo mkdir /var/lib/mysql
sudo chown mysql:mysql /var/lib/mysql
# 初始化mysql
sudo /usr/sbin/mysqld --initialize --user=root --lower-case-table-names=1
# 启动数据库
sudo service mysql start
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/705094
推荐阅读
相关标签
  

闽ICP备14008679号