群晖NAS下docker安装mysql 8.0.31
目前我使用的是在黑群晖 6.2DM 下的 docker 内刷入一个官方的 MySQL 版本是8.0.31 (推荐选择 Debian 的发行版, 因为 latest 我试过后发现没有 yum 工具, 修改配置文件要麻烦很多)
拉取合适的镜像
创建容器设置好映射的文件(数据持久化的需求, 防止容器内部出现错误导致数据清零)、本地的端口、以及新增环境变量:
MYSQL_ROOT_PASSWORD (值为自己设置的密码)
完成初始化配置,并启动容器
这里需要说明的是, 映射的目录分别为/home/data(data)、/home/logs(logs) ,并要在终端内部修改权限, 让内部的数据/日志都能够在 NAS 本地访问.
- 修改权限(目的是为了让容器自身的mysql用户能够读取和写入预先准备好的映射到NAS本地的文件夹)
chown -R mysql:mysql /home/data chown -R mysql:mysql /home/logs chmod -R 755 /home chmod -R 755 /home/data chmod -R 755 /home/logs
- 修改/etc/mysql/my.cnf –> 容器内部的data和logs文件都能够映射到NAS本地
datadir = /home/data log-error = /home/logs/error.log
修改/etc/mysql/my.cnf配置文件
❗重点❗
这一步是至关重要的一步, 因为只有将 data 目录映射出来, 才能让容器内部的数据能够不随着容器关闭而消失, 而下面修改的配置文件本质上是修改 mysql 数据库下的 user 表格的内容, 我们希望对MySQL的修改持续生效的话 , 就必须让MySQL的配置表单存储在本地 , 如果这一步没有让数据持久化存储, 在容器关闭之后 , 重启后开启MySQL服务时 , MySQL会再次读取存储在容器内部 user 表格的内容 , 这里的表格内容显然是随着容器的重启而全部重置了的 –> 从而导致远程登陆MySQL失败
- 进入到终端界面后, 可以查看, 用
mysql -u root -p
来启动 MySQL 服务, 默认进入的是 ‘mysql’ 数据库.
查看当前数据库🛢️下的 user 数据表 , 使用 SQL 语句的SELECT
关键字
SELECT Host,User,plugin FROM mysql.user
- 因为是 8.0 版本 ⚠️ , 所以认证方式修改为本地存储的密码匹配认证(mysql_native_password) (该数据也是存储在数据库中的,所以如果没有预先将容器内的数据库映射出去,该数据库会随着容器的关闭而重置)
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码'
这里 BY’'是操作失误, 应该为 BY ‘密码’(填 root 的密码 ), 比如我的就是 123456
修改认证方式,以便在客户端上远程连接 (注意
BY
关键字后要填入自己设置的密码 )
到这里 docker 上的 mysql 已经配置完成, 本地连接我个人使用的是 HeidiSQL , 可以到官网去下载
根据个人喜好下载客户端 , 我这里推荐使用的是HeidiSQL (要是实在不知道选择哪个客户端的话 , 你甚至可以直接在docker容器的终端窗口操作😂)
连接…
现在已经完成了! Happy hacking 😃