我正在尝试从 CentOS 终端的 mysql 命令行客户端内部运行以下命令:
SELECT Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME, ';')
FROM INFORMATION_SCHEMA.TABLES where table_schema in ('justatest')
INTO OUTFILE '/home/user/tmp/truncate.sql';
结果是这个错误:
ERROR 1 (HY000): Can't create/write to file '/home/user/tmp/truncate.sql'
(Errcode: 13 - Permission denied)
然后我打开了一个新终端,输入su -
,输入密码,然后输入以下命令:
chown root:root /home/user/tmp
chmod 1777 /home/user/tmp
但当我运行上面的原始 SQL 代码时,我仍然遇到同样的错误。
编辑:
当我尝试时,我也遇到同样的错误:
chown username:username /home/user/tmp
chmod 1777 /home/user/tmp
当我尝试时出现相同的错误消息:
chown mysql:mysql /home/user/tmp
chmod 1777 /home/user/tmp
我该如何解决这个错误?
答案1
只是实现您正在寻找的目标的另一种方式......
执行mysql
不带路径的命令,只执行所需的文件名。
SELECT Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME, ';')
FROM INFORMATION_SCHEMA.TABLES where table_schema in ('justatest')
INTO OUTFILE 'truncate.sql';
这会将您的文件保存在默认的 mysql 目录中 ( /var/lib/mysql/database
)
然后您可以移动文件并更改所有者
$ sudo mv /var/lib/mysql/database/truncate.sql /home/user/tmp
$ sudo chown user:user /home/user/tmp/truncate.sql
答案2
1. 设置正确的权限:
您的路径/home/user/tmp
必须在所有级别上拥有正确的权限:
/home
/home/user
/home/user/tmp
所有这些文件夹都必须可供mysql
用户使用,而不仅仅是端点tmp
目录
该命令不完整:
chown mysql:mysql /home/user/tmp
它仅添加文件夹的所有者tmp
,不提供对home
或的访问权限user
2.检查SELinux活动:配置或禁用(如果不能)
对于禁用:
编辑/etc/selinux/config
:
SELINUX=disabled
然后重启或者执行命令
setenforce 0
答案3
- 确保您的 sql 帐户具有文件权限
- 将文件输出到临时目录中。例如 'INTO OUTFILE /tmp/yourfile' 或 mysql 有权访问的目录
- 要在您的站点中下载文件,只需将“/tmp”符号链接到您的公共 html 文件夹中
注意:如果由于权限问题而无法删除文件,那么您的文件名必须是唯一的。