1. 程式人生 > >Docker之MySql5.7中only_full_group_by的問題解決

Docker之MySql5.7中only_full_group_by的問題解決

開發十年,就只剩下這套架構體系了! >>>   

    MySql的映象,預設情況下,MySql5.7中的sql_mode含有only_full_group_by,group by語句有時候會報錯。通過手動修改sql_mode,那麼如果刪除容器或者新建容器,就會導致我們手動設定的sql_mode失效,所以自己製作一個基於mysql映象的映象,解決sql_mode含有only_full_group_by的問題。

執行容器

    List-1

mjduan@mjduan:/opt % docker run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD --name mysql1 mysql:5.7.9
5514c31a4e0bc524cee3cdcb962ac73b4fdeb1b5b32d70fa2840e9029b203a8c

進入容器安裝vim

    List-2

mjduan@mjduan:/opt % docker exec -ti mysql1 /bin/bash
#在容器內執行如下命令
root@44504961189a:/opt % apt-get update
......
root@44504961189a:/opt % apt-get install vim
......

    在容器內,/etc/mysql/conf.d/下,新建.cnf檔案,將配置寫入到裡面,我們新建custom.cnf檔案,寫入如下內容:

    List-3

root@44504961189a:/# more /etc/mysql/conf.d/custom.cnf
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    退出容器,用docker commit命令由容器製作映象,

    List-4

mjduan@mjduan:/opt % docker commit mysql1 mysql_custom:1.0

    之後docker images就可以看到映象mysql_custom:1.0了。

     mysql_custom:1.0就是我們需要的,用它來啟動容器,如下List-5

    List-5

mjduan@mjduan:/opt % docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=新密碼 --name mysql_mjduan2 mysql_custom:1.0
44504961189a45442a6b33e5945778b73bc3dd058ab9e794c56b0bbfc3e603bf

    之後進入容器mysql_mjduan2,用mysql命令進入mysql命令列時就會提示要root密碼了。再次檢視sql_mode,就會看到sql_mode沒有only_full_group_by了。

    注意,不要讓別人拿到你的映象,否則通過docker inspect命令就可以看到你設定的root密碼。不過可以在建立容器的時候用MYSQL_ROOT_PASSWORD來設