Docker安装Mysql数据库

1. 前言

XXXXX

2. Docker中安装MySQL服务

以下以mysql8.2版本为例,mysql5.7的步骤也是一样的

2.1. 查看可用的MySQL版本

shell 复制代码
# 搜索镜像
docker search mysql

2.2. 拉取MySQL镜像

mysql 复制代码
# 拉取镜像
docker pull mysql

# 或者
docker pull mysql:latest

2.3. 查看本地镜像

使用以下命令来查看是否已安装了 mysql镜像

mysql 复制代码
docker images

2.4. 运行容器

MySQL是常用的关系型数据库,一般的,希望它能永久的保存数据,哪怕是当容器被删除了数据也不要删除,此时就需要把主机文件夹挂载到容器上,这样可以保证即使容器删除后新建的MySQL容器可以使用之前的数据。

  • 先准备好本地的目录
shell 复制代码
mkdir -p /usr/local/mysql/log
mkdir -p /usr/local/mysql/data
mkdir -p /usr/local/mysql/conf
  • 挂载目录,启动容器
shell 复制代码
# Docker启动MySQL容器
docker run -p 3306:3306 --name mysql \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql

-p 3306:3306:指定宿主机端口与容器端口映射关系

-v:挂载主机文件夹 /usr/local/mysql/data 到 容器/var/lib/mysql 挂载点

-e:指定容器需要的变量

-it:表示交互式终端;

-d:后台运行mysql容器

注意:-v /usr/local/mysql/conf:/etc/mysql.d \ 这里对应的是mysql.d很多人都写成了conf,导致容器启动失败

2.5. 查看正在运行的容器

shell 复制代码
# 查看正在运行的容器
docker ps
# 查看所有的docker容器
docker ps -a

这个时候如果显示的是up状态,那就是启动成功了。如果是restarting,说明是有问题的。我们可以查看日志:

shell 复制代码
docker logs -f mysql

2.6. 查看容器内部

shell 复制代码
docker exec -it mysql /bin/bash

2.7. 授权root远程登录

  • 进入容器
shell 复制代码
docker exec -it mysql /bin/bash
  • 登录mysql
shell 复制代码
mysql -uroot -p
  • 查看用户、插件
mysql 复制代码
mysql> use mysql;
Database changed
mysql> select host,user,plugin from user;
+-----------+------------------+-----------------------+
| host      | user             | plugin                |
+-----------+------------------+-----------------------+
| %         | root             | caching_sha2_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session    | caching_sha2_password |
| localhost | mysql.sys        | caching_sha2_password |
| localhost | root             | caching_sha2_password |
+-----------+------------------+-----------------------+
5 rows in set (0.00 sec)
mysql> 

查看结果,root@'localhost'也看到了root@'%'root@'%'`。已经有了远程登录root@'%',所以可以直接进行远程连接。

  • 直接退出吧

2.8. 在宿主机连接到容器的MySQL

mysql 复制代码
# 用命令行测试端口连通性
[root@bogon ~]# nc -nv 127.0.0.1 3306
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 127.0.0.1:3306.
I
8.2.0
# 查看能不能连接上MySQL
mysql -u root -P 3306 -h 127.0.0.1 -proot
# 查看容器日志
docker logs -f mysql

2.9. 用Navicat连接容器的MySQL

  • 配置连接的参数
  • 连接上了

3. 授权root远程登录

  • 进入mysql容器
shell 复制代码
docker exec -it mysql /bin/bash
  • 登录mysql
shell 复制代码
mysql -uroot -p
mysql 复制代码
mysql> use mysql
Database changed
mysql> select host,user,plugin from user;
+-----------+------------------+-----------------------+
| host      | user             | plugin                |
+-----------+------------------+-----------------------+
| %         | root             | caching_sha2_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session    | caching_sha2_password |
| localhost | mysql.sys        | caching_sha2_password |
| localhost | root             | caching_sha2_password |
+-----------+------------------+-----------------------+
5 rows in set (0.00 sec)

mysql>

可以看到出厂就创建了root@'%'账号。如果没有就自行创建下把

  • 创建root@'%'账号
shell 复制代码
mysql> create user root@'%' identified by 'root';
Query OK, 0 rows affected (0.01 sec)

mysql>
  • 授权所有权限给root@'%'账号
shell 复制代码
mysql> grant all on *.* to root@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> 

3.1. 取消密码强度限制

  • 卸载"验证密码"组件
shell 复制代码
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镜像默认没有安装

  • 卸载"验证密码"插件
shell 复制代码
mysql> UNINSTALL PLUGIN validate_password;
ERROR 1305 (42000): PLUGIN validate_password does not exist
mysql> 

docker的mysql镜像默认没有安装

相关推荐
PGCCC几秒前
【PGCCC】Postgresql 存储设计
数据库·postgresql
PcVue China2 小时前
PcVue + SQL Grid : 释放数据的无限潜力
大数据·服务器·数据库·sql·科技·安全·oracle
魔道不误砍柴功4 小时前
简单叙述 Spring Boot 启动过程
java·数据库·spring boot
锐策4 小时前
〔 MySQL 〕数据库基础
数据库·mysql
远歌已逝5 小时前
管理Oracle实例(二)
数据库·oracle
日月星宿~5 小时前
【MySQL】summary
数据库·mysql
爱吃土豆的程序员5 小时前
在oracle官网下载资源显示400 Bad Request Request Header Or Cookie Too Large 解决办法
java·数据库·oracle·cookie
睿思达DBA_WGX5 小时前
Oracle 11g rac 集群节点的修复过程
数据库·oracle
尘浮生5 小时前
Java项目实战II基于微信小程序的移动学习平台的设计与实现(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·学习·微信小程序·小程序
南猿北者5 小时前
docker Network(网络)
网络·docker·容器