ansible自动化部署MySQL5.7

Ansible部署MySQL5.7.24

一、分发密钥

# 1.生成私钥
[root@node1 ~]# ssh-keygen 
# 2.向主机分发私钥
[root@node1 ~]# ssh-copy-id root@192.168.1.111  #主
[root@node1 ~]# ssh-copy-id root@192.168.1.112  #从
# 3.添加主机组,/etc/ansible/hosts最后添加
[mysql]
192.168.1.111
192.168.1.112
[mysql_slave]
192.168.1.112
# 4.验证是否能免密通信
[root@node1 ~]# ansible mysql  -m ping

二、编写role

2.1、进入ansible目录,创建文件

[root@node1 ~]# cd /etc/ansible/roles
[root@node1 roles]# mkdir mysql
[root@node1 roles]# cd mysql/
[root@node1 mysql]# mkdir {files,tasks,templates,vars}
[root@node1 mysql]# ll
total 0
drwxr-xr-x 2 root root 6 Nov 25 22:42 files
drwxr-xr-x 2 root root 6 Nov 25 22:42 tasks
drwxr-xr-x 2 root root 6 Nov 25 22:42 templates
drwxr-xr-x 2 root root 6 Nov 25 22:42 vars

2.2、上传所需文件到对应的文件夹

# 1、MySQL5.7.24安装包放到files文件夹下
# 2、准备好my.cnf.j2放到templates问价夹下
# 3、准备好mysqld.service.j2放到templates问价夹下

2.3、编写tasks

---
- name: 创建MySQL用户组
  group: name={{ mysql_group }}

- name: 创建MySQL用户
  user: 
    name={{ mysql_user }}
    shell=/sbin/nologin
    group={{ mysql_group }}

- name: 创建mysql部署相关路径
  file: path={{ item.path }} state={{ item.type }} owner={{ item.owner }} group={{ item.group }} mode={{ item.mode }}
  with_items:
    - {path: '{{ mysql_dir }}',type: 'directory',owner: '{{ mysql_user }}',group: '{{ mysql_group }}',mode: '755'}
    - {path: '{{ mysql_data_dir }}',type: 'directory',owner: '{{ mysql_user }}',group: '{{ mysql_group }}',mode: '755'}
    - {path: '{{ mysql_data_dirx }}',type: 'directory',owner: '{{ mysql_user }}',group: '{{ mysql_group }}',mode: '755'}
    - {path: '{{ mysql_binlog_dir }}',type: 'directory',owner: '{{ mysql_user }}',group: '{{ mysql_group }}',mode: '755'}

- name: 拷贝配置文件
  template: src=my.cnf.j2 dest=/etc/my.cnf
  register: confChange

- name: debug,练习使用
  debug: var=confChange

- name: 部署MySQL数据库
  unarchive: src={{ mysql_pkg }} dest={{ mysql_dir }} mode=755

- name: rename 
shell: cd /app/ && mv mysql-5.7.24-linux-glibc2.12-x86_64/ mysql/

- name: 添加环境变量
  blockinfile:
    dest: /etc/profile
    create: yes
    backup: yes
    block: export PATH={{ mysql_dir }}/mysql/bin:$PATH

- name: 初始化数据
  shell: /app/mysql/bin/mysqld --initialize-insecure  --user=mysql --basedir={{ mysql_dir }}/mysql --datadir={{ mysql_data_dirx }}

- name: copy 启动脚本
  template: src=mysqld.service.j2 dest=/etc/systemd/system/mysqld.service

- name: 启动MySQL
  shell: systemctl daemon-reload && systemctl start mysqld && systemctl enable mysqld

- name: 校验端口
  wait_for: port=3306 state=started delay=5 timeout=60

2.4、变量的main文件

# MySQL相关变量

mysql_user: "mysql"
mysql_group: "{{ mysql_user }}"

mysql_dir: "/app"
mysql_data_dir: "/data"
mysql_data_dirx: "{{ mysql_data_dir }}/mysql"
mysql_binlog_dir: "{{ mysql_data_dir }}/binlog"

# 定义版本号及获取路径
mysql_pkg: "mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz"
mysql_pkx: "mysql"
原文地址:https://www.cnblogs.com/hsyw/p/14022481.html