1. 前言
虽然 docker 安装 mysql 不是一个很好的方案,但是为了个人使用方便,使用 docker 安装 mysql 还是没什么问题的。
且安装时把主机文件挂载到容器上,保证了 mysql 的持久化,对开发和测试也很友好。
2. Docker中安装MySQL服务
以下以mysql5.7版本为例,mysql8.0的步骤也是一样的
2.1. 查看可用的MySQL版本’
# 搜索镜像
docker search mysql
2.2. 拉取MySQL镜像
# 拉取镜像--指定
docker pull mysql:8.0
# 或者
docker pull mysql:latest
2.3. 运行容器
MySQL是常用的关系型数据库,一般的,希望它能永久的保存数据,哪怕是当容器被删除了数据也不要删除,此时就需要把主机文件夹挂载到容器上,这样可以保证即使容器删除后新建的MySQL容器可以使用之前的数据。
- 先准备好本地的目录
mkdir -p /mydata/mysql/log
mkdir -p /mydata/mysql/data
mkdir -p /mydata/mysql/conf
- 挂载目录,启动容器
# Docker启动MySQL容
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=abcd.1243 -d mysql:8.0
-p 3306:3306:指定宿主机端口与容器端口映射关系
-e:指定容器需要的变量
-d:后台运行mysql容器
2.5. 查看正在运行的容器
# 查看正在运行的容器
docker ps
# 查看所有的docker容器
docker ps -a
这个时候如果显示的是up状态,那就是启动成功了。如果是restarting,说明是有问题的。我们可以查看日志:
docker logs -f mysql
2.6. 查看容器内部
docker exec -it mysql /bin/bash
登录mysql
mysql -uroot -p
2.8. 在宿主机连接到容器的MySQL
# 用命令行测试端口连通性
telnet localhost 3306
# 查看能不能连接上MySQL
mysql -u root -P 3306 -h 127.0.0.1 -proot
# 查看容器日志
docker logs -f mysql
3. 如果是MySQL8.0可能需要执行
不得不说,mysql的docker镜像很人性化,不仅默认出产设置帮我们取消了安全限制,也允许root远程登录。
注:docker安装mysql一般用于开发测试,所以默认出厂设置帮用户做了一些设置。但是Linux下安装的mysql8.0默认是有一些安全限制和限制root远程登录。
3.1. 授权root远程登录
- 进入mysql容器
docker exec -it mysql /bin/bash
登录mysql
mysql -uroot -p
- 创建root@'%'账号
mysql> create user root@'%' identified by 'root';
Query OK, 0 rows affected (0.01 sec)
mysql>
- 授权所有权限给root@'%'账号
mysql> grant all on *.* to root@'%';
Query OK, 0 rows affected (0.00 sec)
mysql>
3.2. 取消密码强度限制
- 卸载"验证密码"组件
mysql> UNINSTALL COMPONENT 'file://component_validate_password';
ERROR 3537 (HY000): Component specified by URN 'file://component_validate_password' to unload has not been loaded before.
mysql>
docker的mysql镜像默认没有安装
- 卸载"验证密码"插件
mysql> UNINSTALL PLUGIN validate_password;
ERROR 1305 (42000): PLUGIN validate_password does not exist
mysql>
docker的mysql镜像默认没有安装
- 参考资料
在生产环境安装MySQL 8.0
4、使用Docker Compose安装(做快速部署用)
1、安装Docker和Docker Compose
首先,确保你的系统已经安装了Docker和Docker Compose。你可以根据操作系统的不同,按照官方文档的指引进行安装。
2、创建Docker Compose文件:
在你的项目目录下创建一个名为docker-compose.yml,代码内容如下。在下面的配置中,我们使用了MySQL官方提供的镜像,并将MySQL的默认端口3306映射到主机的3306端口。这里需要将your_password
替换为咱们自己的MySQL root密码。此外,我们还将MySQL的数据目录/var/lib/mysql
映射到主机的./data
目录,以便数据可以持久化保存。
mysql:
image: mysql:latest ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=your_password volumes:
- ./data:/var/lib/mysql
3、启动MySQL容器
打开终端,进入到包含docker-compose.yml
文件的目录,并执行以下命令启动MySQL容器。Docker将会下载MySQL镜像,并启动一个MySQL容器。
bashdocker-compose up -d
4、验证MySQL容器是否正常运行
执行以下命令,查看MySQL容器的运行状态,如果MySQL容器处于运行状态,则表示MySQL已成功安装和启动。
bashdocker-compose ps
5、连接到MySQL容器
现在可以使用任何MySQL客户端工具(如MySQL命令行客户端或可视化工具)连接到MySQL容器。在连接时,需要使用以下信息:
- 主机:localhost- 端口:3306- 用户名:root- 密码:您在
docker-compose.yml
文件中设置的密码通过连接到MySQL容器,您可以执行SQL语句、创建数据库和表等操作。
6、停止和清理
如果想停止MySQL容器并清理相关的容器和资源,可以执行以下命令,Docker将会停止并删除MySQL容器和相关的网络和卷。
bashdocker-compose down