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.ymlmysql_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
# 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/