LoginSignup
1
2

More than 5 years have passed since last update.

ansibleでmysqlのreplicationを設定する

Posted at

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: 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のインポート
4. changemaster
5. start slave
6. show slave status

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

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

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2