ansible二进制安装MySQL

ansible 部署二进制MySQL

# 进到/usr/src目录
[root@localhost src]# pwd
/usr/src

# 创建MySQL目录
[root@localhost src]# mkdir mysql

# 进到MySQL目录里面,复制配置文件到当前目录下、写清单文件
[root@localhost mysql]# cp /etc/ansible/ansible.cfg .
[root@localhost mysql]# vim inventory
[dbservers]
database

# 创建files目录放MySQL安装包
[root@localhost mysql]# mkdir files
# 下载MySQL安装包
[root@localhost files]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
[root@localhost files]# ls
 mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
 
# 创建vars目录存放变量
[root@localhost mysql]# mkdir vars

# 写关闭防火墙的playbook 、需要关闭防火墙就引用到主文件里去
[root@localhost mysql]# cat off_firewalld.yml
- name: stop firewalld
  service:
    name: firewalld
    state: stopped
    enabled: no

# 写关闭SElinux playbook 、需要关闭SElinux就引用到主文件里去
[root@localhost mysql]# cat off_selinux.yml
- name: stop
  lineinfile:
    path: /etc/selinux/config
    regexp: '^SELINUX='
    line: SELINUX=disabled

files目录内容

[root@localhost files]# ls
initialize.sh.j2  my.cnf.j2  mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz  mysqld  mysql.service.j2  mysql.sh.j2

# initialize.sh.j2 内容
[root@localhost files]# cat initialize.sh.j2
{{ mysql_install_dir }}/bin/mysqld --initialize --user=mysql --datadir=/opt/data 2>&1 | tee /opt/pass

# my.cnf.j2 内容
[root@localhost files]# cat my.cnf.j2
[mysqld]
basedir = {{ mysql_install_dir }}
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
sql-mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

# mysqld 来源
# 从受控主机复制到files目录、再改名为mysqld
[root@localhost mysql]# scp database:/usr/local/mysql/support-files/mysql.server files/
[root@localhost mysql]# cd files/
[root@localhost files]# mv mysql.server mysqld # 改名为mysqld

# mysql.service.j2 内容
[root@localhost files]# cat mysql.service.j2
[Unit]
Description=mysql server daemon
After=network.target sshd-keygen.target

[Service]
Type=forking
ExecStart={{ mysql_install_dir }}/support-files/mysqld start
ExecStop={{ mysql_install_dir }}/support-files/mysqld stop
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

# mysql.sh.j2 内容
[root@localhost files]# cat mysql.sh.j2
#!/bin/bash

cd /usr/local
tar xf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.37-linux-glibc2.12-x86_64 mysql
chown -R mysql.mysql mysql
cd
echo 'export PATH={{ mysql_install_dir }}/bin:$PATH' > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
ln -s {{ mysql_install_dir }}/include /usr/include/mysql
echo 'MANDATORY_MANPATH   {{ mysql_install_dir }}/man' >> /etc/man_db.conf
echo '{{ mysql_install_dir }}/lib' > /etc/ld.so.conf.d/mysql.conf
mkdir /opt/data
chown -R mysql.mysql /opt/data

vars 目录内容

# mysql.yml 内容
[root@localhost mysql]# ls vars/
mysql.yml
[root@localhost mysql]# cat  vars/mysql.yml
mysql_install_dir: /usr/local/mysql

编写主文件、playbook

# main.yml 内容
[root@localhost mysql]# cat main.yml
---
- hosts: dbservers
  vars_files:  # 定义变量
    - vars/mysql.yml
  tasks:
    - include_tasks: off_firewalld.yml # 关闭防火墙
    - include_tasks: off_selinux.yml # 关闭SElinux

    - name: create user # 创建用户
      user:
        name: mysql
        state: present
        system: yes
        create_home: on
        shell: /sbin/nologin

    - name: provide soft pkgs # 提供MySQL软件包
      copy:
        src: files/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
        dest: /usr/local/

    - name: install soft pkg  # 下载依赖包
      yum:
        name: ncurses-compat-libs
        state: present

    - name: test {{ mysql_install_dir }}  is exists # 这个目录是否存在,判断
      command: test -d {{ mysql_install_dir }}  # 这个执行的结果传到mysql_result
      register: mysql_result # 结果传到这
      ignore_errors: yes # 忽略错误

    - name: provide template mysql.sh.j2 # 把MySQL脚本传到受控机,然后执行
      template:
        src: files/mysql.sh.j2
        dest: /opt/mysql.sh
        owner: root
        group: root
        mode: 0755

    - name: exec script # 执行受控机的脚本
      shell: /opt/mysql.sh
      when: mysql_result['rc'] != 0 # 执行条件为非0
      ignore_errors: yes # 忽略错误

    - name: test /opt/pass is exists 判断目录是否存在
      command: test -f /opt/pass # 执行结果传到pass_result
      register: pass_result # 结果
      ignore_errors: yes # 忽略错误

    - name: provide initialize.sh.j2 # 把初始化数据库脚本传到受控机
      template:
        src: files/initialize.sh.j2
        dest: /opt/initialize.sh
        owner: root
        group: root
        mode: 0755

    - name: initialize DB # 执行受控机的初始化脚本
      shell: /opt/initialize.sh 
      register: print_result
      when: pass_result['rc'] != 0 # 执行条件为非0
      ignore_errors: yes # 忽略错误
    - debug: var=print_result # 打印信息

    - name: provide my.cnf.j2 # 提供配置文件
      template:
        src: files/my.cnf.j2
        dest: /etc/my.cnf

    - name: provide mysqld # 提供mysqld 文件、为了能执行service文件,就是开机自启
      copy:
        src: files/mysqld
        dest: "{{ mysql_install_dir}}/support-files/"
        owner: mysql
        group: mysql
        mode: 0755

    - name: provide service file # 提供service文件,目录设置开机自启
      template:
        src: files/mysql.service.j2
        dest: /usr/lib/systemd/system/mysqld.service

    - name: start mysql # 设置开机自启
      service:
        name: mysqld
        state: started
        enabled: yes

    - name: set password
      shell: mysql -uroot -p$(cat /opt/pass | awk 'NR==9{print $NF}') --connect-expired-password -e "set password = password('123456')"


MySQL 整体架构

[root@localhost src]# tree mysql
mysql # MySQL目录
├── ansible.cfg # 配置文件
├── files # 放文件目录
│   ├── initialize.sh.j2 # 初始化模板
│   ├── my.cnf.j2 # 配置模板
│   ├── mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz # MySQL安装包
│   ├── mysqld 
│   ├── mysql.service.j2 # service模板
│   └── mysql.sh.j2 # 脚本模板
├── inventory # 清单文件
├── main.yml # 主文件
├── off_firewalld.yml # 关闭防火墙
├── off_selinux.yml # 关闭SElinux
└── vars # 变量目录
    └── mysql.yml 

2 directories, 12 files
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值