Ubuntu 18.04で実行されている私のプログラムが実行されます。select文は出力ファイルに配置されます。私の/home/tmpディレクトリにありますが、mysqlで生成されたすべてのファイルはロックされています。手動でロックを解除することはできますが、プログラムはファイルが作成されるとすぐにファイルを読み取る必要があるため、作成時にロックを解除する必要があります。
フォルダ権限を777に設定しましたが、新しく作成されたすべてのファイルはまだロックされています。このファイルはmysqlサーバーが所有し、「他の」ユーザーにはアクセス権がありません。この権限は私のものではないので変更できません。
実行中のmysqlサーバーはv8.0.18です。
my.cnfでsecure_file_privをこの/home/tmpフォルダパスに設定しました。
mysqlサーバー5.7.27を使用して別のコンピュータで同じプログラムを実行していますが、ファイルがロックされていないため、問題が何であるかわかりません。
助けてください!ありがとうございます。
編集する: 説明
- 「ロック」とは、ファイル内のファイルを表示するときにアイコンにロック記号があることを意味します。
- ファイルを開こうとすると、"アクセス"/home/tmp/filename"が拒否されましたというエラーメッセージが表示されます。
- 私の選択ステートメントは、「SELECT * INTO OUTFILE '/home/tmp/file.csv'フィールドが 'で終了し、オプションで '''行で囲まれ、 '\ n' FROMデバイスで終了されます」と同じです。
答え1
MySQLドキュメントでこの説明を見たことがあります(参照:https://dev.mysql.com/doc/refman/8.0/en/select-into.html):
MySQL 8.0.17以降、ファイルを生成するためのumaskは0640です。ファイルの内容を操作するには十分なアクセス権が必要です。 MySQL 8.0.17より前では、umaskは0666で、サーバーホストのすべてのユーザーがファイルに書き込むことができました。
したがって、これらのファイルはMySQLが実行されているグループからのみ読み取ることができます。このグループにユーザーを追加できますが、これにより、必要なものよりも多くのアクセス権が与えられます(たとえば、データベースデータファイルへの直接アクセス)。
ファイルシステムがACLをサポートしている場合(ほとんどの場合)、もう1つのオプションは、デフォルトのACLがMySQLで設定した権限を上書きすることを確認することです。ダンプが書き込まれるディレクトリで、以下を試してください。
sudo setfacl -m 'd:u:«YOUR-USER»:r' /home/tmp
/home/tmp
これにより、「ユーザー」が読みやすいように作成されたすべてのファイルに自動的にACLを配置するように「デフォルト」ACLが設定されます。あなたも彼らに書く必要があるなら、それを使うことができますrw
。