MySQL semi-sync replication slaveの停止と再開について

semi-sync replication を使用して Master Slave 構成にしたMySQLサーバで、
slaveを自分の操作で停止した場合。

データベースの中身に差分が無い場合

特に何もしないままslave startしても、
Slave側が最後に読んでたLog Positionから、
Master側が今書き込んでいるLog Positionまで読んで同期してくれる様子。

その最中に Master側とSlave側で差分があった場合、
Slave側では SQLスレッドがエラーで止まるけど、多分Master側には影響が無い。
(この辺りは調べたいところ)

データベースの中身に差分が有る場合。

データベースの中身の差分を無くした上で、同期を再開させる。

エラーを無視して同期を再開させたい場合はクエリをスキップさせて、同期を再開するように設定する。

停止した原因となったクエリを1つスキップ
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

その後、レプリケーションを再開させる
mysql> START SLAVE;

MySQLがtoo many connectionsエラーを出して接続出来ない場合

コネクション数を確認する

まずは現在のコネクション数を確認する

mysqladmin -u root extended-status | grep -E 'Max|Threads'

Max_used_connections これまでに記録された同時接続数の最大値
Threads_connected 現在開いている接続の数
Threads_created 接続を処理するために生成されたスレッド数
Threads_running スリープ状態になっていないスレッド数

参考にさせて頂いたサイト
mysqlで現在の接続数を確認する - だるろぐ跡地

なんのコネクションなのか確認する

普段の接続数よりも異常に多かった場合、
何が原因で増えているのかを特定するためにMySQLのプロセスリストを確認する

mysqladmin processlist -u root -p

MySQL4.1 だけどマニュアルにも書いてあった。
MySQL :: MySQL 5.6 リファレンスマニュアル :: B.5.2.7 接続が多すぎます

プロセスを止める

正しい対処なのかどうか分かりませんが、
たとえばコネクション張りっぱなしになっているプロセスなんかがあるのなら、
そのプロセスを止めればコネクションの数は減ると思うので。

mysqladmin kill プロセスID1,プロセスID2,プロセスID3 -u root -p

参考にさせて頂いたサイト
プロセスを強制的に停止する(mysqladmin) - MySQL 逆引きリファレンス

と言うところなのかなぁ、と考えています。