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提供されません。homeuser

2. SELinux アクティビティを確認します。設定または無効化(可能な場合)

無効にするには:

編集する/etc/selinux/config

SELINUX=disabled

その後、コマンドを再起動または実行します。

setenforce 0

答え3

  1. SQLアカウントにファイル権限があることを確認してください
  2. ファイルを一時ディレクトリに出力します。たとえば、「INTO OUTFILE /tmp/yourfile」や mysql がアクセスできるディレクトリ
  3. サイトからファイルをダウンロードするには、公開HTMLフォルダに「/ tmp」をシンボリックリンクとしてリンクします。

注:権限の問題によりファイルを削除できない場合は、ファイル名は一意である必要があります。

関連情報