レプリケーション

AnsibleとMySQL 5.7で準同期レプリケーションを張る

覚書。 初めてAnsibleを触ってて少し躓いたところがあったので。   環境 ・Ansible 2.3.0 ・Percona server 5.7 (MySQL 5.7_     my.cnfを配置 Master用とSlave用のmy.cnfをリモート先へ送る。 [crayon-5b28878e32190651391842/]       rootパスワードを取得 MySQL 5.7から/var/log/mysqld.logにパスワードが記載されているので これを使って初期設定を行うらしい。 [crayon-5b28878e3219a141060394/]       .my.cnfを/rootに設置 Ansibleのmysqlモジュールを使うために/root/.my.cnfにファイルを設置 [crayon-5b28878e3219d300568071/] temp_my.cnf.j2 connect-expired-passwordが地味に大事 [crayon-5b28878e3219f722904734/]       rootパスワードを設定する 一時的なパスワードでは覚えられないので変更します。 パスワードの要件が厳しくなって大文字小文字記号数字で8桁以上とかだった気がする(覚えてない) [crayon-5b28878e321a1803431400/]       新しい.my.cnfを/rootに設置 [crayon-5b28878e321a2816227089/] new_my.cnf.j2 connect-expired-passwordを削除したバージョン [crayon-5b28878e321a4877624363/]       anonymousユーザーを削除 [crayon-5b28878e321a9052133320/]       レプリケーションユーザーを作成 [crayon-5b28878e321ab075958526/]       FlushコマンドってAnsibleじゃ使えないよね…? [crayon-5b28878e321ad625166209/]       マスターDBからダンプして、スレーブにインポート [crayon-5b28878e321af718274520/]       マスターのファイル名とポジションの取得 ここが一番詰まった。 Ansibleは異なるホスト間で変数の参照ができないので ファイル名とポジションの取得はスレーブのときに実行して、実際に実行するコマンドはマスター側で処理をする。 [crayon-5b28878e321b2806070770/]   Change master [crayon-5b28878e321b3876885012/]       スレーブの開始 [crayon-5b28878e321b6533199886/]       スレーブの状況確認 Slave_IO_Running と Slave_SQL_RunningがどっちもYesであることを確認 [crayon-5b28878e321b7012590277/]       マスターでロックしていたのを解除 [crayon-5b28878e321ba430665815/]