Docker配置MySQL容器+远程连接(全流程)
最近在复习项目服务器部署,想要重新配置一个Mysql的Docker容器,发现很多知识有点记不清了,在这里记录一下。
一、Docker配置MySQL容器(全流程)
需要支持
- Linux服务器
- Docker
- 常用的Linux和Docker命令
第一步:拉取MySQL镜像
1、拉取MySQL镜像(这里一般不会出现什么问题)
# docker pull mysql
PS:可能有点小慢,但速度还是能肉眼所见的,若出现下载太慢,亦或者连接超时。可以回忆一下Docker的库的国内代理是否配置了,若未配置则花上5分钟配置一下;若配置过则可先排除网络问题,然后考虑换个国内代理。
2、查看本地镜像,确认是否拉取成功
docker images
[root@iZ2ze2x2gvxfbo4c9b3Z docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/mysql latest 0d64f46acfd1 5 months ago 544 MB
(成功的话,列表内会出现docker.io//mysql
)
这里拉取的是MySQL:latest版本,也可以使用$ docker pull mysql:5.7
下载对应版本(以5.7为例)
第二步:根据镜像生成容器
1、通过镜像生成容器
docker run
# docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name my_mysql mysql
注释
[ -d ]: 后台运行;
[ -p ]: 配置端口映射(容器的3306映射到Linux的3307端口)
[ -e ]: 添加配置信息(密码为123456)
[ --name ]: 容器名字
mysql :镜像名字
2、查看目录运行中的容器列表
docker ps
[root@iZ2ze2x2gv8gqxfbo4c9b3Z docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
382eacf64ae4 mysql "docker-entrypoint..." 3 hours ago Up 3 hours 33060/tcp, 0.0.0.0:3307->3306/tcp my_mysql
f1891859be3a mysql "docker-entrypoint..." 4 months ago Up 4 months 0.0.0.0:3306->3306/tcp, 33060/tcp mysql01
bb2a2366bae9 tomcat "catalina.sh run" 5 months ago Up 5 months 0.0.0.0:8888->8080/tcp loving_edison
其中第一条就是我们刚创建的MySQL镜像了
3、进入容器内简单测试
docker exec -it my_mysql bash
[root@iZ2ze2x2gv8gqxfbo4c9b3Z docker]# docker exec -it my_mysql bash
root@382eacf64ae4:/#
此时发现,命令行的前缀已经变成了382eacf64ae4,就是我们新建的my_mysql的容器ID。此时就相当于进入了容器内部的命令窗口。
此时输入
mysql -uroot -p123456
root@382eacf64ae4:/# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.21 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
到此为止,容器就已经创建完毕。
第三步:为MySQL容器配置远程连接访问权限
1、此时测试远程连接
以Navicat 为例,SQLyog管理软件等同理
2、连接测试
因未配置权限一定会出现报错
但这里可能出现另外一种报错,一同说一下把
报错1: 2003
此错误为云服务的安全策略配置问题,需要我们配置安全策略,开放我们要使用的3307端口。
下边以阿里云服务器为例
1、进入官网后登录,进入 控制台 ,
2、进入个人服务器实例控制页面
3、进入实例控制界面
4、进入对应安全组界面
5、点击配置规则
6、添加对应的端口号即可。
到此,报错2003就解决完毕
一定会出现的另一个错误 – 远程访问权限错误
报错二 1251
进入容器,操作数据库给root分配远程访问权限
1、进入容器可使用 docker exec -it my_mysql bash
进入,这里不再贴代码了。
2、登录进入mysql ,使用 mysql -uroot -p123456
登录mysql数据库
3、给root用户分配权限
alter user 'root'@'%' identified with mysql_native_password by '123456';
mysql> alter user 'root'@'%' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.00 sec)
4、刷新权限
flush privileges;
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
5、测试连接
至此,容器配置完毕,远程连接完成。
写在后边,这个容器其实只是简单测试MySQL容器,其中的数据,Docker一但重启就会消失,真正在正式使用的时候,会将MySQL中的数据、日志、配置文件等重要文件亦或是其他重要文件进行挂载操作。防止数据丢失。(具体内容将会在另一篇文章中发表(总结中))
最后,总结不易,如果能帮到大家,给博主点鼓励点点小赞,万分感谢。
------ 分界线 ----
----- 2024年9月14日 -------
因工作原因,不是特别常关注评论,最近发现反映 <<< Plugin ‘mysql_native_password’ is not loaded >>>错误的较多,本错误是因为低版本Navicat对与高版本MySQL的密码脚本不支持。MySQL 8.0默认使用caching_sha2_password身份验证插件,而一些客户端库(如老版本的MySQL Connector/J)可能还不支持这个新的加密方法。
解决方案:可以更改MySQL的配置文件mysql_native_password为on,具体可以百度或者博一下,这里不在机械搬运,若只是为了学习功能也可以选择低版本的MySQL本地测试学习。感谢理解
更多推荐
所有评论(0)