Docker中安裝MYSQL

DOCKER 新手,感謝網友提供的幫助~~

安裝手記,所以文章有些雜亂,可直接跳到文末看結論,網友文章可重點參考

--------------------------------------------------------

目標: Docker中安裝MYSQL

環境:

centos7

docker-ce 最新版   能正常啓動

mysql 8.0.19(不想用最新的)

------------------------------過程----------------------------------------------------------------------------------

開始安裝
----https://blog.csdn.net/qq_30327353/article/details/130983586---後面沒用這個了
https://blog.csdn.net/qq_42971035/article/details/127831101

DOCKER 已經正常安裝
開始下載 DOCKER中JAVA/MYSQL
啓動時用了命令:
docker run --name mysql -v /myapp/mysql:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=gaolegao -d mysql:8.0.19

感覺端口會衝突,百度下

netstat -anp |grep 3306

貌似木有
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 11263/docker-proxy
tcp6 0 0 :::3306 :::* LISTEN 11267/docker-proxy

估計是DOCKER中的MYSQL沒啓動,也不打算啓動了,直接修改DOCKER中的mysql吧。。。

docker images 找DOCKER中的MYSQL的ID

然後開始停止

docker stop mysql


再看netstat -anp |grep 3306 竟然啥也沒有了。。。。估計是原來的mysql沒啓動

再重試
docker run --name mysql -v /myapp/mysql:/var/lib/mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=gaolegao -d mysql:8.0.19

報錯了。。。
說是密碼啥啥不對,估計就是以前安裝MYSQL時要重新設置root密碼啥的

docker rmi --force mysql:8.0.19
docker rmi --force mysql

docker rm mysql

裏面兩個都被我強行刪除了


重新安裝鏡像

docker pull mysql:8.0.19

反饋已經存在相關文件了

-------------------------------------

docker run -p 3307:3306 --name mysql --restart=always --privileged=true \
-v /myapp/mysql/log:/var/log/mysql \
-v /myapp/mysql/data:/var/lib/mysql \
-v /myapp/mysql/conf:/etc/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.19

 

查看日誌
docker logs -f mysql

進入容器內部
docker exec -it mysql /bin/bash
沒進去,跳過

再進去
cd /myapp/mysql

編輯文件

vi my.cnf


[client]

default-character-set=utf8mb4

[mysql]

default-character-set=utf8mb4

[mysqld]

# 設置東八區時區
default-time_zone = '+8:00'

# 設置密碼驗證規則,default_authentication_plugin參數已被廢棄

# 改爲authentication_policy

#default_authentication_plugin=mysql_native_password
authentication_policy=mysql_native_password

# 限制導入和導出的數據目錄
# 爲空,不限制導入到處的數據目錄;
# 指定目錄,必須從該目錄導入到處,且MySQL不會自動創建該目錄;
# 爲NULL,禁止導入與導出功能
#secure_file_priv=/var/lib/mysql
secure_file_priv=

init_connect='SET collation_connection = utf8mb4_0900_ai_ci'

init_connect='SET NAMES utf8mb4'

character-set-server=utf8mb4

collation-server=utf8mb4_0900_ai_ci

skip-character-set-client-handshake

skip-name-resolve

-----保存後重啓Docker 中的 mysql

貌似可以了,可以看見映射到3307端口了

默認隨DOCKER重啓
docker update mysql --restart=always


再次嘗試進入容器內部

docker exec -it mysql /bin/bash

不行,報錯

修改配置文件中,變成我自己設置的密碼

authentication_policy=gaolegao

再次嘗試

不正確,還是那行報錯

unknown variable 'authentication_policy=mysql_native_password'.

CHATGPT反饋,版本問題,修改成如下

default_authentication_plugin=mysql_native_password

再次嘗試進入容器
docker exec -it mysql /bin/bash

可以了


mysql -u root -p

然後就像文章中說的,登錄進MYSQL,不要敲密碼,就可以進MYSQL


查用戶情況
use mysql;
select host, user, plugin, authentication_string, password_expired from user;


ALTER USER root@'%' IDENTIFIED WITH mysql_native_password BY 'gaolegao';
ALTER USER root@'localhost' IDENTIFIED WITH mysql_native_password BY 'gaolegao';

update user set host = '%' where user = 'root'; ---這個要加 否則,外面無法連接虛機裏面的MYSQL,折騰了蠻久

