How do I find the MySQL my.cnf location
Asked Answered
F

30

512

Is there a MySQL command to locate the my.cnf configuration file, similar to how PHP's phpinfo() locates its php.ini?

Felonious answered 20/3, 2010 at 6:54 Comment(2)
on ubuntu, you may use the command locate my.cnf to find where are all such file names areEpitome
You might need to install locate using: sudo apt install locateChap
C
711

There is no internal MySQL command to trace this, it's a little too abstract. The file might be in 5 (or more?) locations, and they would all be valid because they load cascading.

  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • $MYSQL_HOME/my.cnf
  • [datadir]/my.cnf
  • ~/.my.cnf

Those are the default locations MySQL looks at. If it finds more than one, it will load each of them & values override each other (in the listed order, I think). Also, the --defaults-file parameter can override the whole thing, so... basically, it's a huge pain in the butt.

But thanks to it being so confusing, there's a good chance it's just in /etc/my.cnf.

(If you just want to see the values: SHOW VARIABLES, but you'll need the permissions to do so.)


Run mysql --help and you will see:

Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

enter image description here

Constituent answered 21/3, 2010 at 3:12 Comment(14)
mysql: unknown variable 'defaults-file=...Tor
Make sure to restart MySQL server after editing my.cnf: /etc/init.d/mysqld restart.Tiebout
For me (AWS EC2 Ubuntu), my.cnf is located in /etc/mysql/my.cnf.Interdiction
If you did brew install mysql in OSX, it is probably in /usr/local/mysql/my.cnfMultifid
Run mysql --help and you will see Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf Woodbine
@hanxue I forget every time, and your comment reminds me every time :D thanks!Vomiturition
in my case there was an symlink etc/mysql/my.cnf pointing to another symlink /etc/alternatives/my.cnf which points to etc/mysql/mysql.cnf.Aeolis
for ubuntu 16.02 it is located under /etc/mysql/mysql.conf.d/mysqld.cnf Refer this link - askubuntu.com/questions/699903/why-etc-mysql-my-cnf-is-emptyUnemployable
ls /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnfSurround
In my case it was in /etc/mysql/mysql.conf.d/mysqld.cnf (MySQL 1.7.5 on Ubuntu server LTS 18.04)Handgun
In my case (MacOS, mysql Ver 8.0.16), there isn't a my.cnf.Excitement
Really noob question but what does /etc mean?Davidson
That is the name of a folder.Corselet
In my case it was hidden in \ProgramData\MySQL\MySQL Server 8.0\my.ini It wasn't even shown on my default options. You can easily find your file with MySQL Workbench. Just go into Server > Options File and there on the bottom you have full path to your used config file like for example: "Configuration File: C:\ProgramData\MySQL\MySQL Server 8.0\my.ini"Monserratemonsieur
T
233

You can actually "request" MySQL for a list of all locations where it searches for my.cnf (or my.ini on Windows). It is not an SQL query though. Rather, execute:

$ mysqladmin --help

or, prior 5.7:

$ mysqld --help --verbose

In the very first lines you will find a message with a list of all my.cnf locations it looks for. On my machine it is:

Default options are read from the following files in the given order:
/etc/my.cnf
/etc/mysql/my.cnf
/usr/etc/my.cnf
~/.my.cnf

Or, on Windows:

Default options are read from the following files in the given order:
C:\Windows\my.ini
C:\Windows\my.cnf
C:\my.ini
C:\my.cnf
C:\Program Files\MySQL\MySQL Server 5.5\my.ini
C:\Program Files\MySQL\MySQL Server 5.5\my.cnf

Note however, that it might be the case that there is no my.cnf file at any of these locations. So, you can create the file on your own - use one of the sample config files provided with MySQL distribution (on Linux - see /usr/share/mysql/*.cnf files and use whichever is appropriate for you - copy it to /etc/my.cnf and then modify as needed).

Also, note that there is also a command line option --defaults-file which may define custom path to my.cnf or my.ini file. For example, this is the case for MySQL 5.5 on Windows - it points to a my.ini file in the data directory, which is not normally listed with mysqld --help --verbose. On Windows - see service properties to find out if this is the case for you.

Finally, check the https://dev.mysql.com/doc/refman/8.0/en/option-files.html - it is described there in more details.

Temple answered 7/3, 2012 at 14:22 Comment(7)
Looked promising but on my distro (opencsw.org), there is not mysqld. It runs mysqld_safe. "mysqld_safe --verbose --help" is not recognized.Nadiya
when I ran it, I got this: Default options are read from the following files in the given order: /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf -- I expected the first 2 files in reverse order.Hubsher
The information posted by mysqld --help --verbosecontradicts what's stated in dev.mysql.com/doc/refman/5.5/en/option-files.html. In my "recent as of today" experience with version 5.6, the information in the website is the most correct and relevant. The priority of the files location given by the help command is misleading and will lead to negative results.Garofalo
On my old Fedora it was mysql --help --verboseBackrest
Note that I had to increase the cmd buffer size to 3000 to be able to actually see the first lines, otherwise the text was simply overwritten. When they say "verbose", apparently, they mean it.Roose
On Windows, I only found it under %programdata% /Mysql/Mysql Server 8.0/my.iniMoonstone
I worked around the "too much output" problem with mysqld --help --verbose | grep -a1 'given order'Bute
M
78

You could always run find in a terminal.

find / -name my.cnf
Mohan answered 20/3, 2010 at 9:6 Comment(6)
it's the hard way :( Is there any mysql command like the phpinfo() to know the config file location ?Felonious
find / -name my.cnf is your best bet, but you could also check your home directory and /etc/mysql/my.conf You can also see if your MYSQL_HOME is set by typing echo $MYSQL_HOME in a terminalMohan
Wow, that would take forever on most machines. Most modern linuxes have locate installed and so long as updatedb is run regularly you can do a: locate my.cnf | lessStatesman
This only shows what files are named my.cnf. It doesn't tell you which on the mysqld process found and opened.Nadiya
This doesn't find ~/.my.cnf -- note the leading dot in the file name. Also running a find over the entire file system will usually generate scads of "Permission denied" errors unless you are root. So the find command should be find / -name '*my.cnf' 2>/dev/null.Delk
I think you need sudo, otherwise you might get a log of permission denied.Avalanche
G
41
mysql --help | grep /my.cnf | xargs ls

will tell you where my.cnf is located on Mac/Linux

ls: cannot access '/etc/my.cnf': No such file or directory
ls: cannot access '~/.my.cnf': No such file or directory
 /etc/mysql/my.cnf

In this case, it is in /etc/mysql/my.cnf

ls: /etc/my.cnf: No such file or directory
ls: /etc/mysql/my.cnf: No such file or directory
ls: ~/.my.cnf: No such file or directory
/usr/local/etc/my.cnf

In this case, it is in /usr/local/etc/my.cnf

Giarla answered 6/7, 2019 at 14:35 Comment(4)
Why is this not the answer?Tarrasa
I know I am late to the party - but what if my.cnf doesn't exist anywhere? ls: /etc/my.cnf: No such file or directory ls: /etc/mysql/my.cnf: No such file or directory ls: /usr/local/mysql/etc/my.cnf: No such file or directory ls: ~/.my.cnf: No such file or directoryPhosphorism
This is the only solution that worked for me. The rest were waste of time. To avoid an error message, use it this way: mysql --help | grep /my.cnf. I am using centos.Shrewsbury
Me too. This one worked for me, but leave off the /. Used: mysql --help | grep cnf result: order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/my.cnf /etc/mysql/my.cnf /opt/homebrew/etc/my.cnf ~/.my.cnfToucan
M
37

You can use :

locate my.cnf
whereis my.cnf
find . -name my.cnf
Manilla answered 27/2, 2013 at 8:19 Comment(3)
Great mine was at /etc/mysql/my.cnf in Ubuntu 12.0.1 on EC2Agnella
whereis won't work here; it searches for the locations corresponding to a command, and can't find arbitrary files.Invigilate
And updatedb to update the list locate goes through - if my.cnf wasn't indexedDelicate
E
27

This might work:

strace mysql ";" 2>&1  | grep cnf

on my machine this outputs:

stat64("/etc/my.cnf", 0xbf9faafc)       = -1 ENOENT (No such file or directory)
stat64("/etc/mysql/my.cnf", {st_mode=S_IFREG|0644, st_size=4271, ...}) = 0
open("/etc/mysql/my.cnf", O_RDONLY|O_LARGEFILE) = 3
read(3, "# /etc/mysql/my.cnf: The global "..., 4096) = 4096
stat64("/home/xxxxx/.my.cnf", 0xbf9faafc) = -1 ENOENT (No such file or directory)

So it looks like /etc/mysql/my.cnf is the one since it stat64() and read() were successful.

Elwira answered 22/3, 2010 at 18:13 Comment(0)
M
14

By default, mysql search my.cnf first at /etc folder. If there is no /etc/my.cnf file inside this folder, I advise you to create new one in this folder as indicated by the documentation (https://dev.mysql.com/doc/refman/5.6/en/option-files.html).

You can also search for existing my.cnf furnished by your mysql installation. You can launch the following command

sudo find / -name "*.cnf"

You can use the following configuration file with myisam table and without innodb mysql support (from port installation of mysql on mac os x maverick). Please verify each command in this configuration file.

# Example MySQL config file for large systems.
#
# This is for a large system with memory = 512M where the system runs mainly
# MySQL.
#
# MySQL programs look for option files in a set of
# locations which depend on the deployment platform.
# You can copy this option file to one of those
# locations. For information about these locations, see:
# http://dev.mysql.com/doc/mysql/en/option-files.html
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients
[client]
#password   = your_password
port        = 3306
socket      = /opt/local/var/run/mysql5/mysqld.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port        = 3306
socket      = /opt/local/var/run/mysql5/mysqld.sock
skip-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
# 
#skip-networking

# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin

# binary logging format - mixed recommended
binlog_format=mixed

# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id   = 1

# Replication Slave (comment out master section to use this)
#
# To configure this host as a replication slave, you can choose between
# two methods :
#
# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
#    the syntax is:
#
#    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
#    MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
#    where you replace <host>, <user>, <password> by quoted strings and
#    <port> by the master's port number (3306 by default).
#
#    Example:
#
#    CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
#    MASTER_USER='joe', MASTER_PASSWORD='secret';
#
# OR
#
# 2) Set the variables below. However, in case you choose this method, then
#    start replication for the first time (even unsuccessfully, for example
#    if you mistyped the password in master-password and the slave fails to
#    connect), the slave will create a master.info file, and any later
#    change in this file to the variables' values below will be ignored and
#    overridden by the content of the master.info file, unless you shutdown
#    the slave server, delete master.info and restart the slaver server.
#    For that reason, you may want to leave the lines below untouched
#    (commented) and instead use CHANGE MASTER TO (see above)
#
# required unique id between 2 and 2^32 - 1
# (and different from the master)
# defaults to 2 if master-host is set
# but will not function as a slave if omitted
#server-id       = 2
#
# The replication master for this slave - required
#master-host     =   <hostname>
#
# The username the slave will use for authentication when connecting
# to the master - required
#master-user     =   <username>
#
# The password the slave will authenticate with when connecting to
# the master - required
#master-password =   <password>
#
# The port the master is listening on.
# optional - defaults to 3306
#master-port     =  <port>
#
# binary logging - not required for slaves, but recommended
#log-bin=mysql-bin

# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /opt/local/var/db/mysql5
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /opt/local/var/db/mysql5
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 256M
#innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 64M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout
Manservant answered 20/3, 2014 at 9:58 Comment(0)
T
13

For Ubuntu 16: /etc/mysql/mysql.conf.d/mysqld.cnf

Tendentious answered 3/7, 2017 at 10:55 Comment(1)
If you want to change mysql configuration in ubuntu 16.04 Edit the following file For Ubuntu 16: /etc/mysql/mysql.conf.d/mysqld.cnfTape
I
10

As noted by konyak you can get the list of places mysql will look for your my.cnf file by running mysqladmin --help. Since this is pretty verbose you can get to the part you care about quickly with:

$ mysqladmin --help | grep -A1 'Default options'

This will give you output similar to:

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf

Depending on how you installed mysql it is possible that none of these files are present yet. You can cat them in order to see how your config is being built and create your own my.cnf if needed at your preferred location.

Introspect answered 15/12, 2015 at 7:18 Comment(2)
But I do not find the .cnf file in the mentioned location but all other files are presentRadloff
@AshokkumarGanesan - The list is a set of paths that will be checked, they may not all be present.Introspect
H
7

I don't know how you've setup MySQL on your Linux environment but have you checked?

  • /etc/my.cnf
Herniotomy answered 20/3, 2010 at 7:0 Comment(0)
D
7

Try running mysqld --help --verbose | grep my.cnf | tr " " "\n"

Output will be something like

/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/etc/my.cnf
~/.my.cnf
Disfranchise answered 2/6, 2016 at 21:18 Comment(1)
That is the output I receive but that appears to have no relation to the running instance. None of those files exist.Both
A
6

If you're on a Mac with Homebrew, use

brew info mysql

You'll see something like

$ brew info mysql
mysql: stable 5.6.13 (bottled)
http://dev.mysql.com/doc/refman/5.6/en/
Conflicts with: mariadb, mysql-cluster, percona-server
/usr/local/Cellar/mysql/5.6.13 (9381 files, 354M) *

That last line is the INSTALLERDIR per the MySQL docs

Assault answered 6/8, 2013 at 14:28 Comment(0)
C
6

You can also run this command.

mysql --help | grep cnf

Crosseyed answered 11/6, 2019 at 18:31 Comment(1)
Awsome!, on windows I had to replace grep with findstr: mysql --help | findstr cnf and it did the magicAscarid
M
5

If you are on Debian/Ubuntu system and already equipped with modern versions of the database (everything from 5.7 up, also true for mysql 8) the best way to locate the actual .cnf file I have found is:

sudo update-alternatives --config my.cnf

You should see a output like this:

There are 3 choices for the alternative my.cnf (providing /etc/mysql/my.cnf).

  Selection    Path                        Priority   Status
------------------------------------------------------------
  0            /etc/mysql/mariadb.cnf       500       auto mode
  1            /etc/mysql/mariadb.cnf       500       manual mode
  2            /etc/mysql/my.cnf.fallback   100       manual mode
* 3            /etc/mysql/mysql.cnf         300       manual mode

There are two lines in /etc/mysql/mysql.cnf that it makes sense to pay attention to:

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

MySQL will go watching for all .cnf files in /etc/mysql/conf.d/, then all files in /etc/mysql/mysql.conf.d/

Happy tuning!

Molliemollify answered 26/3, 2022 at 10:17 Comment(1)
Tangential to the original question, I have the impression it's better to add a .cnf file to mysql.conf.d than to edit any existing .cnf file. I have seen a convention to name it <username>.cnf but I prefer to name it <purpose>.cnf such as system_timestamp.cnf Not only (1) because a reinstall could overwrite changes to an existing file, but also (2) a look at the directory reveals the tweaks, and (3) they are portable if changing hosts. I also have the impression mysql.conf.d is newer than conf.d.Milli
T
4

Be aware that although mariadDB loads configuration details from the various my.cnf files as listed in the other answers here, it can also load them from other files with different names.

That means that if you make a change in one of the my.cnf files, it may get overwritten by another file of a different name. To make the change stick, you need to change it in the right (last loaded) config file - or, maybe, change it in all of them.

So how do you find all the config files that might be loaded? Instead of looking for my.cnf files, try running:

grep -r datadir /etc/mysql/

This will find all the places in which datadir is mentioned. In my case, it produces this answer:

/etc/mysql/mariadb.conf.d/50-server.cnf:datadir     = /var/lib/mysql 

When I edit that file (/etc/mysql/mariadb.conf.d/50-server.cnf) to change the value for datadir, it works, whereas changing it in my.cnf does not. So whatever option you are wanting to change, try looking for it this way.

Tophus answered 26/3, 2020 at 20:43 Comment(1)
grep -r datadir /etc/mysql/ saved me a lot of time , thank you !Meaningless
C
3

Found mine using

mysqld --help --verbose | grep my.cnf
Conjuncture answered 19/5, 2017 at 9:23 Comment(0)
S
3

Answered for only MySQL Workbench users,

enter image description here

Sourpuss answered 3/7, 2017 at 11:46 Comment(1)
Got an error "Location of MySQL configuration file (ie: my.cnf) not specified"Seawards
G
2

Another option is to use the whereis command.

E.g. whereis my.cnf

Gariepy answered 23/3, 2012 at 11:6 Comment(1)
You'd probably be better with 'locate' if the system supports it.Sosanna
T
2

All great suggestions, in my case I didn't find it in any of those locations, but in /usr/share/mysql, I have a RHEL VM and I installed mysql5.5

Tirza answered 26/7, 2014 at 18:26 Comment(0)
D
2

I installed xampp bundle with apache, php and mysql in ubuntu. There my.cnf file is located in /opt/lampp/etc/ folder. Hope it'll help somebody.

Doleful answered 16/11, 2015 at 11:31 Comment(0)
A
2

You will have to look through the various locations depending on your version of MySQL.

mysqld --help -verbose | grep my.cnf

For Homebrew:
/usr/local/Cellar/mysql/8.0.11/bin/mysqld (mysqld 8.0.11)

Default possible locations:
/etc/my.cnf
/etc/mysql/my.cnf
~/.my.cnf

Found mine here: 
/usr/local/etc/my.cnf
Aretha answered 8/7, 2018 at 23:53 Comment(0)
M
1

On Ubuntu (direct edit) :

$ sudo nano /etc/mysql.conf.d/mysqld.cnf
Mice answered 9/5, 2019 at 12:34 Comment(1)
on ubuntu 18, this one works for me: /etc/mysql/mysql.conf.d/mysqld.cnfToniatonic
M
1

In case you are in a VPS and are trying to edit a my.cnf on an already running server you could try:

ps aux | grep mysql

You will be show the parameters the mysql command is being run and where the --defaults-file points to

Note that your server might be running more than one MySQL/MariaDB server's. If you see a line without --defaults-file parameter, that instance might be retrieving the configuration from the .cnf's that are mentioned on mysqladmin --help as others have pointed out.

Martinson answered 29/1, 2020 at 23:47 Comment(0)
E
1

You can find my.cnf or any other file with find command:

find / -name my.cnf (or any other file name)
  1. find is a command
  2. / (slash) is a path
  3. my.cnf is a file name
Egotist answered 5/10, 2021 at 9:41 Comment(0)
P
0

If you are using MAMP, access Templates > MySQL (my.cnf) > [version]

If you are running MAMP windowless you may need to customize the toolbar using the Customize button.

MAMP PRO Templates Menu

Pathogenesis answered 26/7, 2017 at 1:31 Comment(0)
R
0

for me it was that i had "ENGINE=MyISAM" kind of tables , once i changed it to "ENGINE=InnoDB" it worked:) in PhpMyAdmin on Azure App Service :)

Retardment answered 26/1, 2019 at 10:50 Comment(0)
C
0

It depend on your access right but for me this work on phpmyadmin sql console

SHOW VARIABLES;

then after to change some variables you can do

SET GLOBAL max_connections = 1000;

or

SET @@GLOBAL.max_connections = 1000;

give a try

Carbineer answered 18/4, 2020 at 4:38 Comment(0)
W
0

MySQL configuration file:

/etc/my.cnf
Wedgwood answered 27/5, 2021 at 4:55 Comment(0)
D
0

try

mysql --verbose --help | grep -A 1 "Default options"
Davin answered 17/12, 2021 at 6:23 Comment(0)
K
0

For MariaDB 10.5 on Ubuntu 20.04.4 LTS (Focal Fossa):

# The MariaDB configuration file
#
# The MariaDB/MySQL tools read configuration files in the following order:
# 0. "/etc/mysql/my.cnf" symlinks to this file, reason why all the rest is read.
# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,
# 2. "/etc/mysql/conf.d/*.cnf" to set global options.
# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.
# 4. "~/.my.cnf" to set user-specific options.
#
# If the same option is defined multiple times, the last one will apply.
Klansman answered 3/3, 2022 at 23:10 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.