利用playbook安装mysql
下载mysql-5.6.49-linux-glibc2.12到ansible所在的服务器上
https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.6/mysql-5.6.49-linux-glibc2.12-x86_64.tar.gz
下载并移动到指定目录下
[root@myserver_1 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.6/mysql-5.6.49-linux-glibc2.12-x86_64.tar.gz
--2021-01-04 00:12:08-- https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.6/mysql-5.6.49-linux-glibc2.12-x86_64.tar.gz
Resolving mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 101.6.8.193, 2402:f000:1:408:8100::1
Connecting to mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.8.193|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 343184888 (327M) [application/x-gzip]
Saving to: ‘mysql-5.6.49-linux-glibc2.12-x86_64.tar.gz’
100%[===================================================>] 343,184,888 10.0MB/s in 30s
2021-01-04 00:12:39 (10.8 MB/s) - ‘mysql-5.6.49-linux-glibc2.12-x86_64.tar.gz’ saved [343184888/343184888]
[root@myserver_1 ~]# ls -lrt
total 392360
-rw-r--r-- 1 root root 28296 Jan 10 2018 percona-zabbix-templates-1.1.8-1.noarch.rpm
-rw-r--r-- 1 root root 58546654 Aug 15 2019 grafana-6.3.3-1.x86_64.rpm
-rw-r--r-- 1 root root 343184888 Jun 2 2020 mysql-5.6.49-linux-glibc2.12-x86_64.tar.gz
-rw-------. 1 root root 2246 Dec 23 22:08 anaconda-ks.cfg
-rw-r--r--. 1 root root 2277 Dec 23 22:11 initial-setup-ks.cfg
drwxr-xr-x 2 root root 70 Jan 3 23:28 ansible
[root@myserver_1 ansible]# mkdir -p /data/ansible/files
[root@myserver_1 ansible]# cd /data/ansible/files/
[root@myserver_1 files]# mv mysql-5.6.49-linux-glibc2.12-x86_64.tar.gz /data/ansible/files
添加两个配置文件(mysql的配置文件设置)
[root@myserver_1 files]# vim my.cnf
[mysqld]
socket=/tmp/mysql.sock
user=mysql
symbolic-links=0
datadir=/data/mysql
innodb_file_per_table=1
log-bin
pid-file=/data/mysql/mysqld.pid
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld_safe]
log-error=/var/log/mysqld.log
mysql安全加固设置
[root@myserver_1 files]# vim secure_mysql.sh
#!/bin/bash
/usr/local/mysql/bin/mysql_secure_installation <
目录结构如下
[root@myserver_1 files]# tree
.
├── my.cnf
├── mysql-5.6.49-linux-glibc2.12-x86_64.tar.gz
└── secure_mysql.sh
0 directories, 3 files
编辑安装mysql的yml文件
[root@myserver_1 files]# vim /root/ansible/install_mysql.yml
- hosts: dbsrvs
remote_user: root
gather_facts: no
tasks:
- name: install packages
yum: name=libaio,perl-Data-Dumper,perl-Getopt-Long
- 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-5.6.46-linux-glibc2.12-x86_64.tar.gz dest=/usr/local/ owner=root group=root
- name: create linkfile /usr/local/mysql
file: src=/usr/local/mysql-5.6.46-linux-glibc2.12-x86_64 dest=/usr/local/mysql state=link
- name: data dir
shell: chdir=/usr/local/mysql/ ./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
tags: data
- name: config my.cnf
copy: src=/data/ansible/files/my.cnf dest=/etc/my.cnf
- name: service script
shell: /bin/cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
- name: enable service
shell: /etc/init.d/mysqld start;chkconfig --add mysqld;chkconfig mysqld on
tags: service
- name: PATH variable
copy: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh
- name: secure script
script: /data/ansible/files/secure_mysql.sh
tags: script
检测语法的正确性(会有报错,因为检测语句不会执行解压,会报mysql的解压后的那个路径存在的问题 可忽略)
[root@myserver_1 ansible]# ansible-playbook -C install_mysql.yml
执行playbook结果如下(有报错信息)
[root@myserver_1 ansible]# ansible-playbook install_mysql.yml
PLAY [dbservers] ********************************************************************************************************************************************
TASK [install packages] *************************************************************************************************************************************
ok: [192.168.1.40]
TASK [create mysql group] ***********************************************************************************************************************************
ok: [192.168.1.40]
TASK [create mysql user] ************************************************************************************************************************************
ok: [192.168.1.40]
TASK [copy tar to remote host and file mode] ****************************************************************************************************************
ok: [192.168.1.40]
TASK [create linkfile /usr/local/mysql] ********************************************************************************************************************
ok: [192.168.1.40]
TASK [data dir] *********************************************************************************************************************************************
fatal: [192.168.1.40]: FAILED! => {"changed": true, "cmd": "./scripts/mysql_install_db --datadir=/data/mysql --user=mysql", "delta": "0:00:00.030984", "end": "2021-01-04 01:13:43.883524", "msg": "non-zero return code", "rc": 1, "start": "2021-01-04 01:13:43.852540", "stderr": "", "stderr_lines": [], "stdout": "FATAL ERROR: The parent directory for the data directory '/data/mysql' does not exist.\nIf that path was really intended, please create that directory path and then\nrestart this script.\nIf some other path was intended, please use the correct path when restarting this script.", "stdout_lines": ["FATAL ERROR: The parent directory for the data directory '/data/mysql' does not exist.", "If that path was really intended, please create that directory path and then", "restart this script.", "If some other path was intended, please use the correct path when restarting this script."]}
PLAY RECAP **************************************************************************************************************************************************
192.168.1.40 : ok=5 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
根据报错信息提示远程主机目录(/data)不存在,创建即可
执行结果验证如下
[root@myserver_1 ansible]# ansible-playbook install_mysql.yml
PLAY [dbservers] ********************************************************************************************************************************************
TASK [install packages] *************************************************************************************************************************************
ok: [192.168.1.40]
TASK [create mysql group] ***********************************************************************************************************************************
ok: [192.168.1.40]
TASK [create mysql user] ************************************************************************************************************************************
ok: [192.168.1.40]
TASK [copy tar to remote host and file mode] ****************************************************************************************************************
ok: [192.168.1.40]
TASK [create linkfile /usr/local/mysql] ********************************************************************************************************************
ok: [192.168.1.40]
TASK [data dir] *********************************************************************************************************************************************
changed: [192.168.1.40]
TASK [config my.cnf] ****************************************************************************************************************************************
changed: [192.168.1.40]
TASK [service script] ***************************************************************************************************************************************
changed: [192.168.1.40]
TASK [enable service] ***************************************************************************************************************************************
changed: [192.168.1.40]
TASK [PATH variable] ****************************************************************************************************************************************
changed: [192.168.1.40]
TASK [secure script] ****************************************************************************************************************************************
changed: [192.168.1.40]
PLAY RECAP **************************************************************************************************************************************************
192.168.1.40 : ok=11 changed=6 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
验证mysql是否在远程主机上安装成功
[root@myserver_3 ~]# mysql -uroot -ptest123
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 14
Server version: 5.6.49-log MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
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.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
mysql> select version();
+------------+
| version() |
+------------+
| 5.6.49-log |
+------------+
1 row in set (0.00 sec)
mysql>