文章目录

  • 1. 教程目标及适用范围
  • 2. 准备工作
    • 2.1 硬件环境
    • 2.2 用到的技能
  • 3. 基本思路
  • 4.安装配置过程
    • 4.1 安装Docker
    • 4.2 安装MySQL
    • 4.3 创建容器并运行MySQL
    • 4.4 MySQL的远程配置
    • 4.5 客户端访问数据库
  • 5. 过程问题总结
    • 5.1 连接报2003错误 - Can't connect to MySQL server on '192.168.31.21'
    • 5.2 连接报2059错误 - Authentication plugin 'caching_sha2_password'cannot be loaded
  • 6.遗留问题
  • 参考资料

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 登陆MySQLmysql -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/datachown -R mysql:mysql /home/logs chmod -R 755 /home chmod -R 755 /home/datachmod -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教程中数据库中文乱码没有进行设置,还没有遇到;
  2. 附录1教程中“修改执行文件里面 /etc/init.d/mysql 的datadir 目录:vim /etc/init.d/mysql”,我没有找到这个文件因此没有改。
  3. NAS中的文件夹是否给mysql用了还没有搞清楚。如果需要拷贝mysql的数据文件、配置文件和错误日志该怎么办?

参考资料

1、群晖 docker 安装 mysql - IT513
2、群晖DSM教程:开启远程SSH和SFTP访问|蓝点网
3、MySQL连接2059报错问题 - ora_dy
4、Docker 教程 | 菜鸟教程
5、基于群晖系统怎样高效率使用Docker_百度经验

零经验在群晖nas上利用Docker安装mysql详细过程相关推荐

  1. 想把群晖NAS上的网页发布公网?cpolar轻松实现(1)

    系列文章 想把群晖NAS上的网页发布公网?cpolar轻松实现(1) 想把群晖NAS上的网页发布公网?cpolar轻松实现(2) 想把群晖NAS上的网页发布公网?cpolar轻松实现(3) 现代商业活 ...

  2. web文件 群晖_【原创】群晖NAS 上部署静态网站

    概要 1.简介 NAS 除了用来管理文件,用作个人云盘之外,还有很多用途.因为群晖的操作系统 DSM 本身就是一个 Debian 的定制系统,所以完全可以把 NAS 当作一台个人的服务器,你可以在上面 ...

  3. 使用cpolar发布群晖NAS上的网页 上篇(7.X版)

    系列文章 使用cpolar发布群晖NAS上的网页 上篇(7.X版) 使用cpolar发布群晖NAS上的网页 中篇(7.X版) 使用cpolar发布群晖NAS上的网页 下篇(7.X版) 随着网络科技和硬 ...

  4. 在群晖NAS上搭建 Git Server

    概述 事前准备 配置NAS 1 在群晖NAS上安装 Git Server 套件 2 创建用来存放git仓库的共享目录 3 创建用来使用git的普通用户 4 设置 Git Server 允许刚创建的用户 ...

  5. 群晖域名注册_手把手教你在群晖NAS上用自己的域名实现https访问

    本文受众主要面向广大群晖NAS用户 前言: 1. 如果你只在局域网里通过ip地址访问群晖NAS, 2. 如果你只使用QuickConnect来访问群晖NAS, 3. 如果你只使用群晖官方的synolo ...

  6. 如何在群晖NAS上安装cpolar内网穿透(群晖7.X版)

    系列文章 如何在群晖NAS上安装cpolar内网穿透(群晖7.X版) 内网穿透远程群晖NAS--上篇(7.X版) 内网穿透远程群晖NAS--下篇(7.X版) 将群晖NAS搭建的网站发布上线[内网穿透] ...

  7. 使用cpolar发布群晖NAS上的网页(1)

    系列文章 使用cpolar发布群晖NAS上的网页(1) 使用cpolar发布群晖NAS上的网页(2) 使用cpolar发布群晖NAS上的网页(3) 群晖NAS作为一款简便易用的小型数据中心,已经在很多 ...

  8. 使用cpolar发布群晖NAS上的网页(2)

    系列文章 使用cpolar发布群晖NAS上的网页(1) 使用cpolar发布群晖NAS上的网页(2) 使用cpolar发布群晖NAS上的网页(3) 上一篇 使用cpolar发布群晖NAS上的网页(1) ...

  9. 如何将群晖nas上的网站发布到公网 2/3

     系列文章  如何将群晖nas上的网站发布到公网 1/3  如何将群晖nas上的网站发布到公网 2/3 如何将群晖nas上的网站发布到公网 3/3 上一篇:  如何将群晖nas上的网站发布到公网 1/ ...

最新文章

  1. 自己开发的Grid组件 针对IOS的
  2. 检查是否已使用jQuery选中复选框
  3. 第三届广东省强网杯网络安全大赛WEB题writeup
  4. python基础单词-学习Python必背的初级单词有哪些?
  5. mybatis 复习笔记02
  6. node.js编程错误记录集
  7. mysql基础_MySQL基础
  8. 用Google App Engine做个人代理服务器
  9. 帮你躲坑:pip install tensorflow 报错怎么办,import tensorflow 报错怎么办?
  10. SQLite数据类型详解
  11. iPhonexs文件连接服务器,iPhonexs黑屏了教你如何快速解决!
  12. 调焦后焦实现不同距离成像_眼的明视与光学调焦
  13. android浏览器!6年菜鸟开发面试字节跳动安卓研发岗,大厂面经合集
  14. php上传文件和下载文件,PHP 如何上传文件和下载
  15. analy32.xll下载_Android Studio 4.0添加了Motion Editor和Build Analyzer
  16. 单相全桥逆变器仿真,simulink,matlab
  17. 保护你的 Flutter 应用程序
  18. java关于数组的下标越界
  19. 设置允许从网络访问计算机的用户账户(加入guest组),网络共享
  20. Codeforces 718E.Matvey's Birthday dp+状态压缩

热门文章

  1. 小学生计算机绘画教程视频,小学生画画视频教程
  2. 《视频解密》中文版(第四版) 第六章 数字视频接口(第二部分)
  3. 百度地图POI数据采集方案以及开发环境搭建
  4. EXT 单元格变色,跨行跨列
  5. bootstrap-fileinput 文件导入
  6. iOS Quartz2D实战系列-手把手教你手势解锁
  7. 彩色打印输出文本(echo,grep,perl)
  8. Python调用OpenAI实例大全
  9. 雪狼湖-记忆中最后一个POP音乐
  10. 用于服务器的芯片 i7,苹果m1芯片性能怎么样? 苹果m1芯片和i7哪个好