2013-08-23 6 views
23

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

+0

ユーザーを変更しますか? – Strawberry

+0

dba.scにも同様の質問(回答あり)があります。http://dba.stackexchange.com/questions/74670/revoke-write-privileges-vs-setting-database-to-readonly – Bass

答えて

40

を忘れてしまった、あなたは、このコマンドによって、読み取り専用モードにあなたの全体のデータベースを置くことができます

SET GLOBAL read_only = 0; 
UNLOCK TABLES; 

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

+0

OPは実際には、データベース全体を読み取り専用モードに設定する必要があります。タイトルと実際の質問はここで混乱しています。とにかく、最も簡単な解決策は+1です。 – fancyPants

+1

他の人の検索を節約するために、これらを再生する前に私が読んでいるものを次に示します。[read_only global](https://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_read_only)( 「FLASH TABLES WITH READ LOCK;」および「バックアップ用にこれらを使用する」を参照してください(http://docs.oracle.com/cd/E17952_01/refman-5.5-en/replication-solutions-backups-read-only)。 html)。 – sage

+0

私は上記の方法を行った後、私のデータベースはまだ読み取り+書き込みモードでのみです。 – Phoenix

3

まあ、ユーザーが今最初にすべての権限を持っている場合は、selectパーミッション

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

、あなたは彼を与えることにその後

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

を取り消す必要がある自分のものとそれ以降を実行してくださいユーザに再度特権を与えてください

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

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

注:

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

とバック通常モードへ:見積レビュー、おそらく私はあなたの元の質問に答えるために何か