目录标题
- 场景:
-
- [1. 确保 MySQL 端口可访问](#1. 确保 MySQL 端口可访问)
- [2. 检查 MySQL 配置](#2. 检查 MySQL 配置)
- [3. 配置防火墙(如果需要)](#3. 配置防火墙(如果需要))
- [4. 使用 Navicat 连接](#4. 使用 Navicat 连接)
- [5. 如果连接失败,尝试以下解决方案](#5. 如果连接失败,尝试以下解决方案)
-
- [检查 MySQL 用户权限](#检查 MySQL 用户权限)
- [检查 MySQL 绑定地址](#检查 MySQL 绑定地址)
- [重启 MySQL 服务](#重启 MySQL 服务)
- [6. 验证连接](#6. 验证连接)
- 注意事项
场景:
通过docker 部署了禅道,使用了hub.zentao.net/app/zentao:latest 镜像中自带的mysql,
[root@m zentao]# sudo docker run -d --name zentao_ltkj -p 8005:80 -v /data/docker/zentao/www/zentaopms:/www/zentaopms -v /data/docker/zentao/www/mysqldata:/var/lib/mysql -e MYSQL_INTERNAL=true -e MYSQL_ROOT_PASSWORD=123456 hub.zentao.net/app/zentao:latest
如果想要通过 navicat 连接容器中的 MySQL 数据库,需要怎么配置?
1. 确保 MySQL 端口可访问
首先,您需要将容器的 MySQL 端口(默认 3306)映射到宿主机的一个端口:
bash
# 停止并删除当前容器
docker stop zentao_ltkj
docker rm zentao_ltkj
# 重新运行容器,添加 MySQL 端口映射
sudo docker run -d --name zentao_ltkj \
-p 8005:8005 \
-p 3306:3306 \ # 添加 MySQL 端口映射
-v /data/docker/zentao/www/zentaopms:/www/zentaopms \
-v /data/docker/zentao/www/mysqldata:/var/lib/mysql \
-e MYSQL_INTERNAL=true \
-e MYSQL_ROOT_PASSWORD=123456 \
hub.zentao.net/app/zentao:18.5
2. 检查 MySQL 配置
进入容器检查 MySQL 配置:
bash
# 进入容器
docker exec -it zentao_ltkj /bin/bash
# 检查 MySQL 监听地址
cat /etc/mysql/my.cnf | grep bind-address
# 如果 MySQL 只监听本地,需要修改配置
# 通常 Zentao 容器中的 MySQL 默认监听所有地址 (0.0.0.0)
# 退出容器
exit
3. 配置防火墙(如果需要)
如果您的服务器有防火墙,需要开放 MySQL 端口:
bash
# 检查防火墙状态
sudo firewall-cmd --list-all
# 开放 MySQL 端口
sudo firewall-cmd --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
4. 使用 Navicat 连接
现在您可以使用 Navicat 连接 MySQL:
- 打开 Navicat
- 点击 "连接" -> "MySQL"
- 填写连接信息:
- 连接名:任意名称(如 "Zentao MySQL")
- 主机:您的服务器 IP 地址(192.168.21.3)
- 端口:3306
- 用户名:root
- 密码:123456(您在运行容器时设置的密码)
- 点击 "测试连接" 确认连接成功
- 点击 "确定" 保存连接
5. 如果连接失败,尝试以下解决方案
检查 MySQL 用户权限
bash
# 进入容器
docker exec -it zentao_ltkj /bin/bash
# 登录 MySQL
mysql -uroot -p123456
# 检查用户权限
SELECT user, host FROM mysql.user;
# 如果 root 用户只能从 localhost 连接,需要添加远程访问权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# 退出 MySQL
exit
# 退出容器
exit
检查 MySQL 绑定地址
bash
# 进入容器检查 MySQL 配置
docker exec -it zentao_ltkj /bin/bash
# 查找 MySQL 配置文件
find / -name "*.cnf" | grep -i mysql
# 检查配置文件中的 bind-address
# 如果设置为 127.0.0.1,需要改为 0.0.0.0
# 通常配置文件在 /etc/mysql/my.cnf 或 /etc/mysql/mariadb.conf.d/50-server.cnf
# 退出容器
exit
重启 MySQL 服务
bash
# 进入容器重启 MySQL
docker exec -it zentao_ltkj /bin/bash
# 重启 MySQL(具体命令取决于容器内的初始化系统)
service mysql restart
# 或者
/etc/init.d/mysql restart
# 退出容器
exit
6. 验证连接
使用命令行验证 MySQL 连接:
bash
# 从宿主机测试 MySQL 连接
mysql -h 192.168.21.3 -P 3306 -u root -p
# 输入密码:123456
# 如果连接成功,显示 MySQL 提示符
注意事项
-
安全警告:将 MySQL root 用户开放给远程连接存在安全风险。在生产环境中,建议:
- 使用强密码
- 限制可访问的 IP 地址
- 创建专用用户而不是使用 root
-
性能考虑:MySQL 和 Web 服务运行在同一个容器中,可能会影响性能。对于生产环境,考虑将 MySQL 部署在单独的容器或服务器上。
-
备份重要:定期备份您的数据库,特别是在进行任何重大更改之前。
通过以上步骤,您应该能够使用 Navicat 成功连接到 Zentao 容器中的 MySQL 数据库。如果遇到任何问题,请提供具体的错误信息,我可以帮助您进一步诊断。