通过ansible批量安装部署mysql

本文是通过ansible-playbook的roles功能实现批量编译安装mysql-5.7.23和初始化。

系统环境
服务器 IP地址 操作系统 所需软件
ansible主机 192.168.2.203 Centos 7 64位 ansible
Mysql_maste 192.168.2.217 Centos 7 64位
Mysql_slave1 192.168.2.218 Centos 7 64位
Mysql_slave2 192.168.2.219 Centos 7 64位
具体操作

首先三台远程主机都已配置ssh-key授权,已打通ssh连接通道,并且都能正常ping通。

1、hosts文件添加主机组
[db_server]
192.168.2.217
192.168.2.218
192.168.2.219
2、创建roles目录
cd /etc/ansible/roles/
mkdir -p mysql_install/{default,files,handlers,meta,tasks,templates,vars}
3、下载安装包
cd mysql_install/files/
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.23.tar.gz
wget https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
4、创建关闭selinux的配置模板文件

vim /etc/ansible/roles/mysql_install/templates/config.j2

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
#SELINUXTYPE=targeted
5、创建mysql的配置模板文件

vim /etc/ansible/roles/mysql_install/templates/my.cnf.j2

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
explicit_defaults_for_timestamp=true
datadir=/data/mysql/data
socket=/data/mysql/run/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

log-error=/data/mysql/logs/mysqld.log
pid-file=/data/mysql/run/mysqld.pid
[mysqld_safe]

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
6、创建调用roles的playbook作业

cd /etc/ansible/roles/
vim mysql_install.yml

- hosts: db_server
  remote_user: root
  roles:
    - mysql_install
7、创建关闭selinux的tasks作业

vim mysql_install/tasks/selinux.yml

- name: Modify the configuration file for SELinux
  template: src=config.j2 dest=/etc/selinux/config
- name: close selinux
  shell: setenforce 0
8、创建变量vars定义文件

vim mysql_install/vars/main.yml

mysql_version: mysql-5.7.23
boost_version: boost_1_59_0
source_dir: /tmp
install_dir: /data/mysql
data_dir: /data/mysql/data
9、创建文件分发作业

vim mysql_install/tasks/copy.yml

- name: 分发mysql安装包、boost安装包和mysql_install.sh脚本
  copy: src={{ item }} dest={{ source_dir }}
  with_fileglob:
    - /etc/ansible/roles/mysql_install/files/*
- name: 分发mysql配置文件
  template: src=my.cnf.j2 dest=/etc/my.cnf
10、创建mysql安装作业

vim mysql_install/tasks/install.yml

- name: install mysql
  shell: bash {{source_dir}}/mysql_install.sh
11、创建tasks的main.yml文件

vim mysql_install/tasks/main.yml

- include: selinux.yml
- include: copy.yml
- include: install.yml
12、编写mysql安装脚本

vim mysql_install/files/mysql_install.sh

#!/bin/bash
INSTALL_DIR=/data/mysql
DATADIR=/data/mysql/data
BOOST_VERSION='boost_1_59_0'
VERSION='mysql-5.7.23'
SOURCE_DIR=/tmp

#camke install mysql5.7.X
install_mysql(){
     PASSWD='123456'
        if [ ! -d $DATADIR ];then
                mkdir -p $INSTALL_DIR/{data,run,logs}
        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
        chown -R mysql:mysql $INSTALL_DIR
        cd $SOURCE_DIR
        tar zxvf $BOOST_VERSION.tar.gz
        tar zxvf $VERSION.tar.gz
        cd $VERSION
        cmake . -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
        -DMYSQL_DATADIR=$DATADIR \
        -DMYSQL_UNIX_ADDR=$INSTALL_DIR/run/mysql.sock \
        -DDEFAULT_CHARSET=utf8 \
        -DDEFAULT_COLLATION=utf8_general_ci \
        -DWITH_INNOBASE_STORAGE_ENGINE=1 \
        -DWITH_MYISAM_STORAGE_ENGINE=1 \
        -DWITH_PARTITION_STORAGE_ENGINE=1 \
        -DWITH_BOOST=$SOURCE_DIR/$BOOST_VERSION \
        -DENABLED_LOCAL_INFILE=1 \
        -DEXTRA_CHARSETS=all

        make -j `grep processor /proc/cpuinfo | wc -l`
        make install
        if [ $? -ne 0 ];then
                echo "install mysql is failed!"
                exit $?
        fi
        sleep 2

        #MySQL initialization and startup
        cp -p $INSTALL_DIR/support-files/mysql.server /etc/init.d/mysqld
        if [ -d $INSTALL_DIR/logs ];then
            touch $INSTALL_DIR/logs/mysqld.log
            chown -R mysql:mysql $INSTALL_DIR/logs/mysqld.log
        else
            echo "No logs directory and mysqld.log file!"
            exit $?
        fi
        chown -R mysql:mysql $DATADIR
        rm -f $DATADIR/*
        $INSTALL_DIR/bin/mysqld --initialize --basedir=$INSTALL_DIR --datadir=$DATADIR --user=mysql
        /etc/init.d/mysqld start
        if [ $? -ne 0 ];then
                echo "mysql start is failed!"
                exit $?
        fi
        chkconfig --add mysqld
        chkconfig mysqld on
        root_pass=`grep 'temporary password' $INSTALL_DIR/logs/mysqld.log | awk '{print $11}'`
        $INSTALL_DIR/bin/mysql --connect-expired-password -uroot -p$root_pass -e "alter user 'root'@'localhost' identified by '$PASSWD';"
        if [ $? -eq 0 ];then
                echo "+---------------------------+"
                echo "+------mysql安装完成--------+"
                echo "+---------------------------+"
        fi
        #add path
        echo "export PATH=$PATH:$INSTALL_DIR/bin" >> /etc/profile
        source /etc/profile
}
install_mysql
mysql的最终角色路径如下:
角色路径.png

整个playbook作业主要实现关闭selinux、推送mysql配置、安装mysql和初始化mysql。

13、运行mysql_install.yml作业

检查playbook作业

ansible-playbook -C mysql_install.yml

运行playbook作业

ansible-playbook mysql_install.yml

安装时间比较久,大概半个小时左右,可以喝杯茶,顺便撩撩旁边的妹子,哈哈。
在节点机器上面明显可以看到mysql_install.sh脚本在运行,请耐心等待。

#安装完后执行下面命令查看mysql运行情况。
 ps -ef |grep mysql
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354