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 主从

搭建 MySQL 主从同步(基于 docker)

搭建Mysql主从复制

Docker 从入门到进阶五:于 Docker 上部署 MySQL 主从

MySql之基于ssl安全连接的主从复制

mysql集群搭建docker-compose方案