
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 がアクセスできるディレクトリ
- サイトからファイルをダウンロードするには、公開HTMLフォルダに「/ tmp」をシンボリックリンクとしてリンクします。
注:権限の問題によりファイルを削除できない場合は、ファイル名は一意である必要があります。