When doing a
1 | mysqldump --all-databases -uUSER -p > dump.sql |
I was getting the error
mysqldump: Got error: 1017: Can’t find file: ‘./dbname/tablename.frm’ (errno: 13 – Permission denied) when using LOCK TABLES
The error was caused by the table files in my MySQL data directory being owned by the wrong user so MySQL couldn’t properly read them. The solution is simple.
Find your MySQL Data Directory, Fix Permissions
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ mysql -uroot -p -e 'SHOW VARIABLES WHERE Variable_Name="datadir"' +---------------+-----------------------+ | Variable_name | Value | +---------------+-----------------------+ | datadir | /usr/local/var/mysql/ | +---------------+-----------------------+ # Check owner of each file $ ls -lh /usr/local/var/mysql/ # Update to correct owner $ sudo chown -R _mysql:admin /usr/local/var/mysql/* |
After fixing the permissions on all files in this directory, I was able to mysqldump correctly.