docker下mysql连接数过多处理及mysql映射docker目录设置

mysql连接数过多处理

  • 问题:mysql连接数过多,应用访问数据库失败
  • 解决:登录mysql提示Too many connections,表示连接超过最大连接数,于是只能通过修改配置文件my.cnf,重启mysql解决。于是最开始傻傻的进入mysql容器,通过find / -name my.cnf查询文件位置,然后再通过vim修改,结果发现容器内没有vim工具,于是想着安装vim,
 apt-get update
 apt-get install vim

做到这一步,按照计划vim安装好之后,再对my.cnf的max_connections做修改就行,结果同事提醒说有映射到本地的目录,改本地目录就行了。于是修改本地目录下的my.cnf,重启mysql容器,配置加载完成,登录mysql查看连接数及最大连接数:

show processlists;
show variables like '%max_connections%';

最大连接数已更改。

mysql映射docker目录设置

  • 启发:如何设置mysql映射docker本地目录,通过查阅资料,有以下两个方法:
    -(1)重启运行新的mysql容器,在参数设置
    -(2)修改容器配置文件

(1)第一种方法:

首先建立本地映射目:

 mkdir /usr/local/mysql/data /usr/local/mysql/conf
 touch /usr/local/mysql/conf/my.cnf
 vi /usr/local/mysql/conf/my.cnf

在my.cnf里添加内容如下:

[mysqld]
skip-name-resolve
default-time-zone = '+8:00'

log_bin=mysql-bin-2
server_id=1
innodb_flush_log_at_trx_commit=1

sync_binlog=1
binlog-do-db=jx_cxt
binlog_format=MIXED
expire_logs_days=7
max_binlog_size=20M
max_connections=300

分别代表意思如下:

skip-name-resolve跳过dns解析,加快连接速度
default-time-zone = ‘+8:00’设置时区为东八区
log_bin=mysql-bin-2二进制日志模式,方便增量同步
server_id=1设置服务ID
innodb_flush_log_at_trx_commit=11是最安全模式,速度最慢,0速度最快但不安全,2平均但是崩溃和断电会丢失上一秒所有事务数据
sync_binlog=1每次binlog写入后与硬盘同步,最安全但是也最慢
binlog-do-db=exm_db指定mysql的binlog日志记录哪个db
binlog_format=MIXED复制方式为混合模式,还有STATEMENT模式基于语句复制和ROW模式基于行复制,MIXED即两者混合
expire_logs_days=7日志保留7天
max_binlog_size=20M单个日志最大保存大小20M
max_connections=300最大连接数设置为300

然后运行新的容器:

docker run -itd --name mysql -p 3306:3306 -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

(2)第二种方法:

建立本地映射目及设置my.cnf方法同上。

接着查看mysql容器的挂载目录,mysql是运行中的容器名字:

docker inspect mysql

找到HostsPath这一行:
docker inspect mysql图片描述

HostsPath前面的路径就是hostconfig.json文件所在的路径。然后再修改对应目录下的hostconfig.json:

cd /var/lib/docker/containers/60a536b91f9bae4c5307ac92bb0a9035889088f130595d16d104ac00f54b9573
ll
vi hostconfig.json

找到最前面Binds对应的内容,将映射关系修改:
vi hostconfig.json图片描述
改成这样就行了:

"/usr/local/mysql/data:/var/lib/mysql","/usr/local/mysql/conf:/etc/mysql/conf.d"

然后重启docker,查看容器运行情况

systemctl restart docker 
docker ps -a 

确认mysql运行成功,然后查看本地目录与容器目录的内容是否一致

ls -l /usr/local/mysql/data
ls -l /usr/local/mysql/conf

docker exec -it mysql /bin/bash
ls -l /var/lib/mysql
ls -l /etc/mysql/conf.d

确认一致则成功。

个人建议测试环境直接重新运行新的mysql容器,简单粗暴。

2021.4.14做修改:添加对my.cnf的具体设置参数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值