docker容器中安装Mysql8

1.docker容器运行MySQL镜像

#不添加容器数据卷
docker run -p 3310:3306 --name tztang_mysql8_master -e MYSQL_ROOT_PASSWORD=123456 -d mysql

#添加容器数据卷,conf.d是自定义的配置文件存放目录,/tztangEnvironment/...为宿主机中自定义目录
docker run -d -p 3310:3306 --privileged=true -v /tztangEnvironment/mysql8/log:/var/log/mysql -v /tztangEnvironment/mysql8/data:/var/lib/mysql -v /tztangEnvironment/mysql8/conf:/etc/mysql/conf.d --name tztang_mysql8_master -e MYSQL_ROOT_PASSWORD=123456 -d mysql

2.查看容器有没有运行成功

#查看自定义的实例名称,自定义端口号映射以及版本等有没有问题
docker ps

3.进入Mysql实例,连接Mysql

docker exec -it 运行的实例ID /bin/bash
mysql -uroot -p

4.这时通过远程连接Mysql可能会出现报错

docker容器中安装Mysql8_第1张图片

        4.1出现以上原因先排查是否有远程连接的权限,在终端连接上Mysql使用以下命令:

select host,user,plugin,authentication_string from mysql.user;

         4.2上图中host字段只有localhost(只允许本地连接),使用命令添加记录:

        如果Mysql装在本地并且为单机版,直接跳到4.3

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
#'%'表示对允许所有ip访问
#'123456'为自定义的密码

       4.3其实4.2也可以执行,只是没有必要放开访问权限

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';
#'%'表示对允许所有ip访问
#'newPassword'为自定义的密码

         刷新权限再次进行远程测试连接就可以连接成功。

flush privileges; /*刷新权限*/

5.补充说明,以上报错还可以通过升级Navicat版本来解决;另外,远程如果向数据库插入中文数据时出错,需要在Mysql实例查看编码集,命令:

show variables like 'character%';

docker容器中安装Mysql8_第2张图片

 容器如果加了数据卷,就在外部的conf目录下创建my.cnf并且添加如下脚本:

[client]
default_character_set=utf8
[mysqld]
collation_server=utf8_general_ci
character_set_server=utf8

6.重启Mysql服务生效

docker restart 容器ID

你可能感兴趣的:(容器,docker,数据库)