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