MySQL's configuration file my.cnf
can reside in multiple locations depending on your installation and operating system. The common search paths MySQL checks (in order) are:
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf
~/.my.cnf
To determine which configuration file MySQL is actually using, execute:
mysql --help | grep "Default options" -A 1
Or from within MySQL client:
SHOW VARIABLES LIKE 'config_file';
If your /etc/my.cnf
modifications aren't working, check these common issues:
1. File permissions: chmod 644 /etc/my.cnf
2. Correct section headers: [mysqld] for server settings
3. MySQL restart required: systemctl restart mysql
Here's a complete working example for UTF-8 configuration:
[mysqld]
collation-server = utf8_general_ci
character-set-server = utf8
init-connect = 'SET NAMES utf8'
skip-character-set-client-handshake = 1
[client]
default-character-set = utf8
[mysql]
default-character-set = utf8
Check loaded variables to verify changes:
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';
For more detailed debugging, start MySQL with:
mysqld --verbose --help
The MySQL configuration file my.cnf
can exist in multiple locations depending on your installation method and operating system. Here are the most common paths to check:
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf
~/.my.cnf
/usr/etc/my.cnf
MySQL provides several ways to identify which configuration file it's actually using:
# Method 1: Using mysqld command
mysqld --help --verbose | grep -A 1 "Default options"
# Method 2: From running MySQL instance
mysqladmin variables | grep -i "config file"
# Method 3: Checking process information
ps aux | grep mysqld
MySQL follows a specific order when reading configuration files:
/etc/my.cnf
/etc/mysql/my.cnf
$MYSQL_HOME/my.cnf
~/.my.cnf
(user-specific)
Here's a complete example of a properly formatted UTF-8 configuration:
[mysqld]
# Character set configuration
collation-server = utf8_general_ci
character-set-server = utf8
default-character-set = utf8
# Performance tuning
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
query_cache_size = 32M
If your changes aren't taking effect:
# Verify the file is being read
strace -e open mysqld 2>&1 | grep my.cnf
# Check for syntax errors
mysqld --validate-config
# Restart MySQL after changes
sudo systemctl restart mysql
For Homebrew installations on macOS:
# Typical path
/usr/local/etc/my.cnf
# Alternative locations
/usr/local/opt/mysql/my.cnf
/usr/local/Cellar/mysql/[version]/my.cnf
For Docker containers:
# The configuration is typically mounted
docker run -v /custom/my.cnf:/etc/mysql/my.cnf mysql:latest