docker镜像地址:https://hub.docker.com/
这里以8.0.28为例:
1、查看可用的 MySQL 版本
访问 MySQL 镜像库地址: Docker 。
可以通过 Sort by 查看其他版本的 MySQL,默认是最新版本 mysql:latest 。
来自 < Docker 安装 MySQL | 菜鸟教程>
可以用 docker search mysql
2、拉取 MySQL 镜像
这里如果我们拉取官方的最新版本的镜像:
$ docker pull mysql:latest
拉取8.0.28版本:
docker pull mysql:8.0.28
3、查看本地镜像
使用以下命令来查看是否已安装了 mysql:
$ docker images
4、运行容器
安装完成后,我们可以使用以下命令来运行 mysql 容器:
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=yc200509 \
-d mysql:8.0.28
参数:
- -p 3306:3306:将容器的3306端口映射到主机的3306端口
- --name:给容器命名
- -v /mydata/mysql/log:/var/log/mysql:将配置文件挂载到主机/mydata/..
- -e MYSQL_ROOT_PASSWORD=yc200509:初始化root用户的密码为yc200509
-v表示 “挂载“,如果需要经常修改MySQL配置文件,每次都要通过docker exec -it mysql /bin/bash进入容器内部修改,这样的操作十分繁琐,所以这里将常用的MySQL配置文件从docker容器中”拷贝“一份,相当于做成了一个快捷方式,链接 到Linux系统中,这样修改更加方便。
-v /mydata/mysql/log:/var/log/mysql \ #挂载MySQL日志文件到Linux的/mydata/mysql/log目录下
-v /mydata/mysql/data:/var/lib/mysql \ #挂载MySQL运行期间产生的数据到Linux的/mydata/mysql/data目录下
-v /mydata/mysql/conf:/etc/mysql/conf.d \ #挂载MySQL的配置文件到Linux的/mydata/mysql/conf目录下
5、查看docker启动的容器
docker ps -a
可以执行docker logs mysql 看一下日志
6、配置MySQL
1)进入挂载的mysql配置目录
cd /mydata/mysql/conf
2)修改配置文件 my.cnf
vim my.cnf
拷贝以下内容:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
# Esc
# :wq
3)docker重启使MySQL配置生效:
docker restart mysql
重启报错:
Error response from daemon: Cannot restart container mysql: driver failed programming external co nnectivity on endpoint mysql (1e1037a0ad79edfbd8780643fbeccf2fff9ad9a6433c9f0d4d2ec080a9dcdf65): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-desti nation 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name.
翻译过来大概意思:无法重新启动容器mysql,程序未能连接mysql的端口,因为3306端口是dport
解决办法:
1.启动3306的 端口:
iptables -A INPUT -ptcp --dport 端口号 -j ACCEPT
2.如果不行,重启docker
docker服务启动时定义的自定义链DOCKER会被清除
systemctl restart docker
然后启动mysql服务:docker start mysql
7、在Windows上测试这个MySQL连接:
dos窗口登录虚拟机的MySQL是没问题的,但是使用navicat连接不成功:
使用本地navicat连接MySQL,报错:
解决办法:
先从dos窗口登录MySQL:
mysql -h 192.168.41.130 -u root -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 8.0.28 MySQL Community Server - GPL
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
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> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
mysql> use mysql;
Database changed
mysql> ALTER USER 'root'@'%' IDENTIFIED BY 'yc200509' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'yc200509';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
8、进入容器:
docker exec -it mysql(容器名或者写容器id,前几位也可以,只要表示出容器的唯一性) /bin/bash
7、删除容器