栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Ansible二进制安装MySQL多实例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Ansible二进制安装MySQL多实例

Ansible二进制安装MySQL多实例
  • Ansible部署MySQL多实例
  • 解析目录内容
    • files目录内容
    • vars 目录内容
    • 编写主文件、playbook

Ansible部署MySQL多实例
# 创建实例目录,在实例目录里创建MySQL目录
[root@localhost ~]# mkdir living
[root@localhost living]# mkdir mysql

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

# 创建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

解析目录内容
[root@localhost mysql]# ls
ansible.cfg  files  inventory  main.yml  off_firewalld.yml  off_selinux.yml  vars

files目录内容
[root@localhost files]# ls
my3306.service  my3307.service  my3308.service  my.cnf.j2  my_print_defaults  mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz  mysql.sh.j2

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

[Service]
Type=forking
ExecStart=/usr/local/mysql/bin/mysqld_multi start 3306
ExecStop=ps -ef|grep 3306|grep -v grep|awk '{print $2}' | xargs kill -9
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

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

[Service]
Type=forking
ExecStart=/usr/local/mysql/bin/mysqld_multi start 3307
ExecStop=ps -ef|grep 3307|grep -v grep|awk '{print $2}' | xargs kill -9
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

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

[Service]
Type=forking
ExecStart=/usr/local/mysql/bin/mysqld_multi start 3308
ExecStop=ps -ef|grep 3308|grep -v grep|awk '{print $2}' | xargs kill -9
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target


# my.cnf.j2 内容
[root@localhost files]# vim my.cnf
[root@localhost files]# cat my.cnf
[mysqld_multi]
mysqld = {{ mysql_install_dir }}/bin/mysqld_safe
mysqladmin = {{ mysql_install_dir }}/bin/mysqladmin

[mysqld3306]
datadir = /opt/data/3306
port = 3306
socket = /tmp/mysql3306.sock
pid-file = /opt/data/3306/mysql_3306.pid
log-error=/var/log/3306.log

[mysqld3307]
datadir = /opt/data/3307
port = 3307
socket = /tmp/mysql3307.sock
pid-file = /opt/data/3307/mysql_3307.pid
log-error=/var/log/3307.log

[mysqld3308]
datadir = /opt/data/3308
port = 3308
socket = /tmp/mysql3308.sock
pid-file = /opt/data/3308/mysql_3308.pid
log-error=/var/log/3308.log


# my_print_defaults 来源
# 从受控主机复制到files目录下面
[root@localhost mysql]# scp database:/usr/local/mysql/bin/my_print_defaults  files/


# 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
ldconfig
mkdir -p /opt/data/{3306,3307,3308}
chown -R mysql.mysql /opt/data/
vars 目录内容
# mysql.yml 内容
[root@localhost mysql]# ls vars/
mysql.yml
[root@localhost mysql]# cat vars/mysql.yml
mysql_depend_pkg:
  - ncurses-compat-libs
  - perl
mysql_install_dir: /usr/local/mysql
编写主文件、playbook
# main.yml 内容
[root@localhost mysql]# cat main.yml
---
- hosts: database1
  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: no
        shell: /sbin/nologin

    - name: install depend pkgs # 下载依赖包
      yum:
        name: "{{ item }}"
        state: present
      loop: "{{ mysql_depend_pkg }}"

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

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

    - name: provide files/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/3306_pass is exists # 判断目录是否存在
      command: test -f /opt/3306_pass
      register: mysql_3306 # 把结果传到这个变量中
      ignore_errors: yes
    - name: initialize 3306  DB # 执行初始化
      raw: mysqld --initialize --datadir=/opt/data/3306 --user=mysql | tee /opt/3306_pass
      register: result_3306
      when: mysql_3306['rc'] != 0  # 执行的条件
      ignore_errors: yes
    - debug: var=result_3306 # 打印信息

    - name: test /opt/3307_pass is exists
      command: test -f /opt/3307_pass
      register: mysql_3307
      ignore_errors: yes
    - name: initialize 3307 DB
      raw: mysqld --initialize --datadir=/opt/data/3307 --user=mysql | tee /opt/3307_pass
      register: result_3307
      when: mysql_3307['rc'] != 0
      ignore_errors: yes
    - debug: var=result_3307

    - name: test /opt/3308_pass is exists
      command: test -f /opt/3308_pass
      register: mysql_3308
      ignore_errors: yes
    - name: initialize 3308 DB
      raw: mysqld --initialize --datadir=/opt/data/3308 --user=mysql | tee /opt/3308_pass
      register: result_3308
      when: mysql_3308['rc'] != 0
      ignore_errors: yes
    - debug: var=result_3308

    - name: provide my.cnf.j2 # 提供配置文件
      template:
        src: files/my.cnf.j2
        dest: /etc/my.cnf
    - name: provide my_print_defaults  # 目的为了设置service文件,能够设置开机自启
      copy:
        src: files/my_print_defaults
        dest: /usr/bin/
        owner: mysql
        group: mysql
        mode: 0755

    - name: provide my3306  # 提供service文件,设置开机自启
      copy:
        src: files/my3306.service
        dest: /usr/lib/systemd/system/

    - name: provide my3307
      copy:
        src: files/my3307.service
        dest: /usr/lib/systemd/system/

    - name: provide my3307
      copy:
        src: files/my3308.service
        dest: /usr/lib/systemd/system/

    - name: start my3306 # 设置开机自启
      service:
        name: my3306
        state: started
        enabled: yes
    - name: start my3307
      service:
        name: my3307
        state: started
        enabled: yes
    - name: start my3308
      service:
        name: my3308
        state: started
        enabled: yes
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1006818.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号