ansibleでmysqlのreplicationを設定する

mysqlのreplicationをansibleでやったのでメモ。

mysqldumpをとる

dumpしてローカルにデータを落として来てる。今回はDBば小さかったので、これでよかったけど、サイズが大きい場合はあらかじめサーバ側でやっておく。 my.cnfとかはあらかじめ配布されてる前提です。

- hosts: [ master ]
  become : yes
  tasks: 
    - mysql_db:
        state: dump
        name: all
        login_user: USER
        login_password: PASS
        target: /tmp/dump.sql
    - name: get sqldump to local
      local_action: shell scp -r {{ inventory_hostname }}:/tmp/dump.sql ./

dbへdumpをインポート、replの設定をする

- hosts: [ master ]
  become : yes
  tasks: 
    - name: get master status 
      mysql_replication:
        mode: getmaster
        login_user: USER
        login_password: PASS
      register: result
    - debug: var=result
- hosts : [ slave ]
  become : yes
  vars_prompt:
    - name: mysqlfile
      prompt: "mysql.Fileを入力してください"
      private: no
    - name:  mysqlposition
      prompt: "mysql.Positionを入力してください"
      private: no
  tasks: 
    - name: send sqldump 
      local_action: shell scp dump.sql {{ inventory_hostname }}:/tmp/dump.sql
    - name: Import dump.sql 
      mysql_db:
        state: import
        name: dump 
        target: /tmp/dump.sql
        login_user: USER
        login_password: PASS
    - mysql_replication:
        mode: changemaster
        master_host: masterhost
        master_user: user
        master_password: pass
        master_log_file: "{{ mysqlfile }}"
        master_log_pos: "{{ mysqlposition }}"
        login_user: USER
        login_password: PASS
    - mysql_replication:
        mode: startslave
        login_user: USER
        login_password: PASS
    - mysql_replication:
        mode: getslave
        login_user: ROOT
        login_password: PASS
       register: result
    debug: var=result

#login_user, login_passwordは/root/.my.cnfを設定するならいらない

1.show master statusの表示
2.プロンプトにbinlogとpositionを入れる
3.dump.sqlのインポート

  1. changemaster
  2. start slave
  3. show slave status

こんな感じの流れ。mysql.FIle、positionが結構微妙で、playbook内でgroupを超えた変数(グローバル)を宣言できないっぽいので、promptにしてみた。 昔やった時はもっとshellスクリプトを結構書かないといけない感じだったんですが、mysql_replicationのモジュールができて楽になった。

どうも、ansible描いてるとその場限りの感じが多くなるので、もうちょっと汎用化していきたい。

connvoi's Picture

About connvoi

肉とビールと料理と写真とゲーム たまに技術 python / Solr / PHP / ansible

Jp, Tokyo https://connvoi.com