web-dev-qa-db-ja.com

コマンドラインからMySQLを一時的に読み取り専用に設定するにはどうすればよいですか?

特に、MySQLデータベースからデータを収集するbashスクリプトを作成しています。私のMySQLユーザーは書き込み権限を持っていますが、安全上の理由から一時的に読み取り専用状態に設定したいと思います。コマンドラインからこれを行うことは可能ですか?

30
Jimmy C

元の質問に答えるために、次のコマンドでデータベース全体を読み取り専用モードにできます。

FLUSH TABLES WITH READ LOCK;
SET GLOBAL read_only = 1;

そして、通常モードに戻ります:

SET GLOBAL read_only = 0;
UNLOCK TABLES;

これは、データベースの動作に大きな影響を与える操作であることに注意してください。したがって、これを実行する前に、上記のコマンドに関する利用可能なドキュメントをお読みください。より一般的な方法は、特定のユーザーからDML特権を取り消し、その後それらを再び付与することです。

50
Flo Doe

MySQL 5.6以降とInnoDBを使用している場合、セッションを読み取り専用にすることができます。

SET SESSION TRANSACTION READ ONLY;

https://dev.mysql.com/doc/refman/5.6/en/set-transaction.html

「読み取り専用」では、控えめな パフォーマンス上の利点 も提供されます。

5
txyoji

さて、ユーザーが現在すべての特権を最初に持っている場合、それを取り消す必要があります

$>mysql -u DB_USER -pDB_PASS --execute="REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'YOUR_USER';"

その後、彼に許可を選択します

$>mysql -u DB_USER -pDB_PASS --execute="GRANT SELECT ON 'YOUR_DATABASE'@.* TO 'YOUR_USER'@'%';FLUSH PRIVILEGES;"

あなたのものをやり、その後、ユーザーに再び権限を付与します

$>mysql -u DB_USER -pDB_PASS --execute="GRANT ALL ON 'YOUR_DATABASE'@.* TO 'YOUR_USER'@'%';FLUSH PRIVILEGES;"

そして、それはすべての人々です

注:引用のレビュー、おそらく何かを忘れてしまった

2
Sal00m