拉取mysql8.0镜像
docker pull mysql:8.0
配置mysql配置文件my.cnf
[mysqld]
port=3306
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv=
default-time-zone = '+8:00'
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
max_connections=8000
sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'
max_allowed_packet = 20M
#
# # Custom config should go here
!includedir /etc/mysql/conf.d/
secure-file-priv 导入文件配置 = NULL 为禁止 = 空为允许所有
注意时区设置 mysql8 默认美国时区 与中国正常时间差8小时
运行容器:
docker run -p 3306:3306 --name mysql -v /usr/mysql/conf:/etc/mysql/conf.d -v /usr/mysql/data:/var/lib/mysql --privileged=true -e MYSQL_ROOT_PASSWORD=mysql8123 -d mysql:8.0
命令说明:
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
-v -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/conf.d。
-v $PWD/logs:/etc/mysql/logs:将主机当前目录下的 logs 目录挂载到容器的 /etc/mysql/logs
-v $PWD/data:/etc/mysql/data :将主机当前目录下的data目录挂载到容器的 /etc/mysql/data
-e MYSQL_ROOT_PASSWORD=mysql8123:初始化 root 用户的密码。
--privileged=true: 给容器加上特定权限
查看运行情况
docker ps
进入mysql
docker exec -it mysql bash
mysql是容器名称
创建用户
mysql -u root -p 用设置root账户登陆
create user 'mysqltest'@'%' identified by 'mysqltest123'; -- 创建用户
grant all privileges on *.* to 'mysqltest'@'%'; -- 授权
//修改密码策略为原数据库策略 使老版本的mysql驱动可以连接 如果不配置请使用新版本驱动
alter user 'mysqltest'@'%' identified with mysql_native_password by 'mysqltest123';
flush privileges; -- 刷新权限
exit; 退出mysql
ctrl+p+q 退出容器且不停止容器
开放3306端口 以下方式只针对centos默认防火墙设置
方案一 关闭防火墙
systemctl stop firewalld.service
关闭防火墙开机自启动
sudo systemctl disable firewalld.service;
方案二 开放端口
#永久开放端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
#重新加载生效开放的端口
firewall-cmd --reload