安裝mysql
- cmd(以管理員身份運行)
- 查看docker版本,是否安裝成功:docker --version
- 拉去docker mysql鏡像: docker pull mysql:latest (國內鏡像daocloud.io/library庫下載 docker pull daocloud.io/library/mysql:5.7)
- 查看鏡像是否存在:docker images
- 啟動mysql鏡像:docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
- -itd 表示啟動交互式會話模擬linux tty 但是docker將會分離並且在后台運行
- --name mysql-test 表示容器名稱
- -p 3306:3306 表示從docker的服務器端口(后)映射到主機的端口(前)
- -e MYSQL_ROOT_PASSWORD=123456 表示配置用戶名和密碼(root用戶密碼123456)
- mysql 表示需要啟動的鏡像名稱
- 查看mysql服務是否在docker運行:docker ps
docker run -itd --restart=always --name mysql-8.0.0 -p 3306:3306 -v D:/dockervolumes/mysql_8_0_0_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.0
mysql大小寫敏感問題
在docker安裝MySQL后,進行項目連接數據庫,發現查詢的表不存在了:Table 'XXXX.XXXX' doesn't exist
Linux下:
- 數據庫名與表名是嚴格區分大小寫的;
- 表的別名是嚴格區分大小寫的;
- 列名與列的別名在所有的情況下均是忽略大小寫的;
- 變量名也是嚴格區分大小寫的;
Windows下:
- 都不區分大小寫
lower_case_table_names 參數說明
參數值 | 解釋 |
---|---|
0 | 使用CREATE TABLE或CREATE DATABASE語句指定的大小寫字母在硬盤上保存表名和數據庫名。名稱比較對大小寫敏感。在大小寫不敏感的操作系統如windows或Mac OS x上我們不能將該參數設為0,如果在大小寫不敏感的文件系統上將–lowercase-table-names強制設為0,並且使用不同的大小寫訪問MyISAM表名,可能會導致索引破壞。 |
1 | 表名在硬盤上以小寫保存,名稱比較對大小寫不敏感。MySQL將所有表名轉換為小寫在存儲和查找表上。該行為也適合數據庫名和表的別名。該值為Windows的默認值。 |
2 | 表名和數據庫名在硬盤上使用CREATE TABLE或CREATE DATABASE語句指定的大小寫字母進行保存,但MySQL將它們轉換為小寫在查找表上。名稱比較對大小寫不敏感,即按照大小寫來保存,按照小寫來比較。注釋:只在對大小寫不敏感的文件系統上適用! innodb表名用小寫保存。 |
Docker 部署 MySql 並修改為大小寫不敏感
-
直接在Docker啟動的時候,添加參數,設置為對小寫不敏感
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql --lower_case_table_names=1
-
Docker容器內進行修改(將文件var/lib/mysql 掛載出來可直接在宿主機修改)
- 進入 docker 容器 MySQL: docker exec -it mysql /bin/bash
- 進入配置文件目錄: cd /etc/mysql/conf.d
- 需要用到vim(安裝過的請跳過)
- apt-get update
- apt-get install vim
- 啟動編輯配置文件: vim mysqld.cnf
- 在[mysqld]下添加 lower_case_table_names=1
- 退出重啟
折騰了半天還是無法通過修改配置忽略大小寫問題。索性刪掉容器重新啟動(直接在Docker啟動的時候,添加參數,設置為對小寫不敏感)
后面遇到再研究吧!!!
參考:
http://t.zoukankan.com/aixing-p-13327251.html
https://stackoverflow.com/questions/51803216/lower-case-table-names-settings-in-mysql-8-0-12