[19:15:23 root@centos7 ansible]#tree
.
├── files
│ ├── my.cnf
│ └── mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz
├── hosts
└── install_mysql8.0-v1.yaml
1 directory, 4 files
# set mysql configuration file
[19:15:27 root@centos7 ansible]#cat files/my.cnf
[mysqld]
datadir=/data/mysql
skip_name_resolve=1
socket=/data/mysql/mysql.sock
explicit_defaults_for_timestamp=true
log_bin=/data/mysql/logbin/mysql-binlog
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
log_timestamps=SYSTEM
server-id=1
[client]
socket=/data/mysql/mysql.sock
[mysql]
prompt="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"
# upload mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz to files/
# set hosts file
[19:18:16 root@centos7 ansible]#cat hosts
[webserver1]
10.0.0.112
[webserver2]
10.0.0.113
# set playbook
[19:18:34 root@centos7 ansible]#cat install_mysql8.0-v1.yaml
---
# install mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz
#
- hosts: webserver1
remote_user: root
gather_facts: no
vars:
mysql_version: 8.0.23
mysql_file: mysql-{{mysql_version}}-linux-glibc2.12-x86_64.tar.xz
mysql_root_password: 123456
tasks:
- name: install packages
yum:
name:
- libaio
- numactl-libs
state: latest
- name: create mysql group
group: name=mysql gid=306
- name: create mysql user
user: name=mysql uid=306 group=mysql shell=/sbin/nologin system=yes create_home=no home=/data/mysql
- name: copy tar to remote host and file mode
unarchive: src=/data/ansible/files/{{mysql_file}} dest=/usr/local/ owner=root group=root
- name: create linkfile /usr/local/mysql
file: src=/usr/local/mysql-{{mysql_version}}-linux-glibc2.12-x86_64 dest=/usr/local/mysql state=link
- name: data dir
shell: /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/data/mysql
tags: data
- name: config my.cnf
copy: src=/data/ansible/files/my.cnf dest=/etc/my.cnf
notify:
- restart mysqld
- notify message
tags:
- config
- name: service script
shell: /bin/cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
- name: PATH variable
copy: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh
- name: enable service
shell: chkconfig --add mysqld;/etc/init.d/mysqld start
tags: service
- name: change password
shell: /usr/local/mysql/bin/mysqladmin -uroot password {{mysql_root_password}}
handlers:
- name: restart mysqld
service: name=mysqld state=restarted
- name: notify message
debug: msg="mysql is restarted"
# execute playbook
[18:59:19 root@centos7 ansible]#ansible-playbook install_mysql8.0-v1.yaml
PLAY [webserver1] ****************************************************************************************************************************************
TASK [install packages] **********************************************************************************************************************************
ok: [10.0.0.112]
TASK [create mysql group] ********************************************************************************************************************************
ok: [10.0.0.112]
TASK [create mysql user] *********************************************************************************************************************************
ok: [10.0.0.112]
TASK [copy tar to remote host and file mode] *************************************************************************************************************
changed: [10.0.0.112]
TASK [create linkfile /usr/local/mysql] ******************************************************************************************************************
ok: [10.0.0.112]
TASK [data dir] ******************************************************************************************************************************************
changed: [10.0.0.112]
TASK [config my.cnf] *************************************************************************************************************************************
changed: [10.0.0.112]
TASK [service script] ************************************************************************************************************************************
changed: [10.0.0.112]
TASK [PATH variable] *************************************************************************************************************************************
ok: [10.0.0.112]
TASK [enable service] ************************************************************************************************************************************
changed: [10.0.0.112]
TASK [change password] ***********************************************************************************************************************************
changed: [10.0.0.112]
PLAY RECAP ***********************************************************************************************************************************************
10.0.0.112 : ok=11 changed=6 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
# when the configuration file is changed, you can rerun from tags config
[19:13:54 root@centos7 ansible]#ansible-playbook -t config install_mysql8.0-v1.yaml
PLAY [webserver1] ***************************************************************************************************************************************
TASK [config my.cnf] ************************************************************************************************************************************
changed: [10.0.0.112]
RUNNING HANDLER [restart mysqld] ************************************************************************************************************************
changed: [10.0.0.112]
RUNNING HANDLER [notify message] ************************************************************************************************************************
ok: [10.0.0.112] => {
"msg": "mysql is restarted"
}
PLAY RECAP **********************************************************************************************************************************************
10.0.0.112 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
# then check 10.0.0.112 mysql
[19:17:25 root@node1 logbin]#mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.23 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
07:20:55(root@localhost) [(none)]>