這次剛好有機會使用ansible的資料庫模組,所以就紀錄一下筆記
首先在官網 ansible_document ,點選
Module Index
這裡就有提供很多模組可以使用,這次我使用的是Database Modules
,點進來後就找 mysql_db
& mysql_user
,這是我這次主要用的二個模組。
第一次建立資料庫無非就是下列四件事:
- 修改root密碼
- 新建資料庫
- 新建使用者
- 給使用者特定的權限
先介紹一下我使用的環境
SYSTEM VERSION
Control machine:CentOS Linux release 7.2.1511 (Core)
Remote machine: CentOS Linux release 7.1.1503 (Core)
ANSIBLE VERSION
ansible 2.1.0.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
STEPS TO REPRODUCE
--- - name: Setup | Percona XtraDB Cluster hosts: db tasks: - name: Setup | Percona yum Repository yum: name=http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm state=present - name: Setup | Install EPEL Repository yum: name=epel-release update_cache=yes state=present - name: Setup | Install Percona-XtraDB-Cluster-56 Package yum: name=Percona-XtraDB-Cluster-56 update_cache=yes state=present - name: Setup | Install Requirement Packages yum: name={{ item }} state=present update_cache=yes # 裝這二個套件主要是要讓控制端主機要有MySQL的libary,這樣才能與遠端的主機裡的資料庫做溝通,如果沒有的話就會出現
"
the python mysqldb module is required
"
with_items: - mysql-devel # 本機端的libary - MySQL-python # 給python用的libary - name: Setup | Create Mysql Data Directories file: path={{ item }} state=directory recurse=yes owner=mysql group=mysql mode=0755 with_items: - /var/log/mysql - name: Setup | Mysql Configuration # 使用 Jinja2 的範本,來做設定檔的維護 template: src=./templates/my_cnf_test.j2 dest=/etc/my.cnf # 這個變數會套進剛剛設定的my_cnf_test.j2 vars: - gcomm_list: 192.168.1.100 # notify 是用來觸發事件,通常會跟handlers一起使用,而且只會跑一次,在此劇本目前只會觸發二件事,一個啟動mysql service,另一個是更新root密碼 notify: - restart_mysql - Update MySQL root password - Create Database # handlers 事件處理器,也就是被notify所調用 handlers: - name: restart_mysql service: name=mysql@bootstrap.service state=restarted - name: Update MySQL root password run_once: true mysql_user: # 有驗証的登入使用者 login_user=root # 登入者的密碼 login_password="\n" # 建立使用者的名字或是已存在的使用者 name=root # 設定密碼 password='123456789' # 設定權限; 語法是: 資料庫.資料表:權限1,權限2 # 小建議,如果是設定權限時,最好是用雙引號包起來,避免會有語法上的錯誤 priv=*.*:ALL,GRANT # host預設就是localhost,如果有要連別的主機就可以用這選項 host={{ item }} # present=安裝 absent=移除 state=present # 檢查MySQL允許用root/NOPASSWORD登入之前嘗試提供憑証(這個不設也可以用) check_implicit_admin=True with_items: - localhost - name: Setup | Create MySQL Database mysql_db: # 有驗証的登入使用者 login_user=root # 使用者的登入密碼 login_password='123456789' # 建立資料庫的名稱 name=Apple # present=安裝 absent=移除 state=present
templates/my_cnf_test.j2
[mysqld]
# Path to Galera library
wsrep_provider=/usr/lib64/libgalera_smm.so
# Cluster connection URL
wsrep_cluster_address=gcomm://{{ gcomm_list }}
# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW
# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB
# This changes how |InnoDB| autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2
ACTUAL RESULTS
PLAY [Setup | Percona XtraDB Cluster] **************************************************
TASK [setup] *******************************************************************
ok: [db]
TASK [Setup | Percona yum Repository] ******************************************
changed: [db]
TASK [Setup | Install EPEL Repository] *****************************************
changed: [db]
TASK [Setup | Install Percona-XtraDB-Cluster-56 Package] ***********************
changed: [db]
TASK [Setup | Install Requirement Packages] ************************************
changed: [db] => (item=[u'mysql-devel', u'MySQL-python'])
TASK [Setup | Create Mysql Data Directories] ***********************************
changed: [db] => (item=/var/log/mysql)
TASK [Setup | Mysql Configuration] *********************************************
changed: [db]
RUNNING HANDLER [restart_mysql] ************************************************
changed: [db]
RUNNING HANDLER [Update MySQL root password] ***********************************
changed: [db] => (item=localhost)
RUNNING HANDLER [Create MySQL Database] ****************************************
changed: [db]
PLAY RECAP *********************************************************************
db : ok=10 changed=9 unreachable=0 failed=0
更新一下,遇到的問題
回覆刪除錯誤訊息:
Exception message: (2002, \"Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)\")"}
解法:
login_unix_socket="你設定檔裡指定socket的位置
OS: 明明就有看官網文件,怎麼就一直就沒看到,這次真的要謝謝我的好同事XDDD