14

MyISAMテーブルを使用したMysqlマスタースレーブレプリケーションがあります。すべての更新はマスターで実行され、選択はマスターまたはスレーブのいずれかで実行されます。

特定の更新を行うときに、いくつかのテーブルを手動でロックする必要があるようです。この書き込みロックがテーブルにある間は、ロックされたテーブルで選択を行うことはできません。しかし、奴隷についてはどうですか?ロックは伝播しますか?

table_Aとtable_Bがあるとします。マスターのtable_Aとtable_Bのロックを開始し、更新の実行を開始します。現時点では、他の接続はマスターからtable_Aとtable_Bを読み取ることができませんか?しかし、この時点で別の接続がスレーブからテーブルを読み取ろうとした場合、それらはそうすることができますか?

4

2 に答える 2

3

MySQL がレプリケートするものはすべて、バイナリ ログで見つけることができます。

次のコマンドを実行して、詳細を表示できます。

show global variables like 'log_bin%';

log_bin_basename は、バイナリ ログへのパスとベース ファイル名を示します。

そして走る

show binary logs

現在サーバーに存在するバイナリ ファイルを検索します。

mysqlbinlogコマンドをファイル名とともに使用するかshow binlog events ...、MySQL CLI から実行することで、ファイルに書き込まれた実際のコマンドを確認でき ます。

また、使用している binlog_format を確認してください。

基本的に、テーブルのロックはスレーブに直接伝達されませんが、その時点で、必要に応じて更新されたテーブルのロックを実行する実行された更新が実行されます。

于 2015-04-26T16:08:19.577 に答える
1

私の知る限り、書き込みロックはバイナリログに反映されません。簡単なテストを実行してバイナリログを調べることで確認できます。マスターの問題も回避したいが、何らかの理由で InnoDB に移行できない場合は、テーブルを完全にロックする代わりに、GET_LOCK() などをアプリケーションに統合することを検討してください。MyISAM は、並行性に関しては非常に不安定です。

于 2015-05-03T01:24:37.940 に答える