在 CentOS 7 中将 mysql 输出写入文件

在 CentOS 7 中将 mysql 输出写入文件

我正在尝试从 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

  1. 确保您的 sql 帐户具有文件权限
  2. 将文件输出到临时目录中。例如 'INTO OUTFILE /tmp/yourfile' 或 mysql 有权访问的目录
  3. 要在您的站点中下载文件,只需将“/tmp”符号链接到您的公共 html 文件夹中

注意:如果由于权限问题而无法删除文件,那么您的文件名必须是唯一的。

相关内容