docker安装mysql并Navicat连接

1.docker search mysql  搜索镜像

2.下载镜像:

docker pull mysql     

3.下载完成后,创建mysql容器, 挂虚拟文件路径到真实主机上,不然重启数据就没了

docker run  -p 3306:3306 --name mysql -v /mysqldocker/conf:/etc/mysql  -v /mysqldocker/mysql-files:/var/lib/mysql-files  -v /mysqldocker/logs:/var/log/mysql -v /mysqldocker/data:/var/lib/mysql -v /mysqldocker/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
 

支持表情符号:

          修改mysql表字段的编码为uft8mb4

           可以直接navicat工具操作

        修改数据表的编码为utf8mb4

           可以直接navicat工具操作

        修改连接数据库的连接代码

修改前:
jdbc_url=jdbc:mysql://10.1.10.76:3306/ebus?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull

修改后:
jdbc_url=jdbc:mysql://10.1.10.76:3306/ebus?useUnicode=true&zeroDateTimeBehavior=convertToNull

4. 查看mysql容器id(container id):

docker ps

5.进入容器:

docker exec -it 7681b85e73a1 /bin/sh

6. mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password, 所以需要把mysql用户登录密码加密规则还原成mysql_native_password. 

进入mysql

mysql -h localhost -p

修改远程权限:

alter user 'root'@'%' identified with mysql_native_password by 'root';

7. 租的云服务器,很多有安全组的限制,需要添加白名单

点击控制台服务器ip后找到安全组

点击默认安全组,在入方向规则里添加2个如下安全规则开放ping和3306端口就可以了

 

 

 

<think>嗯,用户遇到了在Linux上使用Docker运行的MySQL,当关闭Navicat连接后再次连接时找不到MySQL服务的问题。我需要帮他们分析可能的原因。 首先,可能Docker容器停止运行了。用户可能不知道关闭Navicat是否会影响容器状态。这时候需要检查容器是否还在运行,可以用`docker ps`命令查看。如果容器停止了,就得找原因,比如资源限制或者配置错误。 接下来,考虑MySQL服务在容器内崩溃。虽然容器在运行,但MySQL可能因为配置错误、内存不足或日志文件过大而崩溃。查看容器日志`docker logs <容器名>`可能会有线索,比如错误信息或异常终止记录。 网络配置问题也可能导致连接失败。比如,Docker容器的端口映射是否正确,用户是否使用了正确的IP和端口。如果重启容器后端口被占用,或者防火墙设置阻止了连接,也会出现这个问题。检查端口映射和防火墙规则是必要的。 数据卷或持久化存储的问题也不能忽视。如果用户没设置持久化存储,容器重启后数据可能丢失,导致无法启动MySQL。确保有正确的数据卷挂载,比如`-v /my/own/datadir:/var/lib/mysql`,可以避免这种情况。 还有可能用户在容器重启后,MySQL的启动需要更长时间,特别是数据量大时。检查容器状态是否为健康状态,或者手动等待后再连接。 最后,权限问题也可能导致连接失败。比如,用户可能使用了错误的用户名或密码,或者MySQL用户的主机权限设置不正确。确保用户权限设置正确,且使用正确的连接信息。 综合这些可能性,用户需要一步步排查:检查容器状态、查看日志、确认端口和网络设置、验证持久化存储、等待启动完成,以及检查权限设置。这样应该能找到问题根源解决。</think>遇到DockerMySQL服务在Navicat断开后不可用的问题,请按照以下步骤排查: --- ### 一、检查容器状态 1. 执行命令查看容器是否存活 ```bash docker ps -a | grep mysql ``` - **情况1**:容器状态为`Exited` - 原因:容器已停止 - 解决方案:重启容器 ```bash docker start <容器名/ID> ``` - **情况2**:容器状态为`Restarting` - 原因:容器持续崩溃 - 需查看错误日志: ```bash docker logs <容器名/ID> ``` --- ### 二、常见故障原因 #### 1. 容器异常退出 - **典型表现**:`docker ps`不显示MySQL容器 - **触发场景**: - 宿主机关机/重启 - 手动执行了`docker stop` - 容器进程崩溃(可通过`docker inspect <容器> | grep -i exitcode`验证) #### 2. MySQL服务崩溃 - **检测方法**: ```bash docker exec -it <容器名> mysqladmin ping # 正常应返回 "mysqld is alive" ``` - **常见原因**: - 内存不足(查看`docker stats`) - 配置文件错误(检查`my.cnf`) - 数据目录损坏(常见于未使用持久化存储) --- ### 三、关键配置验证 #### 1. 持久化存储配置 **错误示范**(数据随容器销毁): ```bash docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=12345 mysql:8.0 ``` **正确配置**(必须挂载卷): ```bash docker run -d \ -v /opt/mysql_data:/var/lib/mysql \ # 关键持久化设置 -p 3306:3306 \ --name mysql \ -e MYSQL_ROOT_PASSWORD=12345 \ mysql:8.0 ``` #### 2. 自动重启策略 在创建容器时添加重启策略: ```bash docker run --restart=unless-stopped ... # 宿主机重启后自动拉起容器 ``` --- ### 四、连接故障排查 #### 1. 端口验证 ```bash netstat -tln | grep 3306 # 确认端口监听 telnet 127.0.0.1 3306 # 测试本地连接 ``` #### 2. 防火墙检查 ```bash sudo iptables -L -n | grep 3306 # 查看防火墙规则 sudo ufw status # 若使用UFW防火墙 ``` --- ### 五、典型错误日志分析 查看日志命令: ```bash docker logs --tail 100 <容器名> | grep -i error ``` **常见日志线索**: 1. `InnoDB: The error means another process is using the same InnoDB data or log files` - 原因:未正确关闭导致文件锁残留 - 解决方案:删除`ibdata1`等文件后重启(需提前备份) 2. `Can't connect to local MySQL server through socket` - 检查容器内MySQL服务是否实际在运行: ```bash docker exec -it mysql service mysql status ``` --- ### 六、最终解决方案建议 1. 创建新测试容器: ```bash docker run -d --rm \ # 使用--rm测试后自动清理 -v $(pwd)/tmpdb:/var/lib/mysql \ -p 3307:3306 \ -e MYSQL_ROOT_PASSWORD=12345 \ mysql:8.0 ``` 2. 用Navicat连接测试 3. 逐步迁移配置和数据 通过以上分步排查,通常可以准确定位到是容器管理问题、MySQL配置问题还是网络连接问题导致的故障。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值