-- 刷新權限
FLUSH PRIVILEGES;

 

正常導數據。。。後來發現無法用本地開發工具正常DEBUG。。。
開始重新搞DOCKER

 

docker run -p 3307:3306 mysql:8.0.19

簡單粗暴
service docker stop

然後找到my.cnf文件,按照這個文件 https://blog.csdn.net/likunwen_001/article/details/42145083 進行修改

lower_case_table_names = 0

不行,再按照 https://blog.csdn.net/m0_57179014/article/details/120307139

lower_case_table_names = 1


隔了一天了,貌似還是不行

docker run -p 3307:3306 mysql:8.0.19 --privileged=true

報錯,查端口
netstat -tunlp
發現貌似沒啓動

查日誌
docker logs -f -t --tail==100 65e59c31f389

 


用下面的命令啓動:

docker run -p 3307:3306 --name mysql:8.0.19 --restart=always --privileged=true \
-v /myapp/mysql/log:/var/log/mysql \
-v /myapp/mysql/data:/var/lib/mysql \
-v /myapp/mysql/conf:/etc/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=gaolegao -d mysql:8.0.19


還是報錯
瘋了


docker run -p 3307:3306 --name mysql --restart=always --privileged=true \
-v /myapp/mysql/log:/var/log/mysql \
-v /myapp/mysql/data:/var/lib/mysql \
-v /myapp/mysql/conf:/etc/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=gaolegao \
-d mysql:8.0.19 --lower-case-table-names=1


docker: Error response from daemon: driver failed programming external connectivity on endpoint mysql (79e0f9d95ef955ad42a09af1c09ffeae5e640ff726e5e27d090aad8aa87ba5d2): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3307 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name.


檢查日誌
docker logs -f -t --tail==100 730b5290403e

發現

2023-07-19T06:48:19.461233972Z 2023-07-19T06:48:19.460691Z 1 [ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('1') and data dictionary ('0').
2023-07-19T06:48:19.462592471Z 2023-07-19T06:48:19.461441Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2023-07-19T06:48:19.462620312Z 2023-07-19T06:48:19.461849Z 0 [ERROR] [MY-010119] [Server] Aborting
2023-07-19T06:48:20.006077178Z 2023-07-19T06:48:20.001449Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.19) MySQL Community Server - GPL.
2023-07-19T06:49:20.924861854Z 2023-07-18 23:49:20-07:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.19-1debian10 started.
2023-07-19T06:49:21.113804867Z 2023-07-18 23:49:21-07:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2023-07-19T06:49:21.139193579Z 2023-07-18 23:49:21-07:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.19-1debian10 started.
2023-07-19T06:49:21.880131853Z 2023-07-19T06:49:21.844401Z 0 [Warning] [MY-010097] [Server] Insecure configuration for --secure-file-priv: Current value does not restrict location of generated files. Consider setting it to a valid, non-empty path.


只好再百度
https://blog.csdn.net/qq_26007225/article/details/121172462

發現說的好的文檔
https://blog.csdn.net/p793049488/article/details/108365929

好吧,直接刪除我自己安裝路徑下的data文件夾所有內容
/myapp/mysql/data


重啓
docker run -p 3307:3306 --name mysql --restart=always --privileged=true \
-v /myapp/mysql/log:/var/log/mysql \
-v /myapp/mysql/data:/var/lib/mysql \
-v /myapp/mysql/conf:/etc/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=gaolegao \
-d mysql:8.0.19 --lower-case-table-names=1


3307端口,連接,成功~~~

碎片時間去弄的,比較折騰

----------------------------總結------------------------------
(1)正常在DOCKER中安裝MYSQL鏡像
(2)安裝要配置conf文件
(3)conf文件中 要加配置 lower_case_table_names =1
(4)按照MYSQL安裝後的配置,自己配置相關的密碼啥的
(4)按照下面的配置,設置3307端口

docker run -p 3307:3306 --name mysql --restart=always --privileged=true \
-v /myapp/mysql/log:/var/log/mysql \
-v /myapp/mysql/data:/var/lib/mysql \
-v /myapp/mysql/conf:/etc/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=gaolegao \
-d mysql:8.0.19 --lower-case-table-names=1

(5)大小寫Linux默認是區分的,所以,很多windows下開發的代碼大小寫不分,需要按照上面的命令進行啓動
(6)要麼重新裝,要麼刪除data文件夾中所有文件

 

 

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