ansible-playbook roles安装mysql
  TEZNKK3IfmPf 2023年11月13日 39 0

调用角色install_mysql.yml

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

mysql roles目录结构

ansible-playbook roles安装mysql

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
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   25   0   0 mysql
  TEZNKK3IfmPf   2024年05月17日   48   0   0 sqlmysql
  TEZNKK3IfmPf   2024年05月17日   30   0   0 ansible安装
  TEZNKK3IfmPf   2024年05月31日   29   0   0 数据库mysql
  TEZNKK3IfmPf   2024年05月17日   48   0   0 查询mysql索引
  TEZNKK3IfmPf   2024年05月17日   50   0   0 jsonmysql
  TEZNKK3IfmPf   2024年05月17日   48   0   0 mysqlphp
  TEZNKK3IfmPf   2024年05月31日   27   0   0 数据库mysql
TEZNKK3IfmPf