mysql大小寫問題解決

wls1036發表於2021-09-26

背景

mysql在Linux系統中預設是區分大小寫的,也就是userUSER是兩張不同的表,而且後期這個引數是無法修改的,修改的話需要清空資料,成本非常高,而且最新版也沒有針對這個問題的改進,這個設計我想不出是出於什麼目的,因為實際情況是一個資料庫可能很多系統共用,有些需要區分大小寫,有些不需要,如果前期沒有發現這問題,後期就要重新搭建一個資料庫做資料遷移,除了要搞死mysql外,我想不出有什麼其他理由oracle要這麼設計。

解決方案

  • 備份資料庫

後面我們會對資料庫進行初始化,初始化後所有資料丟失,需要提前做好備份

mysqldump -uroot -p 資料庫名稱 >db_name.sql
建議一個個資料庫進行備份
  • 修改配置檔案

修改配置檔案/etc/mysql/my.cnf,增加以下配置

lower_case_table_names=1
  • 修改資料檔案目錄
datadir         = /data/mysql
/data/mysql必須為空
  • 關閉資料庫執行以下命令進行初始化
mysqld  --lower_case_table_names=1 --initialize-insecure --basedir=/usr/ --datadir=/data/mysql
  • 重啟資料庫後所有資料都會丟失,我們需要重新建立資料庫和資料庫使用者
# 僅供參考
create database db_name;
update user set host='%' where user='root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password;
alter user 'root'@'%' identified by 'mysql';
GRANT ALL PRIVILEGES ON db_name.* TO 'root'@'%';
  • 重新匯入資料
mysql -uroot -p  db_name < db_name.sql

相關文章