navicat无法远程连接docker安装的mysql的解决方案
nanshan 2024-11-02 12:11 9 浏览 0 评论
写在前面
场景中涉及到的机器列表:
机器 | 备注 |
机器GR2_Win10 | 个人电脑2,安装了windows10操作系统机器k8s-master-1这是在机器GR2_Win10 上通过Vmware软件实现的虚拟机 |
场景:
禅道系统(版本为12.3.3)内置的mysql数据库的端口号3306和宿主机机器k8s-master-1的端口号13306做了映射
需求:
机器GR2_Win10上的navicat软件无法连接禅道系统(版本为12.3.3)内置的mysql数据库。
连接的时候报两种错误
错误1:
错误2:
请找出错误原因并解决
步骤一、能否ping通机器k8s-master-1
- 第1步:打开你的cmd窗口
- 第2步:执行ping命令,看下能否ping通
C:\Users\fenglv>ping 192.168.152.100
正在 Ping 192.168.152.100 具有 32 字节的数据:
来自 192.168.152.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.152.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.152.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.152.100 的回复: 字节=32 时间<1ms TTL=64
192.168.152.100 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
如果看到有TTL字样,类似上面的输出内容,说明是可以ping通的,直接跳到步骤二。
如果不能ping通,那就要想办法先解决ping通的问题,问题解决之后跳到步骤二。
步骤二、执行telnet命令看下能否连接上机器k8s-master-1的13306端口号
- 第1步:打开机器GR2_Win10的cmd窗口
- 第2步:执行telnet命令,看下能否连接上
C:\Users\fenglv>telnet 192.168.152.100 13306
如果看到的结果如下,说明无法连接上,继续看步骤三。
步骤三、查看机器k8s-master-1的iptables相关情况及监听端口号
执行命令sudo iptables -n -L -v | grep DOCKER -C 5查看映射的端口号是否已经添加到iptables的放行规则中,如果看到类似下面的结果,说明已经已经添加了。
请注意,docker容器在端口映射时,会自动把映射的宿主机的端口添加到iptables的放行规则中,所以我们可以直接telnet到宿主机的端口。
执行命令sudo netstat -tunpl查看监听的端口号中是否监听了13306端口:
步骤四、针对错误1的解决方案
- 第1步:进入zentao_80容器,编辑 /etc/mysql/mariadb.conf.d/50-server.cnf 文件
# 1.1 进入zentao_80容器
[fenglv@k8s-master-1 ~]$ sudo docker exec -it zentao_80 /bin/bash
[sudo] fenglv 的密码:
# 1.2 编辑/etc/mysql/mariadb.conf.d/50-server.cnf文件
root@ecc2b53083ff:/# vim /etc/mysql/mariadb.conf.d/50-server.cnf
- 第2步:找到 bind-address = 127.0.0.1这一行,在其前面加上 # ,把它给注释掉,然后保存退出。
说明:
2.1 bind-address =127.0.0.1不注释的时候表示mysql数据库只能允许机器ip为127.0.0.1的机器来连接,而ip为127.0.0.1的机器就是安装mysql数据库本身的这台机器, 这就导致只有安装mysql数据库本身的这台机器才能连上mysql数据库,所以其它的机器都无法连接上mysql数据库。
2.2 注释掉之后,表明不对连接mysql数据库的机器做限制,所有的机器都可以连接上mysql数据库。
- 第3步:保存文件50-server.cnf之后,退出容器,重启zentao_80容器,让配置生效
"/etc/mysql/mariadb.conf.d/50-server.cnf" 134L, 3721C written
# 3.1 退出容器
root@ecc2b53083ff:/# exit
exit
# 3.2 重启zentao_80容器
[fenglv@k8s-master-1 ~]$ sudo docker restart zentao_80
[sudo] fenglv 的密码:
zentao_80
[fenglv@k8s-master-1 ~]$
以上的3步操作完毕之后,再次连接发现报的错误是错误2,错误2的解决方案请看步骤五。
步骤五、针对错误2的解决方案
错误2的原因是mysql本身的原因,mysql安装完毕之后默认不允许除了localhost之外的主机连接,那怎么让mysql允许其它主机连接它的?请根据下面的步骤操作:
- 第1步:进入zentao_80容器
# 1.1 进入zentao_80容器
[fenglv@k8s-master-1 ~]$ sudo docker exec -it zentao_80 /bin/bash
[sudo] fenglv 的密码:
- 第2步:执行命令mysql -uroot -p连接到mysql数据库
[fenglv@k8s-master-1 ~]$ sudo docker exec -it zentao_80 /bin/bash
[sudo] fenglv 的密码:
# 2.1 进入mysql
root@ecc2b53083ff:/# mysql -uroot -p
# 2.2 输入mysql的密码
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.1.44-MariaDB-0ubuntu0.18.04.1 Ubuntu 18.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
# 2.3 看一下有哪些数据库
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| zentao |
+--------------------+
4 rows in set (0.00 sec)
# 2.4 选择mysql库
MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
# 2.5 查询root账号所在的行
MariaDB [mysql]> select user,host,password from user where user='root';
+------+--------------+-------------------------------------------+
| user | host | password |
+------+--------------+-------------------------------------------+
| root | localhost | *6BB4******************************2CA2AD9 |
| root | 181c73dd6bcd | |
| root | 127.0.0.1 | |
| root | ::1 | |
+------+--------------+-------------------------------------------+
4 rows in set (0.00 sec)
- 第3步:把user='root',host='localhost' 的这一行的host列的值设置为 %
# 3.1 更新host列的值为%
MariaDB [mysql]> update user set host='%' where user='root' and Host='localhost';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
# 3.2 刷新权限,一定要刷新之后,navicat才可以连接成功
MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
# 3.2 再次查询
MariaDB [mysql]> select user,host,password from user where user='root';
+------+--------------+-------------------------------------------+
| user | host | password |
+------+--------------+-------------------------------------------+
| root | % | *6BB4******************************2CA2AD9 |
| root | 181c73dd6bcd | |
| root | 127.0.0.1 | |
| root | ::1 | |
+------+--------------+-------------------------------------------+
4 rows in set (0.00 sec)
以上的3步操作完毕之后,再次连接发现可以成功连接了。
但是在我的场景中,有一个坑点,navicat可以连上数据库了,但是zentao_80容器里的禅道应用无法连接上数据库,网址打不开。
那就来分析下原因,发现用命令mysql -h 127.0.0.1 -uroot -p123456或者命令mysql -hlocalhost -uroot -p123456都无法连上数据库
root@181c73dd6bcd:/# mysql -h 127.0.0.1 -uroot -p123456
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
而禅道应用去连接数据库时,正好是用root账号,密码123456去连,对于数据库来说,禅道应用所在机器的ip地址是localhost或127.0.0.1。
你关注下输出的内容Access denied for user 'root'@'localhost' (using password: YES) 中的 'root'@'localhost' 这个内容,这表示是在机器localhost上用root账号去连接远程的数据库被拒绝了, 提示密码不正确,你可能会问?不是命中了user=root and host='%' and password='123456' 这行记录了吗?
是的,确实命中了,但是你别忘了,它应该首选是匹配到 host='127.0.0.1' 的这行,所以如果输入的密码是空,那就可以正确的连上了,因为这正好命中了user表的user=root and host='127.0.0.1' and password='' 的这行记录。
请注意,再次提醒,根据user表的内容可知host为127.0.0.1的机器连接mysql数据库时,user必须为root,password必须为空才可以连接上。
数据库mysql的user表的查询结果:
MariaDB [mysql]> select user,host,password from user where user='root';
+------+--------------+-------------------------------------------+
| user | host | password |
+------+--------------+-------------------------------------------+
| root | % | *6BB4******************************2CA2AD9 |
| root | 181c73dd6bcd | |
| root | 127.0.0.1 | |
| root | ::1 | |
+------+--------------+-------------------------------------------+
4 rows in set (0.00 sec)
对查询出的结果做一个说明:
说明
第1行表示host为任何ip的机器连接mysql数据库时,只有user为root,password为123456才可以连接上。
第2行表示host为181c73dd6bcd的机器连接mysql数据库时,只有user为root,password为空才可以连接上。
第3行表示host为127.0.0.1或者localhost的机器连接mysql数据库时,user必须为root,password必须为空才可以连接上。
所以啊,要想让zentao_80容器里的禅道应用连接上数据库,一种方法是把第3行的password修改为123456,另外一种方法是把禅道应用的数据库密码修改为空,随便哪一种方法都行。
请注意,两种方法只需执行一个就行,不要两个都执行
方法1:把第3行的password修改为123456
# 把第3行的password修改为123456
MariaDB [mysql]> update user set password='*6BB4******************************2CA2AD9' where user='root' and host='127.0.0.1';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
方法2:禅道应用的数据库密码修改为空
# 当前目录为/home/fenglv/chandao/data/pms
[fenglv@k8s-master-1 pms]$ pwd
/home/fenglv/chandao/data/pms
# 编辑文件config/my.php,把密码修改为空,然后保存
[fenglv@k8s-master-1 pms]$ sudo vim config/my.php
[sudo] fenglv 的密码:
步骤六、针对错误2的另一种解决方案
我觉得步骤五的解决方案很麻烦,最省事的办法是直接执行grant命令之后会在表user上新增一行记录,这行新增记录的user值为root,host值为%,password值为123456
# 1、先查询满足user='root'的记录
MariaDB [mysql]> select user,host,password from user where user='root';
+------+--------------+-------------------------------------------+
| user | host | password |
+------+--------------+-------------------------------------------+
| root | localhost | *6BB4******************************2CA2AD9 |
| root | 181c73dd6bcd | |
| root | 127.0.0.1 | |
| root | ::1 | |
+------+--------------+-------------------------------------------+
4 rows in set (0.00 sec)
# 2、执行grant命令
MariaDB [mysql]> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
Query OK, 0 rows affected (0.00 sec)
# 3、再次查询满足user='root'的记录,发现多了一条
MariaDB [mysql]> select user,host,password from user where user='root';
+------+--------------+-------------------------------------------+
| user | host | password |
+------+--------------+-------------------------------------------+
| root | localhost | *6BB4******************************2CA2AD9 |
| root | 181c73dd6bcd | |
| root | 127.0.0.1 | |
| root | ::1 | |
| root | % | *6BB4******************************2CA2AD9 |
+------+--------------+-------------------------------------------+
5 rows in set (0.00 sec)
# 4、发现执行完grant命令之后,无论刷不刷新都会生效
MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
操作完毕之后,发现navicat能连上数据库了,禅道页面也可以正常访问了。
相关推荐
- 服务器数据恢复—Raid5数据灾难不用愁,Raid5数据恢复原理了解下
-
Raid5数据恢复算法原理:分布式奇偶校验的独立磁盘结构(被称之为raid5)的数据恢复有一个“奇偶校验”的概念。可以简单的理解为二进制运算中的“异或运算”,通常使用的标识是xor。运算规则:若二者值...
- 服务器数据恢复—多次异常断电导致服务器raid不可用的数据恢复
-
服务器数据恢复环境&故障:由于机房多次断电导致一台服务器中raid阵列信息丢失。该阵列中存放的是文档,上层安装的是Windowsserver操作系统,没有配置ups。因为服务器异常断电重启后,rai...
- 服务器数据恢复-V7000存储更换磁盘数据同步失败的数据恢复案例
-
服务器数据恢复环境:P740+AIX+Sybase+V7000存储,存储阵列柜上共12块SAS机械硬盘(其中一块为热备盘)。服务器故障:存储阵列柜中有磁盘出现故障,工作人员发现后更换磁盘,新更换的磁盘...
- 「服务器数据恢复」重装系统导致XFS文件系统分区丢失的数据恢复
-
服务器数据恢复环境:DellPowerVault系列磁盘柜;用RAID卡创建的一组RAID5;分配一个LUN。服务器故障:在Linux系统层面对LUN进行分区,划分sdc1和sdc2两个分区。将sd...
- 服务器数据恢复-ESXi虚拟机被误删的数据恢复案例
-
服务器数据恢复环境:一台服务器安装的ESXi虚拟化系统,该虚拟化系统连接了多个LUN,其中一个LUN上运行了数台虚拟机,虚拟机安装WindowsServer操作系统。服务器故障&分析:管理员因误操作...
- 「服务器数据恢复」Raid5阵列两块硬盘亮黄灯掉线的数据恢复案例
-
服务器数据恢复环境:HPStorageWorks某型号存储;虚拟化平台为vmwareexsi;10块磁盘组成raid5(有1块热备盘)。服务器故障:raid5阵列中两块硬盘指示灯变黄掉线,无法读取...
- 服务器数据恢复—基于oracle数据库的SAP数据恢复案例
-
服务器存储数据恢复环境:某品牌服务器存储中有一组由6块SAS硬盘组建的RAID5阵列,其中有1块硬盘作为热备盘使用。上层划分若干lun,存放Oracle数据库数据。服务器存储故障&分析:该RAID5阵...
- 「服务器虚拟化数据恢复」Xen Server环境下数据库数据恢复案例
-
服务器虚拟化数据恢复环境:Dell某型号服务器;数块STAT硬盘通过raid卡组建的RAID10;XenServer服务器虚拟化系统;故障虚拟机操作系统:WindowsServer,部署Web服务...
- 服务器数据恢复—RAID故障导致oracle无法启动的数据恢复案例
-
服务器数据恢复环境:某品牌服务器中有一组由4块SAS磁盘做的RAID5磁盘阵列。该服务器操作系统为windowsserver,运行了一个单节点Oracle,数据存储为文件系统,无归档。该oracle...
- 服务器数据恢复—服务器磁盘阵列常见故障表现&解决方案
-
RAID(磁盘阵列)是一种将多块物理硬盘整合成一个虚拟存储的技术,raid模块相当于一个存储管理的中间层,上层接收并执行操作系统及文件系统的数据读写指令,下层管理数据在各个物理硬盘上的存储及读写。相对...
- 「服务器数据恢复」IBM某型号服务器RAID5磁盘阵列数据恢复案例
-
服务器数据恢复环境:IBM某型号服务器;5块SAS硬盘组成RAID5磁盘阵列;存储划分为1个LUN和3个分区:第一个分区存放windowsserver系统,第二个分区存放SQLServer数据库,...
- 服务器数据恢复—Zfs文件系统下误删除文件如何恢复数据?
-
服务器故障:一台zfs文件系统服务器,管理员误操作删除服务器上的数据。服务器数据恢复过程:1、将故障服务器所有磁盘编号后取出,硬件工程师检测所有硬盘后没有发现有磁盘存在硬件故障。以只读方式将全部磁盘做...
- 服务器数据恢复—Linux+raid5服务器数据恢复案例
-
服务器数据恢复环境:某品牌linux操作系统服务器,服务器中有4块SAS接口硬盘组建一组raid5阵列。服务器中存放的数据有数据库、办公文档、代码文件等。服务器故障&检测:服务器在运行过程中突然瘫痪,...
- 服务器数据恢复—Sql Server数据库数据恢复案例
-
服务器数据恢复环境:一台安装windowsserver操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。在windows服务器内装有SqlServer数据库。存储空间LU...
- 服务器数据恢复—阿里云ECS网站服务器数据恢复案例
-
云服务器数据恢复环境:阿里云ECS网站服务器,linux操作系统+mysql数据库。云服务器故障:在执行数据库版本更新测试时,在生产库误执行了本来应该在测试库执行的sql脚本,导致生产库部分表被tru...
你 发表评论:
欢迎- 一周热门
-
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
[常用工具] OpenCV_contrib库在windows下编译使用指南
-
WindowsServer2022|配置NTP服务器的命令
-
Ubuntu系统Daphne + Nginx + supervisor部署Django项目
-
WIN11 安装配置 linux 子系统 Ubuntu 图形界面 桌面系统
-
解决Linux终端中“-bash: nano: command not found”问题
-
NBA 2K25虚拟内存不足/爆内存/内存占用100% 一文速解
-
Linux 中的文件描述符是什么?(linux 打开文件表 文件描述符)
-
K3s禁用Service Load Balancer,解决获取浏览器IP不正确问题
-
- 最近发表
-
- 服务器数据恢复—Raid5数据灾难不用愁,Raid5数据恢复原理了解下
- 服务器数据恢复—多次异常断电导致服务器raid不可用的数据恢复
- 服务器数据恢复-V7000存储更换磁盘数据同步失败的数据恢复案例
- 「服务器数据恢复」重装系统导致XFS文件系统分区丢失的数据恢复
- 服务器数据恢复-ESXi虚拟机被误删的数据恢复案例
- 「服务器数据恢复」Raid5阵列两块硬盘亮黄灯掉线的数据恢复案例
- 服务器数据恢复—基于oracle数据库的SAP数据恢复案例
- 「服务器虚拟化数据恢复」Xen Server环境下数据库数据恢复案例
- 服务器数据恢复—RAID故障导致oracle无法启动的数据恢复案例
- 服务器数据恢复—服务器磁盘阵列常见故障表现&解决方案
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)