2022年5月4日 星期三

透過ansible 匯出docker MySQL db

要把docker mysql container的資料倒出來

當然可以透過像MySql workbench倒回即可

但目標是透過ansible腳本可以遠端隨時把db dump出來

所以需要的是透過單一指令執行

基本作法是

先進入container

sudo docker exec -it mysql99 bash

再執行mysql dump指令

mysqldump -u root -p mydb > mydb.sql


可以簡化成由docker exec直接執行

sudo docker exec -it mysql99 bash -c 'mysqldump -u root -p mydb > mydb.sql'


但如果要自動化這有一個問題是,每次都需要輸入password

解決方式是 在my.cnf加入設定

[mysqldump]

user=xxx

password=xxx

指令可以再簡化連使用者都不用輸入 

sudo docker exec -it mysql99 bash -c 'mysqldump mydb > mydb.sql'


已經準備好自動化的指令

接下來就可以使用ansible腳本來執行

dump.yml

- name: Dump MySQL db

  hosts: myhost

  tasks:

    - name: Dump MySQL DB -e db要帶匯出的db名稱

      become: true

      shell:

        cmd: "docker exec -it contianerName bash -c 'mysqldump {{db}} > {{db}}_{{ ansible_date_time.date }}.sql'"

      register: output

    - debug:

        var: output

執行

ansible-playbook -i hosts.yml -e db=mydb dump.yml

就會將mydb dump到 mydb_20200501.sql這樣帶有日期的sql檔案

沒有留言: