ansible-playbook實戰之批量安裝mysql

簡介

   通過ansible-playbook批量編譯安裝mysql-5.6.22並進行初始化,後續我們只需要啓動數據庫進行建庫即可。

ansible-playbook配置思路:
1.通過vars中的main.yml配置變量,主要爲源碼存放目錄及安裝目錄
2.通過tasks中的copy.yml將源碼文件傳輸到異地服務器上源碼存放目錄
3.通過tasks中的install.yml調用模板mysql_install.sh,將mysql安裝到變量中定義的安裝目錄
4.通過tasks中的main.yml調用copy模塊和install模塊
5.通過mysql.yml調用劇本(playbook):mysql_install

playbook的目錄結構

[root@test ansible]# cd /etc/ansible/
[root@test ansible]# mkdir -p roles/mysql_install/{files,handlers,meta,tasks,templates,vars}
[root@test ansible]# tree /etc/ansible
├── ansible.cfg
├── hosts
├── mysql.yml
├── roles
│   └── mysql_install
│       ├── files
│       │   ├── my.cnf
│       │   └── mysql-5.6.22.tar.gz
│       ├── handlers
│       ├── meta
│       ├── tasks
│       │   ├── copy.yml
│       │   ├── install.yml
│       │   └── main.yml
│       ├── templates
│       │   └── mysql_install.sh
│       └── vars
│           └── main.yml

說明:
files:存放需要同步到異地服務器的源碼文件及配置文件;
handlers:當資源發生變化時需要進行的操作,若沒有此目錄可以不建或爲空;
meta:角色定義可留空;
tasks:mysql安裝過程成需要進行的執行的任務;
templates:用於執行mysql安裝的模板文件,一般爲腳本;
vars:本次安裝定義的變量

具體操作

1.創建mysql角色文件,用於調用mysql_install

[root@test  ansible]# vim mysql.yml
- hosts: test
  remote_user: root
  gather_facts: False
  roles:
    - mysql_install

2.創建變量文件

#創建變量
[root@test ansible]# cd /etc/ansible/roles/mysql_install/vars
vim mail.yml
mysql_version: mysql-5.6.22
source_dir: /home/ap/src
install_dir: /home/ap/mysql
data_dir: /home/ap/mysql/data

3.創建任務文件

[root@test ansible]# cd /etc/ansible/roles/mysql_install/tasks
[root@test ansible]# vim copy.yml
#複製源碼至目標服務器
- name: copy mysql source code to client
  copy: src={{mysql_version}}.tar.gz dest={{source_dir}} owner=root group=root
#複製配置文件至目標服務器
- name: copy my.cnf to client
  copy: src=my.cnf dest=/etc/my.cnf owner=root group=root
#複製模板文件至目標服務器
- name: copy mysql install script to client
  template: src=mysql_install.sh dest={{source_dir}} owner=root group=root mode=0775
[root@test ansible]# vim install.yml
#執行模板文件進行安裝
- name: install mysql
  shell: bash {{source_dir}}/mysql_install.sh
[root@test ansible]# vim main.yml
#引用copy、install模塊
- include: copy.yml
- include: install.yml

注意:
a.copy如果複製目錄,需要加上遞歸參數,recurse;
b.copy如果複製目錄,沒有目錄將會在目標服務器上創建;
c.copy如果複製文件到目標服務器的某一個目錄下,需要在dest參數上加上/home/ap/src/,而不是/home/ap/src,否則ansible將會把文件複製爲src,而不是放在src目錄下。

4.編寫模板腳本

#!/bin/bash
INSTALL_DIR={{install_dir}}
DATADIR={{data_dir}}
INNODB_DIR=$DATADIR/innodb
VERSION='{{mysql_version}}'
SOURCE_DIR={{source_dir}}
#export LANG=zh_CN.UTF-8

#Source function library.
. /etc/init.d/functions

