为什么我在使用 tab 选项的 mysqldump 的第二个文件(文本文件)上收到拒绝访问错误?
问题:为什么我在使用 tab 选项的 mysqldump 的第二个文件(文本文件)上收到拒绝访问错误? 我正在尝试使用--tab选项在 Ubuntu 上备份 mysql 数据库,使用以下命令: mysqldump -umy_user my_database -p --tab=/path/to/backup/dir 我输入密码,然后收到以下错误: mysqldump:出现错误:1045:执行“SEL
问题:为什么我在使用 tab 选项的 mysqldump 的第二个文件(文本文件)上收到拒绝访问错误?
我正在尝试使用--tab
选项在 Ubuntu 上备份 mysql 数据库,使用以下命令:
mysqldump -umy_user my_database -p --tab=/path/to/backup/dir
我输入密码,然后收到以下错误:
mysqldump:出现错误:1045:执行“SELECT INTO OUTFILE”时用户“my_user”@“localhost”的访问被拒绝(使用密码:YES)
密码没问题,File
在用户show privileges
的列表中。此外,看起来我可以生成 .sql 文件,但它在第一个 .txt 文件上死掉了。一个简单的 .sql 文件的 mysqldump 也可以工作。
运行命令并看到错误后,如果我 ls 备份目录,我会看到一个结构看起来正确的 sql 文件,但在尝试编写表内容的第一个 txt 文件时似乎已经死了。
我提前为转储创建了一个空目录。我尝试将其更改为 777,在此之前我尝试将其更改为mysql:mysql
。
解答
看起来apparmor是造成这种情况的原因。
由于 mysql 用户具有正确的权限,并且您尝试设置文件权限和所有者,所以剩下的就是 mysql 或文件权限以外的东西。在 Ubuntu 上,这将是 apparmor。
要验证 mysqld 是否生效,请尝试:
> sudo aa-status
...
2 processes are in enforce mode.
/usr/sbin/mysqld (1182)
...
一旦验证,您必须告诉 apparmor 允许 mysqld 写入您的备份目录。权限存放在:/etc/apparmor.d/usr.sbin.mysqld
...
/usr/sbin/mysqld {
....
/run/mysqld/mysqld.sock w,
/path/to/backup/dir/** w,
}
您可以将写入权限添加到要备份的目录,如上例所示。
仅供参考,这里是除了 apparmor 更改之外所需的目录所有权:
chown -R mysql:mysql /path/to/backup/dir
最后一点说明了为什么第一个文件被写入然后出错,转储文件的所有权并不统一。无论出于何种原因,sql文件归运行命令的shell用户所有,而txt文件归mysql所有:
> ls -al /path/to/backup/dir
...
-rw-r--r-- 1 my_user my_user 1596 Feb 2 01:24 wp_terms.sql
-rw-rw-rw- 1 mysql mysql 5117 Feb 2 01:24 wp_terms.txt
...
更多推荐
所有评论(0)