巴格.生活日記•學習筆記

- 取之於網路,用之於網路 -

筆記重點

    Docker教學3:在Docker內解決MySQL發生大小寫敏感問題

    2020-12-18

    上一篇我們教學如何使用安裝Docker建置了一個,本篇會教學如何使用Docker找到鏡像檔(image)、下載鏡像檔(image)、啟動鏡像檔(image)封裝成容器(container),以安裝MySQL 8為例實際詳細的步驟,也會順便教導如何在Docker內開啟MySQL遠端訪問許可權(對外連線)。

    前言

    還沒學過安裝Docker、以及建置容器的的可以參考前兩篇。

    Docker教學1:在Windows Docker安装教學、初步設定
    Docker教學2:如何使用Docker建立MySQL 8的環境以及管理連線設定

    MySQL在Windows中是不區分大小寫(lower_case_tables_names屬性預設為1),但在Linux(lower_case_tables_names屬性預設為0)中是區分大小寫。

    Docker裏頭就是Linux核心!!!
    Docker裏頭就是Linux核心!!!
    Docker裏頭就是Linux核心!!!

    因為很重要所以講三次(老梗)

    所以可能會遭遇到SQL語法在執行時遇到大小寫敏感而產生錯誤,現在就讓我們來解決它吧!

    注意事項

    ※ 優先注意,以下操作必須「初始化資料庫」,所以資料庫內容會被清空,請記得做備份的動作,還有像上一篇教學內,創建帳號開放對外連線的號也會跟著初始化而消失,需要再重新創建一次。

    教學步驟

    1. 快按兩下打開容器後,點選右上CLI按鈕,開啟容器終端環境(bash)快按兩下打開容器後,點選右上CLI按鈕,開啟容器終端環境(bash)
    2. 先安裝編輯文件的套件,才能進行修改config(屬性配置檔)設定,在終端畫面中輸入指令:
      apt-get update;

      ▲更新軟體的最新資訊及列表

      apt-get install vim;

      ▲安裝vim套件,這指令途中會確認輸入,請輸入Y

    3. 修改檔案路徑,在終端畫面中依序輸入指令:
      mkdir  -p /home/data;
      mkdir  -p /home/logs;
      chown -R mysql:mysql /home/data;
      chown -R mysql:mysql /home/logs;
      chmod -R 755 /home;
      chmod -R 755 /home/data;
      chmod -R 755 /home/logs;

    4. 修改config(屬性配置檔),在終端畫面中輸入指令:
      cd /etc/mysql/

      ▲進入檔案路徑

      vim my.cnf

      ▲編輯my.cnf檔


    5. 按i進入編輯模式,找到檔案中[mysqld]區塊,修改以及新增以下屬性(有的修改、沒有的就新增)
      [mysqld]
      datadir=/home/data
      log-error=/home/logs/error.log
      lower_case_table_names=1

      輸入完後按ESC退出編輯模式,之後輸入:

      :wq

      ▲存檔並關閉檔案

      參考如下圖:

    6. 請注意!執行到這邊後請勿重新開啟Docker,重啟後容器將無法啟動(因為設定與初始不一致的關係) 接下來我們馬上來解決這問題。

    7. 重新初始化資料庫設定,在終端畫面中輸入指令:
      /usr/sbin/mysqld --user=mysql --lower-case-table-names=1 --initialize-insecure --basedir=/usr/local/mysql --datadir=/home/data

      ▲這邊需要點時間,請耐心等候。

    8. 查看是否有初始化成功,在終端畫面中輸入指令:
      vi /home/logs/error.log
    9. ▲看到is created with an empty password(密碼為空值)等字眼,表示成功了。

    10. 重新啟動Docker,確認是否真的有修改成功,重新開啟CLI,在終端畫面中輸入指令:
      mysql -u root -p

      ▲登入root帳號,請注意!因重新初始化資料庫,root帳號變為空,密碼直接Enter就好

      show variables like '%table_names';
    11. 看到以上畫面表示成功囉。

    結論

    MySQL這坑也是害人不淺,不少人踩過,當然包括我。哈哈哈~ 特別寫一篇來紀錄步驟以免忘記,也分享給大家來避免採坑或者幫忙解決。