#camke install mysql5.6.X
install_mysql(){
        #read -p "please input a password for root: " PASSWD
    PASSWD='core2017'
        if [ ! -d $DATADIR ];then
                mkdir -p $DATADIR
        fi
        if [ ! -d $INNODB_DIR ];then
                mkdir -p $INNODB_DIR
        fi
        yum install cmake make gcc gcc-c++  ncurses-devel bison-devel -y
        id mysql &>/dev/null
        if [ $? -ne 0 ];then
                useradd mysql -s /sbin/nologin -M
        fi
        #useradd mysql -s /sbin/nologin -M
        #change datadir owner to mysql
        chown -R mysql.mysql $DATADIR
        cd $SOURCE_DIR
        tar xf $VERSION.tar.gz
        cd $VERSION
        cmake . -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
        -DMYSQL_DATADIR=$DATADIR \
        -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
        -DDEFAULT_CHARSET=utf8 \
        -DDEFAULT_COLLATION=utf8_general_ci \
        -DWITH_INNOBASE_STORAGE_ENGINE=1 \
        -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
        -DWITH_FEDERATED_STORAGE_ENGINE=1 \
        -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
        -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
        -DWITH_PARTITION_STORAGE_ENGINE=1 \
        -DEXTRA_CHARSETS=all \
        -DMYSQL_TCP_PORT=3306

        make && make install
        if [ $? -ne 0 ];then
                action "install mysql is failed!"  /bin/false
                exit $?
        fi
        sleep 2

        #copy config and start file
        #/bin/cp /usr/local/mysql/support-files/my-small.cnf /etc/my.cnf
        #modify /etc/my.cnf
        sed -i "s:mysqld =:mysqld = $INSTALL_DIR/bin/mysqld_safe:g" /etc/my.cnf
        sed -i "s:mysqladmin =:mysqladmin = $INSTALL_DIR/bin/mysqladmin:g" /etc/my.cnf
        sed -i "s:datadir =:datadir = $DATADIR:g" /etc/my.cnf
        sed -i "s:slow_query_log_file=:slow_query_log_file=$DATADIR:g" /etc/my.cnf
        sed -i "s:log-error=:log-error=$DATADIR:g" /etc/my.cnf
        sed -i "s:innodb_data_home_dir =:innodb_data_home_dir = $INNODB_DIR:g" /etc/my.cnf
        sed -i "s:innodb_log_group_home_dir =:innodb_log_group_home_dir = $INNODB_DIR:g" /etc/my.cnf
        cp $INSTALL_DIR/support-files/mysql.server /etc/init.d/mysqld
        chmod 700 /etc/init.d/mysqld
        #init mysql
        $INSTALL_DIR/scripts/mysql_install_db  --basedir=$INSTALL_DIR --datadir=$DATADIR --user=mysql
        if [ $? -ne 0 ];then
                action "install mysql is failed!"  /bin/false
                exit $?
        fi
        #check mysql
        /etc/init.d/mysqld start
        if [ $? -ne 0 ];then
                action "mysql start is failed!"  /bin/false
                exit $?
        fi
        chkconfig --add mysqld
        chkconfig mysqld on
        $INSTALL_DIR/bin/mysql -e "update mysql.user set password=password('$PASSWD') where host='localhost' and user='root';"
        $INSTALL_DIR/bin/mysql -e "update mysql.user set password=password('$PASSWD') where host='127.0.0.1' and user='root';"
        #$INSTALL_DIR/bin/mysql -e "delete from mysql.user where password='';"
        $INSTALL_DIR/bin/mysql -e "flush privileges;"
        #/usr/local/mysql/bin/mysql -e "select version();" >/dev/null 2>&1
        if [ $? -eq 0 ];then
                echo "+---------------------------+"
                echo "+------mysql安裝完成--------+"
                echo "+---------------------------+"
        fi
        #/etc/init.d/mysqld stop
        #add path
        echo "export PATH=$PATH:$INSTALL_DIR/bin" >> /etc/profile
        source /etc/profile
}

install_mysql

此腳本除了編譯安裝mysql,還初始化mysql數據庫,對已經參數留空的配置文件my.cnf進行相應的修改,設置密碼並啓動數據庫等系列操作。

5.定製安裝
後續可根據實際情況,通過修改vars/main.yml中的相關參數,進行定製安裝。

執行playbook

#檢查文件
[root@test ansible]# ansible-playbook -C mysql.yml
#執行playbook
[root@test ansible]# ansible-playbook mysql.yml
發佈了179 篇原創文章 · 獲贊 299 · 訪問量 61萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章