首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Ansible Playbook 自動化部署 MySQL 完整實戰:安裝、驗證與回滾

     編輯:MySQL 資料庫相關知識

專案結構

mysql_install/
├── files/
│   └── mysql.tar.gz              # MySQL 二進制包
├── handlers/
├── meta/main.yml
├── tasks/
│   ├── main.yml                  # 任務編排入口
│   ├── copy.yml                  # 分發軟體包、腳本、配置
│   ├── install.yml               # 核心安裝邏輯
│   └── delete.yml                # 清理臨時文件
├── templates/
│   ├── install_mysql.sh          # 編譯安裝腳本模板
│   ├── my.cnf                    # 配置文件模板
│   ├── mysqld                    # SysV 啟動腳本模板
│   └── mysql_security.sh         # mysql_secure_installation 自動化腳本
└── vars/main.yml                 # 變量定義

mysql_delete/                     # 回滾/卸載角色
├── tasks/delete.yml
└── vars/main.yml

核心變量定義 vars/main.yml

mysql_basedir: /data/mysql/basedir
mysql_datadir: /data/mysql/datadir
mysql_user: mysql
mysql_database_user: root
mysql_passwd: 'E4yR3WnoluSFTCBAI'
mysql_port: 3306
mysql_sock: /data/mysql/datadir/mysql.sock
mysql_charset: utf8
mysql_collation: utf8_general_ci
mysql_version: Percona-Server-5.5.21-rel25.1.tar.gz

Playbook 入口

# mysql_install.yml
- hosts: "{{host}}"
  remote_user: "{{user}}"
  gather_facts: True
  roles:
    - common
    - mysql_install

# mysql_delete.yml
- hosts: "{{host}}"
  remote_user: "{{user}}"
  gather_facts: True
  roles:
    - mysql_delete

執行實錄

ansible-playbook mysql_install.yml \
  --extra-vars "host=192.168.240.17 user=root" \
  --private-key=/root/test.pem

# 關鍵任務輸出
TASK [mysql_install | Copy Mysql Software To Redhat Client]     changed
TASK [mysql_install | Create Mysql User In Redhat Client]       changed
TASK [mysql_install | Copy Mysql Start Script To Redhat Client] changed
TASK [mysql_install | Copy Install Mysql Script To Redhat Client] changed
TASK [mysql_install | Copy Mysql Config To Redhat Client]       changed
TASK [mysql_install | Copy Mysql Security Script To Redhat Client] changed
TASK [mysql_install | Create Mysql Install Dir]                 ok
TASK [mysql_install | Uncompression Mysql Software]             changed
TASK [mysql_install | Modify Mysql Dir Permission]              ok
TASK [mysql_install | Install Mysql Script In Redhat Client]    changed
TASK [mysql_install | Start Mysql Security Script]              changed
TASK [mysql_install | Add Boot Start Mysql Service]             changed
TASK [mysql_install | Delete Mysql compression Software]        changed

PLAY RECAP: 192.168.240.17  ok=15  changed=12  failed=0

安裝後驗證

# 進程檢查
ps -ef | grep mysql
root  21333  1  0 22:27 ?  00:00:00 /bin/sh /data/mysql/basedir/bin/mysqld_safe --defaults-file=/data/mysql/datadir/my.cnf ...
mysql 22156 21333  2 22:27 ?  00:00:08 /data/mysql/basedir/bin/mysqld --defaults-file=... --port=3306

# 服務管理
/etc/init.d/mysqld status   # MySQL (Percona Server) running (22156) [OK]
chkconfig --list | grep mysql  # 2:on 3:on 4:on 5:on

# 連接測試(注意 host 差異)
mysql -h 10.10.240.21 -u root -p'E4yR3WnoluSFTCBAI'
# 內網 IP 可連,外網 IP 需授權用戶 host%

回滾驗證

ansible-playbook mysql_delete.yml --extra-vars "host=192.168.240.17 user=root" --private-key=/root/test.pem

# 清理結果
ls /data/          # 僅剩 webroot,mysql 目錄已刪除
ps -ef | grep mysql  # 無 mysqld 進程
ls /etc/init.d/mysqld  # No such file
chkconfig --list | grep mysql  # 無輸出

關鍵模板片段

templates/my.cnf(Jinja2 變量注入)

[mysqld]
basedir = {{ mysql_basedir }}
datadir = {{ mysql_datadir }}
port = {{ mysql_port }}
socket = {{ mysql_sock }}
character-set-server = {{ mysql_charset }}
collation-server = {{ mysql_collation }}
log-error = {{ mysql_datadir }}/mysql-error.log
pid-file = {{ mysql_datadir }}/mysql.pid
open-files-limit = 10240

templates/mysql_security.sh(非交互式安全初始化)

#!/bin/bash
mysql -uroot -e "DELETE FROM mysql.user WHERE user='';"
mysql -uroot -e "UPDATE mysql.user SET Password=PASSWORD('{{ mysql_passwd }}') WHERE User='root';"
mysql -uroot -e "FLUSH PRIVILEGES;"

資源下載

完整角色包(含 Percona Server 二進制包,~60MB):

百度網盤下載 → 解壓至 /etc/ansible/roles/

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved