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