Docker安装MySQL以及解决Navicat连接MySQL报错

MacOS Docker 安装

使用Homebrew安装

1
brew cask install docker

手动下载安装

如果需要手动下载,请点击以下链接下载 StableEdge 版本的 Docker for Mac。

如同 macOS 其它软件一样,安装也非常简单,双击下载的 .dmg 文件,然后将鲸鱼图标拖拽到 Application 文件夹即可。

查看Docker版本

1
2
➜  ~ docker --version
Docker version 19.03.8, build afacb8b

Docker 安装MySQL

访问镜像查看MySQL版本

访问 MySQL 镜像库地址:https://hub.docker.com/_/mysql?tab=tags

可以通过 Sort by 查看其他版本的 MySQL,默认是最新版本 mysql:latest

命令查看MySQL可用版本

1
2
3
4
5
6
7
8
9
➜  ~ docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9673 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3518 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 705 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 77
mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 70
centurylink/mysql Image containing mysql. Optimized to be link… 61 [OK]
....

拉取 MySQL 镜像

1
2
3
4
# 最新的镜像
docker pull mysql:latest
# 指定镜像
docker pull mysql:8.0

查看本地镜像

1
2
3
4
➜  ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7.30 9cfcce23593a 2 weeks ago 448MB
mysql latest be0dbf01a0f3 2 weeks ago 541MB

运行容器

1
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
  • 参数说明:
  • -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
  • MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
1
2
3
4
# 查看是否安装成功
➜ ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a96f3f885216 mysql "docker-entrypoint.s…" 16 hours ago Up 21 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql-test

切换到MySQL镜像,登录MySQL

1
docker exec -it mysql-test bash

登录MySQL

1
mysql -u root -p 123456

Navicat 连接Docker MySQL

连接报错信息

1
2059 - Authentication plugin 'caching_sha2_password' cannot be loaded: dlope

查看mysql版本

1
2
3
4
5
6
7
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.20 |
+-----------+
1 row in set (0.00 sec)

mysql_native_passwordmysql5的加密方式,mysql8caching_sha2_password认证方式,所以要修改加密方式

修改MySQL权限以及加密方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 添加授权
GRANT ALL ON *.* TO 'root'@'%';
flush privileges;

#查看用户加密方式
use mysql;# 切换到mysql库
mysql> select user,plugin from user where user='root'; # 查看加密方式
+------+-----------------------+
| user | plugin |
+------+-----------------------+
| root | caching_sha2_password |
| root | mysql_native_password |
+------+-----------------------+
## 修改加密方式
mysql> alter user 'root'@'%' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> select user,plugin from user where user='root';
+------+-----------------------+
| user | plugin |
+------+-----------------------+
| root | mysql_native_password |
| root | mysql_native_password |
+------+-----------------------+
2 rows in set (0.00 sec)

Docker版本Mysql容器中不支持输入中文

mysql插入数据时候,发现中文字符不支持

查看字符集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
root@a96f3f885216:/# locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

可以看到,默认的是POSIX字符集,这个传统的字符集是不支持中文的,所以我们的核心操作就是要更改字符集为支持中文的字符集。

可支持utf-8

1
2
3
4
root@a96f3f885216:/# locale -a
C
C.UTF-8
POSIX

修改

1、添加到profile

1
echo "export LANG=C.UTF-8" >>/etc/profile && source /etc/profile

2、直接设置环境变量

1
LANG=C.UTF-8

3、Docker启动容器时,指定环境变量

1
docker run -d mysql env LANG=C.UTF-8

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!