1.镜像拉取
docker pull mysql:8
2.启动mysql容器
① 先在服务器中创建需要挂载的文件
mkdir /etc/mysql/cnf
mkdir /etc/mysql/data
mkdir /etc/mysql/log
还需要再/etc/mysql/cnf 的文件夹下面创建mysql的配置文件my.cnf 用于挂载
[mysqld]
server-id=1211212
## 开启binlog
log-bin=mysql-bin
## binlog缓存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默认格式是statement)
binlog_format=mixed
secure_file_priv=/var/lib/mysql
default_time_zone ='+8:00'
#skip-grant-tables
#--skip-host-cache
skip-name-resolve
[client]
default-character-set = utf8mb4
参数说明:
server-id 服务id,可自行数字定义,若存在多个mysql服务,应不同
log-bin,binlog_cache_size,binlog_format 都是对日志的设置,没有相关需要,可不设置
default_time_zone 时区配置,这个不配置的话,可以在容器启动的时候,挂载本地的/etc/localtime时间到容器中,如果都不设置,会导致mysql内部的时间不准确
skip-grant-tables 这个字段用于忘记密码时登录mysql跳过验证,不需要密码直接进入,再进行密码的修改
skip-name-resolve 禁止mysql反向解析DNS,这就会涉及到一个可能出现的问题
在日志中,会频繁报该提醒,就是因为mysql的反向解析DNS导致的问题,添加该字段可以直接禁止,
② 使用命令启动mysql容器
docker run -id -p 3306:3306 --name privacy-computing-mysql --privileged=true
-v /etc/mysql/cnf:/etc/mysql
-v /etc/mysql/log:/var/log/mysql
-v /etc/mysql/data:/var/lib/mysql
-v /etc/localtime:/etc/localtime:ro
-e MYSQL_ROOT_PASSWORD=***
-d mysql:8
如果在my.cnf中已经配置了时区,这边/etc/localtime就不需要挂载了,
在启动的时候,可能会出现以下问题导致启动失败,
Failed to access directory for --secure-file-priv. Please make sure
that directory exists and is accessible by MySQL Server. Supplied value : /var/lib/mysql-files
这时候,需要在上面创建的my.cnf文件中
在[mysqld]内加入secure_file_priv=/var/lib/mysql
3.使用navicat连接
① 使用navicat客户端连接
② 可能出现的问题
1) 该问题是因为你的连接没有远程连接的权限,只能本地连接使用
解决:
需要修改host表
先进入mysql服务中
更改host字段的值
update user set host='%' where host='localhost';
刷新
flush privileges;
2) navicat报错Client does not support authentication protocol requested by server client
原因: mysql8的加密规则修改,再加上navicat的版本过低,导致的无法连接
解决:
第一种: 升级当前使用的navicat,
第二种:修改加密方式
这里的password 是自己的密码
alter user 'root'@'%' identified by 'password' password expire never;
alter user 'root'@'%' identified with mysql_native_password by 'root';
flush privileges;