当前位置: 首页 > news >正文

解决远程连接AlpineLinux Mysql/MariaDB 无法连接的问题

在这里插入图片描述

🔥博客介绍`: EvLast

🎥系列专栏:
<< C++项目>>
<<数据结构与算法>>
<< 算法入门>>

🎥 当前专栏:<< C++项目>>

专题 : 解决开发中的日常Bug
👍👍👍👍👍👍👍👍👍👍👍👍
☆*: .。. o(≧▽≦)o .。.:*☆

❤️感谢大家点赞👍收藏⭐评论✍️

在这里插入图片描述

问题描述

远程连接AlpineLinux 中的Mysql出现 无法连接的情况, 从报错可以看出密码问题其实是无法连通的问题.

在这里插入图片描述

原因解释

从参考的资料来看是 AlpineLinux 没有mysql 其实是使用的 MariaDB 的框架 那么MySQL 与 MariaDB 可以参考文章 : MariaDB 和 MySQL 全面对比:选择数据库需要考虑这几点

在这里插入图片描述

既然数据库为 MariaDB 那么我便去找 相关文章发现 需要这么几步解决

  1. 更改配置文件
  2. 打开MySQL/MariaDB用户权限连接
  3. 配置MySQL/MariaDB防火墙的监听

解决步骤

找到配置文件并更改

MariaDB 与普通的MySQL数据库的一个不同在于它的配置文件不止一个,它将不同的数据放入到不同的配置文件中。
根据官方的说法, MariaDB为了提高安全性,默认只监听127.0.0.1中的3306端口并且禁止了远程的TCP链接,我们可以通过下面两步来开启MySQL的远程服务

  1. 注释掉skip-networking选项来开启远程访问.
  2. 注释bind-address项,该项表示运行哪些IP地址的机器连接,允许所有远程的机器连接

  1. 使用一下命令查看配置文件
mysqld --help --verbose

在这里插入图片描述
2. 注释配置文件

这时候只要找到某一配置文件中的 bind-address = 127.0.0.1 进行注释 或者改为 bind-address = 0.0.0.0 这时候即可 , bind-address = 0.0.0.0可以无需注释, 但是 bind-address = 127.0.0.1 必须注释,
在这里插入图片描述
3. 将 skip-networking 变为 0 即 skip-networking=0 如果没有 skip-bind-address 然后添加 skip-bind-address , 有者无需添加

注: 可能无法将全部配置文件找全,或者本来就没有那么多配置文件 请在找到的配置文件中添加 skip-networking=0 skip-bind-address , 如果没有 skip-networking=0skip-bind-address 请手动添加 达到覆盖的目的

打开MySQL/MariaDB用户权限连接

无法进行远程连接其中一个原因便是用户没有开启远程连接的权限

1、使用root登陆mysql (知道密码直接登入)

当你不知道root密码,登陆不了,请修改/etc/my.cnf文件, 在Mysqld 配置段下添加:

skip-grant-tables

可以跳过mysql登陆时密码验证,改好后重启mysql服务:

service mariadb restart

用这个登陆:mysql -u root -p 需要密码直接回车

  1. 更新root账号密码(知道密码可以跳过)
  • 使用mysql数据库:use mysql;
  • 更改root密码:
update user set authentication_string = password(‘root’), password_expired = ‘N’, password_last_changed = now() where user = ‘root’;

注:我的mysql版本未5.7,密码字段为【authentication_string】,不同版本mysql字段不一样,可以使用【select * from user;】查看密码字段

  1. 开启root账号远程登陆权限

1、使用mysql数据库:

use mysql;

2、查看root账号权限:

select user,host from user;

在这里插入图片描述

如果root不是【%】,使用语句更新:

update user set host = ‘%’ where user = ‘root’;

或者
root账户中的host项是localhost表示该账号只能进行本地登录,我们需要修改权限,输入命令:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

修改权限。%表示针对所有IP,password表示将用这个密码登录root用户,如果想只让某个IP段的主机连接,可以修改为

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.100.%' IDENTIFIED BY 'my-new-password' WITH GRANT OPTION;

注意:此时远程连接的密码可能与你在本地登录时的密码不同了,主要看你在IDENTIFIED BY后面给了什么密码,具体的请参考GRANT命令

最后

FLUSH PRIVILEGES;

打开防火墙

在 Alpine Linux 中,firewall-cmd 并不是用于管理防火墙的工具,因为 Alpine 使用的是 iptables,并且有一个名为 awall (Alpine Wall) 的前端界面来帮助管理 iptables 规则
。如果想要检查防火墙状态或者管理防火墙规则,应该使用 iptables 相关的命令。

如果出现

ash: iptables: not found
  1. 安装 iptables:
apk add iptables
  1. 添加MySQL连接端口
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

在这里插入图片描述

  1. 保存你的规则,以便它们在系统重启后依然有效:
iptables-save > /etc/iptables/rules.v4
  1. 确保 iptables 在系统启动时自动启动:
rc-update add iptables
  1. 如果你想要查看当前的 iptables 规则,可以使用以下命令:
iptables -L

防火墙重复情况

如果你发现有重复的防火墙规则,你可以通过 iptables 命令来删除特定的规则。使用以下步骤来删除重复的防火墙规则:

  1. 列出当前的 iptables 规则
    列出所有的 iptables 规则,以确定哪些规则是重复的:

    iptables -L --line-numbers
    

    这将列出所有的规则,包括规则编号、协议、选项、源地址、目标地址和端口。
    这将显示每条规则的编号,格式如下:

    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination
    1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:3306
    2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:3306
  2. 删除重复的规则
    其中num 为编号 一旦确定了要删除的规则的编号,就使用 iptables -D 命令来删除特定的规则。例如,如果你想要删除第一个 ACCEPT 规则,你可以使用:

    iptables -D INPUT 1
    

    这里 INPUT 是链的名称,1 是规则的编号。请确保使用正确的链名称和规则编号。

  3. 保存新的 iptables 配置
    删除规则后,你需要保存新的配置,以确保在系统重启后更改生效。在 Alpine Linux 中,你可以使用 iptables-save 命令来保存规则:

    iptables-save > /etc/iptables/rules.v4
    

    或者,如果你的系统使用 rc-update 来管理启动脚本,你可以确保 iptables 规则在启动时应用:

    rc-update add iptables
    
  4. 重启 iptables 服务
    为了确保更改立即生效,你可以重启 iptables 服务:

    iptables-save
    iptables-restore < /etc/iptables/rules.v4
    

    或者,如果你的系统使用 s6openrc,你可以使用:

    rc-service iptables restart
    

    或者

    s6-rc unsupervisor iptables
    s6-rc supervisor iptables
    
  5. 检查防火墙状态
    最后,检查防火墙规则确保重复的规则已被删除:

    iptables -L -n -v
    

以上便是我对于这次问题的眼界与解决方案

相关文章:

  • Nginx反向代理配置支持websocket
  • 第18周 第1章Ajax基础知识
  • Axure原型系统:药企内部管理平台原型设计
  • Html--笔记01:使用软件vscode,简介Html5--基础骨架以及标题、段落、图片标签的使用
  • TypeScript 设计模式之【单例模式】
  • 数据备份策略:保障数据安全的关键
  • 从预测性维护到智能物流:ARM边缘计算控制器的工业实践
  • C++——编写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。用指针方法处理。
  • 入门插件开发-列表插件开发-第三节:案例演示——setFilter事件讲解
  • LLMs之RAG:MemoRAG(利用其记忆模型来实现对整个数据库的全局理解)的简介、安装和使用方法、案例应用之详细攻略
  • 【自学笔记】支持向量机(4)——支持向量回归SVR
  • 国内可用ChatGPT-4中文镜像网站整理汇总【持续更新】
  • 三.python入门语法2
  • OSPF相关基础介绍及基础配置,网络工程师必修
  • redis Redis-Cluster常用命令与Redis性能监控
  • [译] React v16.8: 含有Hooks的版本
  • github指令
  • input的行数自动增减
  • Java 网络编程(2):UDP 的使用
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Protobuf3语言指南
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • web标准化(下)
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 程序员该如何有效的找工作?
  • 规范化安全开发 KOA 手脚架
  • 记一次用 NodeJs 实现模拟登录的思路
  • 码农张的Bug人生 - 初来乍到
  • 判断客户端类型,Android,iOS,PC
  • 前端之React实战:创建跨平台的项目架构
  • 如何学习JavaEE,项目又该如何做?
  • 我这样减少了26.5M Java内存!
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • k8s使用glusterfs实现动态持久化存储
  • NLPIR智能语义技术让大数据挖掘更简单
  • Spring Batch JSON 支持
  • ​浅谈 Linux 中的 core dump 分析方法
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #1014 : Trie树
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #nginx配置案例
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • #在 README.md 中生成项目目录结构
  • $refs 、$nextTic、动态组件、name的使用
  • (06)Hive——正则表达式
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (Oracle)SQL优化技巧(一):分页查询
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (一) 初入MySQL 【认识和部署】
  • .htaccess 强制https 单独排除某个目录
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存