I want to increase max_connections
to 1024 in a docker container of mysql 5.6 hosted on AWS EC2. The instance type of the EC2 is m4.large
.
I've set max_connections to 1024 by adding max_connections=1024
in my.cnf
, but I only saw 214 when typing show varialbes like 'max_connections';
mysql command. Here is the my.cnf
I have.:
my.cnf
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
skip-host-cache
skip-name-resolve
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
explicit_defaults_for_timestamp
max_connections=1024
max_connect_errors=100000
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1
#log-error = /var/log/mysql/error.log
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
I've tried the solution mentioned in MySQL Max_connections stuck on 214 ?. But this one doesn't work in my case. The following are my settings:
common-session
# here are the per-package modules (the "Primary" block)
session [default=1] pam_permit.so
# here's the fallback if no module succeeds
session requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
session required pam_permit.so
# and here are more per-package modules (the "Additional" block)
session required pam_unix.so
session required pam_limits.so
# end of pam-auth-update config
limits.conf
#<domain> <type> <item> <value>
* soft nofile 65536
* hard nofile 65536
* soft nproc 100000
* hard nproc 127466
I've also tried the solution here.
mysql.service
[Unit]
Description=MySQL Community Server
After=network.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
PermissionsStartOnly=true
ExecStartPre=/usr/share/mysql/mysql-systemd-start pre
ExecStart=/usr/bin/mysqld_safe
ExecStartPost=/usr/share/mysql/mysql-systemd-start post
TimeoutSec=600
Restart=on-failure
LimitNOFILE=infinity
LimitMEMLOCK=infinity
This solution doesn't work for me either.
I pass the above files from the host machine into the docker container by using mountPoints
and volumes
in task definition of ECS.
Here are the mountPoints and volumes of my ECS task definition:
"mountPoints": [
{
"containerPath": "/docker-entrypoint-initdb.d/user.sql",
"sourceVolume": "user",
"readOnly": true
},
{
"containerPath": "/etc/mysql/my.cnf",
"sourceVolume": "mysql_config",
"readOnly": false
},
{
"containerPath": "/etc/security/limits.conf",
"sourceVolume": "limits_conf",
"readOnly": null
},
{
"containerPath": "/etc/systemd/system/mysql.service",
"sourceVolume": "mysql_service",
"readOnly": null
},
{
"containerPath": "/etc/pam.d/common-session",
"sourceVolume": "common_session",
"readOnly": null
}
],
"volumes": [
{
"host": {
"sourcePath": "/home/docker/mysql/user.sql"
},
"name": "user"
},
{
"host": {
"sourcePath": "/home/docker/mysql/my.cnf"
},
"name": "mysql_config"
},
{
"host": {
"sourcePath": "/home/docker/mysql/limits.conf"
},
"name": "limits_conf"
},
{
"host": {
"sourcePath": "/home/docker/mysql/mysql.service"
},
"name": "mysql_service"
},
{
"host": {
"sourcePath": "/home/docker/mysql/common-session"
},
"name": "common_session"
}
],
What else can I do so that max_connections
can reach 1024?
If you need to know more information of my docker container, just let me know.
Finally, I find out that adding --ulimit nofile=65536:65536
solves my problem.
The first 65536 in the option represents soft limit, and the second 65536 represents hard limit.