利用ansible的playbook实现MySQL5.7的二进制部署
环境准备:
源码包:mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz
已实现ansible主控端基于key验证
主机清单配置
[root@ansible ansible]
/data/ansible
[root@ansible ansible]
[webservers]
10.0.0.17
1、创建mysql角色相关的目录
[root@ansible roles]
/data/ansible/roles
[root@ansible roles]
mkdir: created directory ‘mysql’
mkdir: created directory ‘mysql/tasks’
mkdir: created directory ‘mysql/files’
mkdir: created directory ‘mysql/vars’
2、创建mysql角色相关的文件
[root@ansible mysql]
/data/ansible/roles/mysql
[root@ansible mysql]
.
├── files
│ ├── my.cnf
│ └── mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz
├── tasks
│ ├── config.yml
│ ├── data.yml
│ ├── group.yml
│ ├── install.yml
│ ├── linkfile.yml
│ ├── main.yml
│ ├── path.yml
│ ├── script.yml
│ ├── secure.yml
│ ├── service.yml
│ ├── unarchive.yml
│ └── user.yml
└── vars
└── main.yml
3 directories, 15 files
[root@ansible mysql]
my.cnf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz
[root@ansible mysql]
[mysqld]
explicit_defaults_for_timestamp=true
server-id=1
log-bin
datadir=/data/mysql
socket=/data/mysql/mysql.sock
[mysqld_safe]
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
[root@ansible mysql]
mysql_version: 5.7.36
mysql_file: mysql-{{mysql_version}}-linux-glibc2.12-x86_64.tar.xz
mysql_root_password: 123456
[root@ansible mysql]
- include: install.yml
- include: group.yml
- include: user.yml
- include: unarchive.yml
- include: linkfile.yml
- include: data.yml
- include: config.yml
- include: script.yml
- include: path.yml
- include: service.yml
- include: secure.yml
[root@ansible mysql]
- name: install packages
yum:
name:
- libaio
- numactl-libs
[root@ansible mysql]
- name: create mysql group
group: name=mysql gid=306
[root@ansible mysql]
- name: create mysql user
user: name=mysql uid=306 group=mysql shell=/sbin/nologin system=yes create_home=no home=/data/mysql
[root@ansible mysql]
- name: copy tar to remote host and file mode
unarchive: src=/data/ansible/roles/mysql/files/mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz dest=/usr/local/owner=root group=root copy=yes
[root@ansible mysql]
- name: create linkfile /usr/local/mysql
file: src=/usr/local/mysql-5.7.36-linux-glibc2.12-x86_64 path=/usr/local/mysql state=link
[root@ansible mysql]
- name: data dir
shell: /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/data/mysql
tags: data
[root@ansible mysql]
- name: config my.cnf
copy: src=/data/ansible/roles/mysql/files/my.cnf dest=/etc/my.cnf
[root@ansible mysql]
- name: service script
shell: /bin/cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@ansible mysql]
- name: PATH variable
copy: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh
[root@ansible mysql]
- name: enable service
shell: chkconfig --add mysqld;/etc/init.d/mysqld start
tags: service
[root@ansible mysql]
- name: change password
shell: /usr/local/mysql/bin/mysqladmin -uroot password {{mysql_root_password}}
3、在playbook中调用角色
[root@ansible ansible]
/data/ansible
[root@ansible ansible]
---
- hosts: webservers
remote_user: root
gather_facts: no
roles:
- mysql
4、运行playbook
[root@ansible ansible]
[root@ansible ansible]
[root@ansible ansible]
PLAY [webservers] ****************************************************************************************************
TASK [mysql : install packages] **************************************************************************************
ok: [10.0.0.17]
TASK [create mysql group] ********************************************************************************************
ok: [10.0.0.17]
TASK [create mysql user] *********************************************************************************************
ok: [10.0.0.17]
TASK [mysql : copy tar to remote host and file mode] *****************************************************************
changed: [10.0.0.17]
TASK [create linkfile /usr/local/mysql] ******************************************************************************
ok: [10.0.0.17]
TASK [mysql : data dir] **********************************************************************************************
changed: [10.0.0.17]
TASK [mysql : config my.cnf] *****************************************************************************************
changed: [10.0.0.17]
TASK [mysql : service script] ****************************************************************************************
changed: [10.0.0.17]
TASK [mysql : PATH variable] *****************************************************************************************
changed: [10.0.0.17]
TASK [mysql : enable service] ****************************************************************************************
changed: [10.0.0.17]
TASK [mysql : change password] ***************************************************************************************
changed: [10.0.0.17]
PLAY RECAP ***********************************************************************************************************
10.0.0.17 : ok=11 changed=7 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@centos7 ~]
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 80 [::]:3306 [::]:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 100 [::1]:25 [::]:*
[root@centos7 ~]
mysql Ver 14.14 Distrib 5.7.36, for linux-glibc2.12 (x86_64) using EditLine wrapper
[root@centos7 ~]
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+