Docker安装启动MySQL8

1.1-拉取镜像

# 1.拉取镜像
docker pull mysql:8.0

1.2-MySQL文件挂载到 Linux 中

创建配置文件路径

vim /liuhanlin/docker-solftware/solft-config/mysql-config/my.cnf

在配置文件中写入如下内容,这里是 mysql8.0 的配置文件示例

[client]
#设置客户端默认字符集utf8mb4
default-character-set=utf8mb4
[mysql]
#设置服务器默认字符集为utf8mb4
default-character-set=utf8mb4
[mysqld]
#配置服务器的服务号,具备日后需要集群做准备
server-id = 1
#开启MySQL数据库的二进制日志,用于记录用户对数据库的操作SQL语句,具备日后需要集群做准备
log-bin=mysql-bin
#设置清理超过30天的日志,以免日志堆积造过多成服务器内存爆满
expire_logs_days=30
#解决MySQL8.0版本GROUP BY问题
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
#允许最大的连接数
max_connections=1000
# 禁用符号链接以防止各种安全风险
symbolic-links=0
# 设置东八区时区
default-time_zone = '+8:00'

给文件目录开权限

chmod 777 /liuhanlin/docker-solftware/log/mysql-log/log

chmod 644 /liuhanlin/docker-solftware/solft-config/mysql-config/my.cnf

my.cnf配置文件必须设置644权限,设置777在登录mysql时报警告配置文件无法生效。

1.3-启动 MySQL 镜像

docker run -p 3306:3306 \
  --restart=always \
  --name mysql \
  --privileged=true \
  -v /home/mysql/log:/liuhanlin/docker-solftware/log \
  -v /home/mysql/data:/liuhanlin/docker-solftware/data/mysql-8.0-data \
  -v /home/mysql/conf/my.cnf:/liuhanlin/docker-solftware/solft-config/mysql-config/my.cnf \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -d mysql:8.0 \
  --lower-case-table-names=1
  • -p:主机端口:容器端口
  • -d:启动的镜像名称
  • –name:设置容器名称
  • –privileged=true:赋予容器权限修改宿主文件权利
  • –restart=always:设置docker启动时,容器跟随自启
  • –lower-case-table-names=1:用于指定表名是否进行大小写不敏感的处理
  • -e MYSQL_ROOT_PASSWORD=123456:设置MySQL的root用户的密码
  • -v /home/mysql/log:/var/log/mysql:挂载容器日志到宿主,方便查看日志
  • -v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf:挂载容器配置文件到宿主,方便修改配置文件
  • -v /home/mysql/data:/var/lib/mysql:挂载容器存储文件到宿主,避免因不小心卸载容器或者容器损坏导致数据丢失不可找回风险。
    注意点:-v 参数前面路径的是docker镜像里的路径,后面这个可以自己设置,我设置的就是/liuhanlin/docker-solftware

1.4-踩坑

1.4.1-docker 杀死容器后,使用相同的容器名,再次重启时报错

在杀死容器后,再次重启时报错,问题如下

在这里插入图片描述

解决:

  1. 使用 docker ps -a命令能够看到所有docker容器,包括已经被杀死的
  2. 使用 docker rm 容器id/容器名
  3. 然后再使用 docker ps -a 可以看到删除了,再次运行时就不会出现这种问题了
1.4.2-在远程使用DBeaver等工具连接不上容器中的 MySQL

使用SQLYog 连接时报错

在这里插入图片描述

解决:进入到容器中的MySQL 中,连接上MySQL 后执行如下命令

进入docker 的MySQL

# 进入docker
docker exec -it 容器名 bash
# 登录MySQL
mysql -u用户名 -p -P3306

# 如下示例
docker exec -it mysql bash
mysql -uroot -p -P3306


执行如下命令

ALTER USER '用户名'@'%' IDENTIFIED WITH mysql_native_password BY '密码';

# 如下示例;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 刷新权限
FLUSH PRIVILEGES;

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