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=1 | 1是最安全模式,速度最慢,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这一行:
HostsPath前面的路径就是hostconfig.json文件所在的路径。然后再修改对应目录下的hostconfig.json:
cd /var/lib/docker/containers/60a536b91f9bae4c5307ac92bb0a9035889088f130595d16d104ac00f54b9573
ll
vi hostconfig.json
找到最前面Binds对应的内容,将映射关系修改:
改成这样就行了:
"/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的具体设置参数