Docker之MySQL主从连接提示:Communications link failure
Posted 在奋斗的大道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker之MySQL主从连接提示:Communications link failure相关的知识,希望对你有一定的参考价值。
今天在使用Apache ShardingSphere实现数据库读写分离功能,连接基于Docker的mysql5.7 主从IP。SpringBoot程序提示如下错误信息:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure
错误的原因:MySQL服务在长时间不连接之后断开了,断开之后的首次请求会抛出这个异常
原因分析:
1、既然是长时间不连接之后断开了,那这个时间应该是可以设定的,或者现在mysql用的还是默认的值
2、如何查看现在的时间值,以及如何修改基于docker服务启动的MySQL。
查看默认值:
1、使用Native For MySQL客户端工具,执行如下指令:show variables like '%timeout%'
参数说明:
1)interactive_timeout:
参数含义:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。
参数默认值:28800秒(8小时)
2)wait_timeout:
参数含义:服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。
参数默认值:28800秒(8小时)
温馨提示:在MySQL4 及其以下的版本,可以通过autoReconnect=true 配置属性解决连接自动恢复问题,如果是MySQL5及其以上版本,必须通过系统参数来控制。
结论:若要修改的话,需要同时修改这两个变量
连接时间值范围:在windows环境中:1-2147483s,
在Linux环境中:1-31536000s
Docker 下修改MySQL:MySQL5.7 在Docker 下的核心配置文件,是通过挂卷方式实现,所以我们仅仅只需要修改Docker 宿主主机所在挂载目录地址,修改对应文件即可。
docker 启动MySQL5.7:
docker run -p 3307:3306 --name mysql-master \\
-v /usr/local/mysql-master/log:/var/log/mysql \\
-v /usr/local/mysql-master/data:/var/lib/mysql \\
-v /usr/local/mysql-master/conf:/etc/mysql \\
-e MYSQL_ROOT_PASSWORD=root \\
-d mysql:5.7
MySQL5.7 配置文件所在宿主主机的文件目录地址:/usr/local/mysql-master/conf
在my.cnf 文件,添加超时时间配置。
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## 设置超时时间
wait_timeout=1814400
interactive_timeout=1814400
重新启动Docker 服务及其重启MySQL服务,再查看连接时间配置:
开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系以上是关于Docker之MySQL主从连接提示:Communications link failure的主要内容,如果未能解决你的问题,请参考以下文章
第02关 如何体系化掌握数据库?技术选型之数据库选型 基于 docker 搭建 mysql 主从