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文件夹中所有文件

 

 

posted @ 2023-07-20 10:41  苦行者的刀  阅读(481)  评论(0编辑  收藏  举报