拉取mysql镜像
docker pull mysql
查看镜像
docker images
运行镜像(这一步的作用:数据持久化,通过挂载卷将日志、数据和配置文件存储在主机上,避免容器删除导致数据丢失)
docker run -p 3306:3306 --name mysql --restart=always --privileged=true \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
修改mysql配置(my.cnf文件)
[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4[mysqld]# 设置东八区时区
default-time_zone = '+8:00'# 设置密码验证规则,default_authentication_plugin参数已被废弃# 改为authentication_policy#default_authentication_plugin=mysql_native_password
authentication_policy=mysql_native_password# 限制导入和导出的数据目录
# 为空,不限制导入到处的数据目录;
# 指定目录,必须从该目录导入到处,且MySQL不会自动创建该目录;
# 为NULL,禁止导入与导出功能
#secure_file_priv=/var/lib/mysql
secure_file_priv=""init_connect='SET collation_connection = utf8mb4_0900_ai_ci'init_connect='SET NAMES utf8mb4'character-set-server=utf8mb4collation-server=utf8mb4_0900_ai_ciskip-character-set-client-handshakeskip-name-resolve
重启mysql服务,使其配置生效
docker restart mysql
设置docker启动时启动mysql
docker update mysql --restart=always
授权远程访问,进入容器内部
docker exec -it mysql /bin/bash
登陆mysql
mysql -u root -p
选择数据库
show databases;
use mysql;
查看用户连接情况
select host, user, plugin, authentication_string, password_expired from user;
修改密码认证方式
ALTER USER root@'%' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER root@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;-- 刷新权限
退出容器
exit;
解决mysql连接客户端Navicat问题
连接mysql数据库
docker exec -it mysql bash
连接服务器
mysql -u root -p
查看当前所有数据库
show databases ;
进入mysql数据库
use mysql ;
查看mysql数据库中所有的表
show tables ;
查看user表中的数据
select Host, User from user ;
修改user表中的Host
update user set Host='%' where User='root' ;
最后刷新一下
flush privileges ;