最近發現在ubuntu環境中mysql8預設是不忽略大小寫的,這個在使用一些orm框架的時候可能會遇到一些問題,比如jpa會將表預設小寫,如果資料庫中的表是大寫的這個時候就會報錯: 表不存在。如何解決呢?
其實在資料庫中無非是新增一個引數
## mysqld.cnf
[mysqld]
lower_case_table_names
這個引數有三個選項:
- 0 表名將按指定方式儲存,並且比較是區分大小寫的
- 1 表名以小寫形式儲存在磁碟上,比較不區分大小寫
- 2 表名按給定形式儲存,但以小寫形式進行比較
但是這個引數必須是在mysql初始化之前指定,那麼也就意味著需要重灌mysql
1. 完全解除安裝mysql
sudo apt purge mysql-* -y sudo rm -rf /etc/mysql/ /var/lib/mysql sudo apt autoremove -y sudo apt autoclean -y
然後執行如下程式碼:
sudo dpkg -l | grep mysql
如果沒有任何輸出那麼就已經完成解除安裝
2. 安裝mysql
sudo apt-get update
sudo apt-get install mysql-server -y
1) 修改配置檔案
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
在末尾新增
lower-case-table-names=1
在這個時候初始化資料庫並啟動會報一下錯誤,因為ubuntu安裝的時候自動生成了/var/lib/mysql資料夾以及部分預設資料檔案,而這些檔案預設值lower-case-table-names=0,這與我們配置的有衝突,在錯誤日誌中可以看到一下報錯資訊:
[ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('1') and data dictionary ('0').
2)刪除/var/lib/mysql,並重新建立
sudo rm -rf /var/lib/mysql
sudo mkdir /var/lib/mysql
sudo chown mysql:mysql /var/lib/mysql
sudo chmod 700 /var/lib/mysql
3)初始化資料庫
sudo mysqld --defaults-file=/etc/mysql/my.cnf --initialize --lower_case_table_names=1 --user=mysql --console
4)啟動mysql服務
sudo service mysql start
5)獲取預設密碼,登入並且修改密碼
sudo grep 'temporary password' /var/log/mysql/error.log
sudo mysql -u root -p
### mysql
alter user 'root'@'localhost' identified by '*******';
exit
6)初始化root使用者(刪除外部訪問的root帳戶、刪除匿名帳戶、刪除測試資料庫(預設情況下,所有使用者,包括匿名使用者都可以訪問該資料庫)以及相關許可權)
sudo mysql_secure_installation
7)驗證忽略大小寫配置是否生效
show variables like 'lower_case%';
如果結果是如下,表示配置成功
查考文件: How to install MySQL 8.0 with lower_case_table_names=1 on Ubuntu Server 20.04 LTS successfully? - Ask Ubuntu