MySQL 8 忽略表名大小寫

幾多心跳發表於2020-10-20

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

相關文章