2012-06-01 4 views
13

私はMyISAMテーブルを使ってMysqlマスタースレーブレプリケーションをしています。すべての更新はマスターで行われ、選択はマスターまたはスレーブで行われます。mysql - レプリケーション上でロックが伝播しますか?

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

私はtable_Aとtable_Bを持っています。マスター上でtable_Aとtable_Bのロックを開始し、更新を開始します。この時点で、他の接続はmasterからtable_Aとtable_Bを読み取ることはできません。しかし、現時点で別の接続がスレーブからテーブルを読み込もうとすると、そうすることができますか?

+1

こんにちはアダム、これに答えましたか? – davide

+2

これはInnoDBに移動するための引数です - テーブルロックを避けるためです。 –

答えて

2

MySQLが複製するものはすべて、バイナリログにあります。

詳細を表示するには、次のコマンドを実行します。

show global variables like 'log_bin%'; 

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

と、現在ご使用のサーバー上に存在しているバイナリファイルを見つけることが

show binary logs 

を実行します。

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

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

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

0

私が知っている限り、書き込みロックはbinlogに伝播しません。クイックテストを行い、binlogを見ることで確認できます。あなたがマスターでも問題を回避したいと思っていて、なんらかの理由でInnoDBに移行できない場合は、テーブルを完全にロックするのではなく、GET_LOCK()のようなものをアプリケーションに統合することを検討してください。 MyISAMは、並行性に関してはまったく無理です。