07、Docker環境下MySql數據庫容器遇到的問題

1、環境

linux版本(查看版本命令:cat /proc/version):

Linux version 4.4.0-96-generic (buildd@lgw01-10) 
(gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) )

docker版本(查看版本命令:docker --version):

Docker version 1.12.6

數據庫版本:

percona:5.7.23

2、問題一:

docker 拉取鏡像,創建運行mysql容器。發現,mysql容器並沒有運行。

#拉取mysql鏡像
docker pull percona:5.7.23
#創建運行mysql容器,並且掛載宿主機的/data/mysql-data目錄到容器/var/lib/mysql目錄,聲明端口指定root密碼
docker create --name percona -v /data/mysql-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23
#啓動mysql容器
docker start percona
#查看當前正在運行的容器
docker ps

進到docker容器掛載的宿主機目錄下,查看發現。文件目錄裏面是空的。

#進到/data/mysql-data目錄
cd /data/mysql-data
#查看
ll

這是爲什麼呢?按照,正常邏輯來說。啓動,mysql容器後。應該會產生一些mysql對應的文件纔對阿。

懷疑是 /data/mysql-data 這個目錄沒有寫入的權限。試着給 /data/mysql-data 賦權限。

#chmod改變權限 -R是目錄下所有文件 777就是高權限(讀、寫、執行)
chmod -R 777 data

然後,再啓動mysql容器,發現正常了。

docker start percona

3、問題二:

創建表拋[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY,雖然,表創建成功了。但是,肯定會影響到後續的程序訪問操作。

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated 
column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns
 in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

原因:

mysql5.7.5版本開始,sql_mode使用的是默認值,設置了ONLY_FULL_GROUP_BY
而ONLY_FULL_GROUP_BY是MySQL提供的一個sql_mode,通過這個sql_mode來提供SQL語句
GROUP BY合法性的檢查,在MySQL的sql_mode是非ONLY_FULL_GROUP_BY語義。
(資料參考於:https://www.cnblogs.com/xzjf/p/8466858.html)

解決方案:

修改mysql容器mysqld.cnf配置,去掉ONLY_FULL_GROUP_BY模式

#進到容器
docker exec -it 容器id /bin/bash
#cd進到etc目錄
cd etc/
#查看etc目錄下文件
ls
#查看my.cnf
cat my.cnf
#發現my.cnf裏面引入了!includedir /etc/percona-server.conf.d/
cd /etc/percona-server.conf.d/
#查看
ls
#發現mysqld.cnf mysqld_safe.cnf 兩個文件。那麼,修改mysqld.cnf配置文件就行了
vi mysqld.cnf
#在 mysqld.cnf 配置最後面添加
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#保存退出
esc + :wq!
#重啓mysql容器測試

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章