↓ 快轉到主要內容

解決 MySQL 升級 8.4 Docker 容器啟動問題

·966 字·2 分鐘
Y Cheung
作者
Y Cheung
Blogger, Programer & Traveler.
目錄

Y Cheung 最近將系統中很久沒更新的 MySQL Docker Image更新到了最新的lts版本1,結果容器就起不來了,哭哭,一直不停重啟。

修復 unknown variable default-authentication-plugin 錯誤
#

查閱docker log信息發現:

1[Server] unknown variable 'default-authentication-plugin=mysql_native_password'.

啊,原來之前在MySQL升級到8的時候 Y Cheung 曾寫過需要使用 --default-authentication-plugin=mysql_native_password 這個參數將預設密碼加密方式改為mysql_native_password,而現在MySQL升級到8.4後,這個參數也失效啦2,需要改成 --mysql_native_password=ON。

修復 case insensitive 警告
#

另外因為這次Y Cheung又用了windows平台做開發,發現了一個新的Warning信息(可能以前沒留意到),也順便在這裡說下:

1[Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive

查了下 lower_case_table_names 參數是用來控制表名的大小寫敏感性以此兼容不同操作系統的文件系統3:

操作系統 大小寫敏感性 lower_case_table_names預設值 lower_case_table_names可能的值
Unix/Linux 預設區分大小寫 lower_case_table_names=0 0或1
Windows 預設不區分大小寫 lower_case_table_names=1 1或2
macOS 預設小寫 lower_case_table_names=2 1或2

⚠️

如果在不區分大小寫的文件系統上將lower_case_table_names設為0,MySQL會拒絕啟動以防止數據損壞。

⚠️

在 Unix/Linux 系统上,不支持lower_case_table_names=2,MySQL會強制將其設為0。

⚠️

lower_case_table_names只能在MySQL服務器初始化時設置,啟動後不能修改。如果需要修改,必須先將所有大小寫不一致的表名改為小寫,然後重啟服務器並設置新值。因此,在安裝MySQL時就應該根據實際需求預先設置好lower_case_table_names。

綜合來看,為了提高MySQL的跨平台可移植性,建議將lower_case_table_names參數設置為1。

不過 Y Cheung這個是臨時用開發環境,不會遷移去別的平台,所以按照提示改就是了。那麼就在參數中加上 --lower_case_table_names=2吧。

示範 docker-compose.yml 內容
#

總的來說,在Windows平台上使用MySQL 8.4 版本以上的Docker鏡像時,示例docker-compose.yml內容為:

 1version: '3'
 2services:
 3  yoast-db:
 4    image: mysql:lts
 5    restart: always
 6    volumes:
 7      - 'D:\Projects\mysql\data:/var/lib/mysql'
 8    ports:
 9      - '127.0.0.1:23306:3306'
10    environment:
11      - MYSQL_ROOT_PASSWORD=your_password
12      - MYSQL_DATABASE=your_database
13    command: --mysql-native-password=ON --lower_case_table_names=2

  1. docker-library/mysql 8.4 ↩︎

  2. Important Change: The deprecated mysql_native_password authentication plugin is now disabled by default. It can be enabled by starting MySQL with the new --mysql-native-password=ON server option, or by adding mysql_native_password=ON to the [mysqld] section of your MySQL configuration file. Deprecation and Removal Notes - Changes in MySQL 8.4.0 (2024-04-30, LTS Release) ↩︎

  3. lower_case_table_names - Server System Variables ↩︎

相關文章

解決Windows Docker 客戶端使用 Mariadb 官方image啟動報錯

·526 字·2 分鐘
MariaDB Image使用的是當前最新的v10.3版本 1docker pull mariadb:latest docker-compose.yml文件內容: 1version: "3" 2services: 3 mariadb: 4 image: mariadb 5 container_name: mariadb 6 restart: always 7 volumes: 8 - ${DATA_DIR}:/var/lib/mysql 9 ports: 10 - "3306:3306" 11 environment: 12 MYSQL_ROOT_PASSWORD: password 13 MYSQL_DATABASE: public .env 文件內容:

MYSQL外鍵導致無法清空表

·132 字·1 分鐘
最近設計的數據庫表含有外鍵,結果在開發時truncate table的時候報錯了, 1SQL错误(1701):Cannot truncate a table referenced in a foreign key constraint (`rollcall2`.`oncall`, CONSTRAINT `FK__calls` FOREIGN KEY (`calls_id`) REFERENCES `rollcall2`.`calls` (`id`)) 解決辦法如下: 1SET FOREIGN_KEY_CHECKS = 0; 2TRUNCATE table; 3SET FOREIGN_KEY_CHECKS = 1; 當然也可以通過移除外鍵之類的辦法,但是感覺還是用上面幾行命令來解決比較方便。

Aliyun MySQL Aborting

·331 字·1 分鐘
放了wordpress的主機最近經常掛掉,提示無法連結數據庫,檢查log信息發現是因為內存不足,把InnoDB的buffer pool size改小後似乎好了一些,可今天還是出錯了,log信息如下:

Win 10 讀取 Mac HFS+ 格式硬碟

·363 字·1 分鐘
因需找出了多年不用的移動硬碟SSD,結果win 10 無法讀取!檢查了驅動什麼的都沒問題,也看到有這個硬碟了,就是不能正常加載出來,著急。 原本還以為是TOSHIBA的問題,因為看到網上有說win 10更新後無法正常使用東芝硬碟的,但是那都是2018年的事情了啊,應該早修復了呀。