バックアップ時などデータベースへの書き込み(DML/DDL)を一時的に禁止したい場合は、cc suspendDatabaseWritesコマンドを使用します。
データベースへの書き込み(DDL/DML)を一時的に禁止する例)
1 2 3 4 5 6 7 |
# cc suspendDatabaseWrites suspenddatabasewrites Sun Aug 17 08:05:57 2014 This command suspends the DDL/DML writes to the Calpont Database Do you want to proceed: (y or n) [n]: y Suspend Calpont Database Writes Request successfully completed |
書き込み禁止中にcc getSystemInfoコマンドを実行すると、DML/DDL処理に関連するプロセスのstatusがACTIVEではなくWRITE_SUSPENDになっていることが確認できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# cc getSystemInfo getsysteminfo Sun Aug 17 08:06:46 2014 System calpont-1 System and Module statuses Component Status Last Status Change ------------ -------------------------- ------------------------ System ACTIVE WRITE SUSPENDED Tue Aug 12 16:38:17 2014 Module pm1 ACTIVE Tue Aug 12 16:38:12 2014 Calpont Process statuses Process Module Status Last Status Change Process ID ------------------ ------ --------------- ------------------------ ---------- ProcessMonitor pm1 ACTIVE Tue Aug 12 13:26:19 2014 5470 ProcessManager pm1 ACTIVE Tue Aug 12 13:26:25 2014 5591 DBRMControllerNode pm1 ACTIVE Tue Aug 12 16:37:43 2014 3577 ServerMonitor pm1 ACTIVE Tue Aug 12 16:37:44 2014 3590 DBRMWorkerNode pm1 ACTIVE Tue Aug 12 16:37:45 2014 3603 DecomSvr pm1 ACTIVE Tue Aug 12 16:37:55 2014 3746 PrimProc pm1 ACTIVE Tue Aug 12 16:37:57 2014 3774 ExeMgr pm1 ACTIVE Tue Aug 12 16:38:02 2014 3859 WriteEngineServer pm1 WRITE_SUSPEND Tue Aug 12 16:38:07 2014 3915 DMLProc pm1 WRITE_SUSPEND Tue Aug 12 16:38:11 2014 3948 DDLProc pm1 WRITE_SUSPEND Tue Aug 12 16:38:14 2014 4001 mysqld pm1 ACTIVE Tue Aug 12 16:37:40 2014 3534 Active Alarm Counts: Critical = 0, Major = 0, Minor = 0, Warning = 0, Info = 0 |
この状態でDDL/DMLを実行しようとすると以下のようにエラーとなります。
1 2 |
mysql> insert into t1 values(1,'アシスト'); ERROR 122 (HY000): CAL0002: Writing to the database is disabled. |
書き込み禁止を解除したい場合はcc resumeDatabaseWritesコマンドを実行します。
1 2 3 4 5 6 7 |
# cc resumeDatabaseWrites resumedatabasewrites Sun Aug 17 08:10:42 2014 This command resumes the DDL/DML writes to the Calpont Database Do you want to proceed: (y or n) [n]: y Resume Calpont Database Writes Request successfully completed |
解除後にcc getSystemInfoコマンドを実行すると、DML/DDL処理に関連するプロセスのstatusがACTIVEに戻っていることが確認できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# cc getsysteminfo getsysteminfo Sun Aug 17 08:10:56 2014 System calpont-1 System and Module statuses Component Status Last Status Change ------------ -------------------------- ------------------------ System ACTIVE Sun Aug 17 08:10:44 2014 Module pm1 ACTIVE Tue Aug 12 16:38:12 2014 Calpont Process statuses Process Module Status Last Status Change Process ID ------------------ ------ --------------- ------------------------ ---------- ProcessMonitor pm1 ACTIVE Tue Aug 12 13:26:19 2014 5470 ProcessManager pm1 ACTIVE Tue Aug 12 13:26:25 2014 5591 DBRMControllerNode pm1 ACTIVE Tue Aug 12 16:37:43 2014 3577 ServerMonitor pm1 ACTIVE Tue Aug 12 16:37:44 2014 3590 DBRMWorkerNode pm1 ACTIVE Tue Aug 12 16:37:45 2014 3603 DecomSvr pm1 ACTIVE Tue Aug 12 16:37:55 2014 3746 PrimProc pm1 ACTIVE Tue Aug 12 16:37:57 2014 3774 ExeMgr pm1 ACTIVE Tue Aug 12 16:38:02 2014 3859 WriteEngineServer pm1 ACTIVE Sun Aug 17 08:10:44 2014 3915 DMLProc pm1 ACTIVE Sun Aug 17 08:10:44 2014 3948 DDLProc pm1 ACTIVE Sun Aug 17 08:10:44 2014 4001 mysqld pm1 ACTIVE Tue Aug 12 16:37:40 2014 3534 Active Alarm Counts: Critical = 0, Major = 0, Minor = 0, Warning = 0, Info = 0 |
これでDDL/DMLも実行できるようになります。
1 2 |
mysql> insert into t1 values(1,'アシスト'); Query OK, 1 row affected (1.02 sec) |
なお、アクティブなトランザクションが存在する状態で書き込みを禁止しようとした場合は、以下のようにCancel、Waitの選択肢が表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# cc suspendDatabaseWrites suspenddatabasewrites Mon Aug 18 17:58:03 2014 This command suspends the DDL/DML writes to the Calpont Database The following tables are locked: LockID Name Process PID Session CreationTime State DBRoots 9703 test.t1 DMLProc 3948 28335 2014-08-18 午後05時57分34秒 LOADING 1 There are active transactions being processed Your options are: Cancel -- Cancel the suspend request Wait -- Wait for write operations to end and then suspend What would you like to do: [Cancel]: |
この場合、Cancelを入力すると処理を中止します。
Waitを入力すると実行中のトランザクション処理が終了するまで処理を待機し、トランザクション処理が終了すると自動で書き込み禁止の処理が実行されます。