文章目录
1. 教程目标及适用范围
本教程皆在完成在群晖DSM系统上利用docker环境安装并配置mysql,并且完成局域网内的客户机远程连接。适用于有在家架设实时数据库想法且想DIY的小白(因为我也是,所以做成了很艰难)。囿于水平有限,书写错误和理解错误在所难免,欢迎各位大佬指教!
2. 准备工作
2.1 硬件环境
- 群晖NAS,1台:必须CPU为64位处理器的(DS21Xj、play的就不要想了,之前踩坑),否则Docker在套件中心找不到更不用说安装了。本人采用DS218+,NAS版本保持更新即可,没发现版本变化的影响;
- 电脑,1台:教程适用于windows10系统操作,个人环境为surface pro5,Windows10 家庭版;
- 网络配置说明:个人家庭使用电信宽带,GPON光猫桥接小米路由PRO,路由进行拨号上网,NAS有线连接路由器LAN口,NAS的IP为
192.168.31.21
,笔记本通过无线连接路由器。
注:保证NAS和操作电脑在一个局域网内即可,其他的不需要关心。
2.2 用到的技能
- DSM系统的基本使用,照着NAS安装配置时的教程上手即可,知道控制面板怎么打开、文件夹怎么维护、程序怎么安装就好;
注:不用担心,以下内容不影响安装和配置,只是知其然知其所以然的道理,另外也是自己梳理一下整个过程用到的技能树。
- Linux基础操作,一些用到的指令如sudo、chmod、mkdir、chown等;
- MySQL的技能操作,怎么配置,怎么启动,怎么修改数据;
- 排故时可能需要用到SSH服务进行远程操控DSM系统。*
3. 基本思路
第一步:需要在DSM上安装Docker程序。Docker是一个虚拟环境,个人粗浅理解为一个虚拟机(但大神告诉我实际不是,有区别!),在这个环境里可以安装各种程序甚至一个系统;
第二步:在Docker上安装MySQl映像,这个在DSM的图形界面下搜索安装即可;
第三步:配置环境并创建容器运行MySQL,需要进行端口设置(远程访问时的接口)、卷设置(文件在NAS存储位置的映射)、密码设置(访问数据库的密码,通过环境变量设置);
第四步:打开MySQL并修改远程访问权限、加密方式修改(MySQL 8.0版本新特性导致加密方式改变,需在默认数据库修改)
第五步:客户机的远程访问,在windows下通过heidiSQL图形化客户端进行MySQL的访问。
整体过程以附录1群晖 docker 安装 mysql – IT513为指导,只是该博客仅是简略过程记录,没有一些前因后果。实践中的时候遇到了不少问题和不一致的地方,因此我写的会比较详尽,也会将我踩的坑分享出来,避免更多人走弯路。
4.安装配置过程
4.1 安装Docker
在DSM系统打开套件中心,搜索Docker即可找到,默认安装即可。图标见下图:
4.2 安装MySQL
进入Docker,点击注册表,搜索mysql,如图第一个即是需要安装的mysql,双击该行。
双击后弹出选择标签栏,指的是需要安装的版本,默认选“latest”为最新版本,本次装的是最新版8.0.13。
注:8.0以上版本验证方式有改变,若出现本文5.2节错误则需要执行4.4节中需要更改加密方式的操作。
下载安装完成后系统会通知,在Docker的映像一栏中即可看到该映像和大小,如下图:
4.3 创建容器并运行MySQL
在创建容器前最好在NAS上建立一个Docker共享文件夹;下一级文件夹建立mysql文件夹,对应相应容器;mysql下建立conf、data、logs文件夹,分别用于存储配置文件、数据、错误日志。在创建容器时会用到它们并给对应的映射关系。
接上节,上图中选中mysql并点击启动,进行创建容器的操作界面,容器名称自定,见下图:
点击高级设置,需要进行如下设置:
- 高级设置中,“启动自动重新启动”可选;
- 卷中文件/文件夹一栏填写NAS文件夹位置,装在路径为mysql下的文件路径,配置见下图所示;
- 端口设置中,本地端口为对外显示的端口,也就是到时候访问的端口。容器端口指的是MySQL作为容器的端口,本地端口没有占用的话推荐设置为和容器端口一致。文章中设为自动并不太好用,重新启动容器时会变化,导致远程访问连不上。
- 环境变量中,为配置MySQL登陆密码,增加
MYSQL_ROOT_PASSWORD
变量,值为密码。
设置完成后点击下一步,基本配置情况会显示,如下图是本人初次配置时的情况。
注:图中本地端口为自动不建议;文件夹/docker/mysql/mysql后一个mysql应为data,个人设置小失误,没有改。
在勾选了“向导完成后运行此容器”下点击应用,容器即启动,DSM系统会有提示,同时在Docker的容器中我们可以看到运行的MySQL。最右边为开关,可以手动停止/启动容器。
4.4 MySQL的远程配置
在MySQL容器启动后,我们就需要进入该容器并进行MySQL的一些配置,以让它能够在局域网访问。需要以下几个步骤:
1、进入终端机并下载安装vim,用于编辑配置文件
容器启动后双击上图界面红框内区域,点击“终端机–>新增”后下方出现bash,点击可以看到出现了用户及主机名。
输入以下命令进行vim安装:
apt-get update
apt-get install net-tools
apt-get install vim
个人理解:可以看到,一个容器中可以像操作一个linux系统一样,同时有自己的文件系统。
2、登陆MySQL进行远程配置设置
step1 登陆MySQL:mysql -u root -p
step2 输入密码成功后,给root用户远程权限:grant all privileges on *.* to ‘root’@’%’ ;
若MySQL8.0版本以上或出现5.2节2059错误,则需要修改认证方式:
- step3 查看用户和加密方式,通过SQL语句:
select Host,User,plugin from mysql.user;
注:Host列指指定登陆IP,host = %即为所有ip都有权连接。 - step4 更改root用户的认证方式,老版本使用mysql_native_password,更改plugin项:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
密码填写root用户密码即可。上图中root用户已修改了认证方式。
step5 退出MySQL,三种方法:
mysql > exit;
mysql > quit;
mysql > q;
step6 建立数据库路径及配置权限
参照附录1教程,将下述命令执行即可,但还没搞清和外部的文件配置是否是两种方式混用了。这些命令在root用户下运行。
/ 默认目录如下
├─ /var/lib/mysql 日志文件,数据库文件
├─ /var/log/mysql/error.log 错误日志 / 最终需要修改的目录
├─ /home/data 日志文件,数据库文件
├─ /home/logs/error.log 错误日志
配置目录权限
mkdir -p /home/data
mkdir -p /home/logs
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
#注意 如果上面没有配置home的访问权限,修改了配置后容器是没办法启动的。
#检查访问权限 切换成mysql用户su - mysql
#在mysql用户里面访问 /home/data目录cd /home/data
#如果提示 can’t cd to /home/data 则需要返回root用户配置目录权限chmod -R 755 /home
注1:这里的/home路径指的是容器内的文件系统,跟NAS上的无关!
注2:su -mysql可能会出现报错“No directory, logging in with HOME=/”,解决参见mysql启动报错【No directory, logging in with HOME=/】 – Sp4rkW
注3:命令格式说明
mkdir(新建新目录),命令格式:mkdir [-mp] 目录名称
,-m:配置文件夹的权限,-p:帮助你直接将所需要的目录(包含上层目录)递归创建起来。
chown(改变文件所有者),命令格式:chown [-R] 账号名称:组名 文件或目录
,-R:进行递归的持续更改。
chmod(改变权限),命令格式:chmod [-R] xyz 文件或目录
,-R:进行递归的持续更改;x指拥有者(owner)的权限,y指组(group)权限,z指其他身份(others)权限,r(read)=4,w(write)=2,x(execute)=1,各自权限为累加数字。例如:755表示owner和group身份均有读、写、运行三种权限,而others有读和运行两种权限。
step7 使用vim编辑器修改路径
牵扯到数据库文件和错误日志的路径更改。
打开配置文件 /etc/mysql/my.cnf进行编辑:vim /etc/mysql/my.cnf
将datadir和log-error位置改为新建的目录,保存并退出。随后关闭终端机,在NAS上的所有配置完成。
注:
vim的基本用法,vim有三种模式:一般模式、编辑模式、命令行模式;
在一般模式下,
- 按i,I,o,O,a,A,r,R任意字母进入编辑模式,左下方显示“——INSERT——”即为编辑模式,此时键盘上除Esc以外均视为输入。按Esc键返回至一般模式;
- 按“:,/,?”3个中任意一个按键,进入命令行模式。该模式提供查找数据的操作、读取、保存、大量替换字符、离开vim、显示行号等操作,同样Esc键返回一般模式;
- 输入“:wq”即可保存并退出vim。w是保存,q是退出。
4.5 客户端访问数据库
在完成了NAS上的mysql环境搭建后,使用windows10电脑通过图形界面进行远程访问。
step1 安装图形界面客户端
图形界面看到的有Navicat Premium、PyCharm、HeidiSQL等工具,多数是可以连接大部分数据库的。推荐安装HeidiSQL,在win10应用商店中就有免费版,容易操作,支持MySQL和SQL Server。
step2 打开并连接数据库
安装好后打开出现会话管理器,网络类型选择TCP/IP下的MySQL,用户root,密码填写容器建立时设置的密码,端口选容器建立时对应容器接口3306的本地接口,我这里是自动分配的32783。如下图:
双击打开后即可进入,见下图界面,此时整个连接过程全部搞定!!
若连接时出现以下报错见5.1节。
若连接报错如下则见5.2节内容(注:图中端口号是当时为32781而非设置错误):
5. 过程问题总结
5.1 连接报2003错误 – Can’t connect to MySQL server on ‘192.168.31.21’
错误现象: 使用Navicat Premium连接时出现的错误,如下图:
此时连接配置如下:
错误原因及解决办法: 检查发现对外端口为32783,mysql默认访问接口为3306,在docker容器配置时容器3306端口映射至对外的32783,因此应该访问32783端口。
注:确定NAS的3306端口是否已开启的方法:使用SSH服务在电脑命令提示符下进入DSM的控制台,使用命令查询该端口是否存在。远程开启SSH参考附录2。Windows10下访问方法为:。
查询端口是否存在的命令:sudo netstat -tunlp|grep 端口号
上图可以看到,3306端口是没有任何反应的,而32783返回了相关信息,说明32783端口存在,3306端口不存在。*
5.2 连接报2059错误 – Authentication plugin ‘caching_sha2_password’cannot be loaded
错误现象: 使用Navicat Premium连接时出现的错误,如下图:
错误原因及解决办法:
查询确定是MySQL新版本验证问题,通过附录3说明解决。我仅修改了root用户的plugin的值,其他的用户没有修改。这里已经用到SQL数据选择还有修改的操作指令。
6.遗留问题
- 关于附录1教程中数据库中文乱码没有进行设置,还没有遇到;
- 附录1教程中“修改执行文件里面 /etc/init.d/mysql 的datadir 目录:
vim /etc/init.d/mysql
”,我没有找到这个文件因此没有改。 - NAS中的文件夹是否给mysql用了还没有搞清楚。如果需要拷贝mysql的数据文件、配置文件和错误日志该怎么办?
参考资料
1、群晖 docker 安装 mysql – IT513
2、群晖DSM教程:开启远程SSH和SFTP访问|蓝点网
3、MySQL连接2059报错问题 – ora_dy
4、Docker 教程 | 菜鸟教程
5、基于群晖系统怎样高效率使用Docker_百度经验