私は2つのサーバー間のMySQLレプリケーション(マスター/マスターレプリケーション)構成を自動化するスクリプトを作成していますが、MySQLに関するアドバイスを探しています。
目標は、基本的に両方のサーバーで同じスクリプトを実行することを許可し(おそらく他のマスターサーバーのIPを求めるメッセージのみを表示し)、MySQLを完全に構成することです。ほとんどは非常に単純ですが、一部の設定値はサーバーごとに一意です。サーバーはほぼ同じです(MySQL資格情報を含む)。
これ/etc/my.cnfファイルには2つのサーバー固有の設定があり、そのうちの1つは次のとおりです。サーバーIDそして自動増分オフセット。
〜これサーバーID順序に関係なく開始する必要がありますか、それとも連続して開始する必要がありますか?そうでない場合は、サーバーのホスト名(たとえばappdb-stg-m01
、一意であるため01または任意の数値を取得できます)から数値を取得するか、サーバーのIPアドレスの最後のオクテットまで取得しようとします。十分?
だから自動増分オフセット、これらの2つのサーバーの設定は同じではありませんか?私はそれを1最初のマスターで2もう一つ。一部のオンラインチュートリアルではこれらの値を取得しましたが、なぜ異なるのか説明しませんでした。
それからマスターを次に変更します。命令...かかるメインログファイルそしてMASTER_LOG_POS...
これらのサーバーは比較的新しいサーバーであり、既存のデータベースがないと想定できます。だから私はリセットしたいと思いました。メインログファイル到着mysql-bin.000001十分ですが、IDを削除する必要があります。mysql-bin。 ?~から/var/lib/mysql、そして/var/lib/mysql/mysql-bin.index。これで十分ですか?
私が少しぶら下げた唯一の他の設定はMASTER_LOG_POS...自分で設定する方法はありますか?私はこのプロセスをできるだけ簡単に保ちようとしていますので、他のmysqlサーバーに接続して出力を見るのはSHOW MASTER STATUS
遠くにしたいと思います。リセットする方法はありますか?313?
ありがとうございます!
答え1
コメントを残そうとしましたが、答えが長くなり始めました。
MySQLのマスターとマスターの関係を念頭に置く一般的なアイデアは、レプリケーション作業の場合、2つのサーバーが同時にまたは異なる時間に同じレコードを作成することです。
だからこの点に注意してください。自動増分オフセット違うべき - 1と2でなければならない なぜならアイデアは、異なるレコード番号を生成することです(つまり、競合なし)。したがって、マスターの1人が作成したレコードは偶数であり、他のマスターによって生成されたレコードは奇数であるため、同時に競合するレコード番号を生成することはできません。たとえば、最初のマスターはレコード1,3,5,7などを生成し、2番目のマスターはレコード2,4,6,8...を生成します。
サーバーIDに関しては、互いに異なる必要があります。伝統的に、人々は1と2を使用しますが、これは必須ではありません。私考える0にすることはできません。わかりません。
最後に、MASTER_LOG_FILEとMASTER_LOG_POSの場合はデフォルト値を使用しようとすることができますが、状況を想定することは決して最善の考えではありません。発生するので、コードから始めてください。名前を再利用すると、リモートMySQLに接続して正しい値を取得する方が便利です。
自動化の別の観点を見るには、ここでAnsibleモジュールページへのリンクを見つけることができます。mysql_copy
以下は、Ansibleの手がかりを提供できる以前の答えです。PowerShellの「一対多」リモート機能に対応するLinux