ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

群辉 docker 安装 mysql

2021-11-05 15:31:57  阅读:197  来源: 互联网

标签:容器 群辉 mysql 端口 NAS MySQL home docker


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
1
2
3
个人理解:可以看到,一个容器中可以像操作一个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;
1
2
3
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
1
2
3
4
5
6
7
#注意 如果上面没有配置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_百度经验
————————————————
版权声明:本文为CSDN博主「木阳live」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lzyy1992/article/details/86256019

标签:容器,群辉,mysql,端口,NAS,MySQL,home,docker
来源: https://www.cnblogs.com/ailuo9494/p/15513509.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有