Linux MySQL 8.0.29 忽略表名大小写配置
- 问题背景
- 解决方案
- 遇到的问题:
问题背景
突然发现有个大写的表报不存在。
在Windows上,MySQL是默认支持忽略大小写的。
这个时候你要查询一下是不是没有配置:
SHOW VARIABLES LIKE 'lower_case_table_names';
如果是0,说明没有配置,具体配置:
[mysqld]
lower_case_table_names=1 # 设置表名不区分大小写
但是,一直重启失败。。。
说明我们的MySQL太新了。
那下面的解决方案也许适合你。
解决方案
MySQL 8.0.17之后,如果数据目录已经存在(就是你已经初始化msyql了),那就凉凉了,需要删除所有数据重新初始化。
# 1、备份所有数据库(必须要,不然数据全部没有了!!!)
mysqldump -u root -p --all-databases > all-databases-backup.sql
# 2、删除旧数据目录
sudo rm -rf /var/lib/mysql/ # 默认路径,根据实际安装目录调整
# 3、重新初始化 MySQL
sudo mysqld --initialize --user=mysql --lower-case-table-names=1
# 4、设置 root 密码
sudo grep 'temporary password' /var/log/mysqld.log # 获取临时密码,根据实际安装目录调整
# 5、登录MySQL
mysql -u root -p
# 6、修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
# 7、导入备份的数据库
mysql -u root -p < all-databases-backup.sql
遇到的问题:
mysqldump: Got error: 1045: Access denied for user ‘root’@‘localhost’ (using password: YES) when trying to connect
在执行第一步备份的时候,说明你的密码错了。
重新设置一下密码即可:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xxx';