Error
Error Code:
47
MySQL Error 47: Defaults File Access Issue
Description
MySQL Error 47, 'Failed to open required defaults file', indicates that the MySQL server or a client application cannot locate or access a necessary configuration file. This often happens during server startup, connection attempts, or when executing commands that rely on default settings, preventing MySQL from loading its operational parameters.
Error Message
Failed to open required defaults file: %s
Known Causes
3 known causesMissing Configuration File
The specified defaults file (e.g., my.cnf, my.ini) does not exist at the expected location or has been moved.
Incorrect File Permissions
The MySQL user or process lacks the necessary read permissions for the defaults file.
Wrong File Path or Symlink
MySQL is configured to look for the defaults file in an incorrect directory, or a symbolic link pointing to the file is broken.
Solutions
3 solutions available1. Verify and Correct Defaults File Path easy
Ensures the MySQL client and server are looking for the defaults file in the correct location.
1
Identify the expected defaults file location. This is often `.my.cnf` in the user's home directory or `/etc/my.cnf`. The error message `%s` will typically show the path it's trying to access.
2
Check if the defaults file exists at the specified path.
ls -l /path/to/defaults/file
3
If the file is missing, create it. If it exists but is in the wrong place, move it to the correct location.
mv /path/to/incorrect/location/.my.cnf ~/
4
Ensure the file has the correct read permissions for the user running the MySQL client or server.
chmod 644 ~/.my.cnf
2. Set the Defaults File Explicitly medium
Overrides any automatic path detection by telling MySQL exactly which defaults file to use.
1
Locate your MySQL defaults file (e.g., `~/.my.cnf`, `/etc/my.cnf`, `/etc/mysql/my.cnf`).
2
When running MySQL client commands (like `mysql` or `mysqldump`), use the `--defaults-file` option to specify the path to your defaults file.
mysql --defaults-file=/path/to/your/my.cnf -u your_user -p
3
For server startup, you might need to modify the systemd service file or init script to include this option. For example, in a systemd service file (`/etc/systemd/system/mysql.service` or similar), you would add it to the `ExecStart` line.
ExecStart=/usr/sbin/mysqld --defaults-file=/path/to/your/my.cnf
4
After modifying systemd service files, reload the daemon and restart the MySQL service.
sudo systemctl daemon-reload
sudo systemctl restart mysql
3. Check for Typos and Permissions in Defaults File easy
Addresses issues with the content and access rights of the defaults file itself.
1
Open the defaults file (e.g., `~/.my.cnf`) in a text editor.
nano ~/.my.cnf
2
Carefully review the contents for any syntax errors or typos. Ensure sections like `[client]` or `[mysqld]` are correctly formatted.
3
Verify that the file is readable by the user running the MySQL process. For `~/.my.cnf`, this is usually the user who logged in. For the server, it's the `mysql` user.
ls -l ~/.my.cnf
4
If permissions are too restrictive, grant read access.
chmod 644 ~/.my.cnf