天天看点

ansible-playbook roles安装mysql

文章目录

  • ​​调用角色install_mysql.yml​​
  • ​​mysql roles目录结构​​
  • ​​main.yml​​
  • ​​mysql.yml​​
  • ​​install_mysql.sh​​
  • ​​mysqld.cnf​​

调用角色install_mysql.yml

- hosts: mysql
  vars:
    - action: install
  roles:
    - mysql      

mysql roles目录结构

main.yml

- name: check mysql port {{ MYSQL_PORT }}
  shell:
    cmd: |
         if ss -nutlp | grep -w ":{{ MYSQL_PORT }} " &> /dev/null;then
             echo "Mysql Port Is Up"
         else
             echo "Mysql Port Is Down"
         fi
  register: check_result
- name: show check status
  debug: var=check_result.stdout_lines

- include: mysql.yml
  when: '"Down" in check_result.stdout and action == "install"'

- include: mysql.yml
  when: '"Up" in check_result.stdout and action == "uninstall"'      

mysql.yml

- name: create {{ ANSIBLE_DIR }}/mysql
  file: path={{ ANSIBLE_DIR }}/mysql state=directory
- name: copy install_mysql.sh to {{ ANSIBLE_DIR }}/mysql
  copy: src=install_mysql.sh dest={{ ANSIBLE_DIR }}/mysql

- block:
  - name: create {{ MYSQL_DATA }}/sql
    file: path={{ MYSQL_DATA }}/sql state=directory mode=0755
  - name: copy mysqld.cnf to {{ MYSQL_DATA }}
    copy: src=mysqld.cnf dest={{ MYSQL_DATA }}
  - name: copy rpms.zip to {{ ANSIBLE_DIR }}/mysql
    copy: src=rpms.zip dest={{ ANSIBLE_DIR }}/mysql/
  when: action == "install"

- name: mysql rpm {{ action }}
  shell: cd {{ ANSIBLE_DIR }}/mysql && bash install_mysql.sh {{ action }} {{ MYSQL_DATA }} {{ MYSQL_IP }} {{ MYSQL_PORT }} {{ MYSQL_ADMIN_USER}} {{ MYSQL_ADMIN_PWD }}
  register: result
  failed_when: result.rc != 0
- name: show excute info
  debug: var=result.stdout_lines verbosity=0      

install_mysql.sh

#!/bin/bash
<<INFO
AUTHOR:运维@小兵
DATE:2021-10-16
DESCRIBE:rpm方式安装MySQL
SYSTEM:CentOS7/RedHat7
WARNING:
MODIFY:
INFO

set -e
source /etc/profile                         #避免ansible远程执行shell获取环境变量不一致的问题

WORKDIR=$(cd `dirname $0`;pwd)              #脚本所在路径
echo "Current Excute: bash ${WORKDIR}/$0 $@"

MYSQL_DATA=$2               #Mysql数据目录
MYSQL_IP=$3
MYSQL_PORT=$4
MYSQL_ADMIN_USER=$5
MYSQL_ADMIN_PWD=$6

#环境检查
Check_Env(){
    echo "INFO:Begin Check Env..."
    if ss -nutlp | grep -w ":${MYSQL_PORT} " &> /dev/null;then
        echo "INFO:Mysql Is Installed" && exit 0
    fi
    [[ ! -f ${WORKDIR}/rpms.zip ]] && echo "ERROR:${WORKDIR}/rpms.zip Not Found" && exit 1
    if [[ ! -f ${MYSQL_DATA}/mysqld.cnf ]];then
        echo "ERROR:${MYSQL_DATA}/mysqld.cnf Not Found" && exit 1
    fi
}

#安装MySQL
Install_Mysql(){
    Check_Env
    echo "INFO:Begin Install Mysql Server..."
    cd ${WORKDIR}
    unzip -qo rpms.zip
    rpm -ivh ${WORKDIR}/rpms/*.rpm --nodeps --force
    [[ ! -f /etc/my.cnf.bak ]] && cp /etc/my.cnf{,.bak}
    \cp ${MYSQL_DATA}/mysqld.cnf /etc/my.cnf
    systemctl start mysqld
    systemctl enable mysqld
}

#修改Mysql的root密码
Modify_Root_Pwd(){
    local init_password=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}' | tail -n1)
    mysql -uroot -p"${init_password}" --connect-expired-password -e "set password=password('${MYSQL_ADMIN_PWD}')"
    mysql -uroot -p"${MYSQL_ADMIN_PWD}" -e "create USER if NOT EXISTS ${MYSQL_ADMIN_USER}@'%' identified by '${MYSQL_ADMIN_PWD}';"
    mysql -uroot -p"${MYSQL_ADMIN_PWD}" -e "grant all privileges on *.* to ${MYSQL_ADMIN_USER}@'%' WITH GRANT OPTION;"
    mysql -uroot -p"${MYSQL_ADMIN_PWD}" -e "flush privileges;"
    if ! mysql -h${MYSQL_IP} -P${MYSQL_PORT} -u${MYSQL_ADMIN_USER} -p${MYSQL_ADMIN_PWD} -e 'show databases;' &> /dev/null;then
        echo "ERROR:Install Mysql Server Fail" && exit 1
    else
        echo "INFO:Install Mysql Server Success"
    fi
}

#卸载MySQL
Uninstall_Mysql(){
    if ! ss -nutlp | grep -w ":${MYSQL_PORT} " &> /dev/null;then
        echo "INFO:Mysql Is Uninstalled" && exit 0
    else
        systemctl stop mysqld
        yum remove mysql-community-server -y
        rm -rf ${MYSQL_DATA}
        rm -rf /var/lib/mysql
        rm -f /etc/my.cnf
        rm -f /var/log/mysqld.log
        if ! ss -nutlp | grep -w ":${MYSQL_PORT} " &> /dev/null;then
            echo "INFO:Uninstall Mysql Success"
        else
            echo "ERROR:Uninstall Mysql Fail" && exit 1
        fi
    fi
}

######################主程序######################
[[ $# -ne 6 ]] && echo "ERROR:Invalid Param!!! eg:bash $0 (install|uninstall) mysql数据目录 mysql_ip mysql端口 mysql管理员 mysql管理员密码" && exit 1
case $1 in
install)
    Install_Mysql
    Modify_Root_Pwd;;
uninstall)
    Uninstall_Mysql;;
*)
    echo "ERROR:Invalid Param!!! eg:bash $0 (install|uninstall) mysql数据目录 mysql_ip mysql端口 mysql管理员 mysql管理员密码" && exit 1
esac      

mysqld.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

plugin-load=validate_password.so
validate-password=OFF
character_set_server=utf8mb4
collation-server=utf8mb4_general_ci
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
max_connections=3000
wait_timeout=3600
transaction_isolation=READ-COMMITTED
innodb_log_buffer_size=167772160
innodb_log_file_size=1024M
innodb_strict_mode=0
max_heap_table_size=512M
max_allowed_packet=67108864
lower_case_table_names=1