通过ansible-playbook,以二进制包方式批量部署mysql。
- 将所有部署mysql主机分为dbserver组:
# vim /etc/ansible/hosts
[dbserver]
192.168.30.128
192.168.30.129
192.168.30.130
- 创建管理目录:
# mkdir -p mysql/roles/mysql_install/{files,handlers,meta,tasks,templates,vars}
# cd mysql/
说明:
files:存放需要同步到异地服务器的源码文件及配置文件;
handlers:当资源发生变化时需要进行的操作,若没有此目录可以不建或为空;
meta:存放说明信息、说明角色依赖等信息,可留空;
tasks:mysql安装过程成需要进行的执行的任务;
templates:用于执行mysql安装的模板文件,一般为脚本;
vars:本次安装定义的变量
# tree .
.
├── mysql.yml
└── roles
└── mysql_install
├── files
│ └── mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz #可提前下载好mysql包放到files下
├── handlers
├── meta
├── tasks
│ ├── copy.yml
│ ├── install.yml
│ ├── main.yaml
│ └── prepare.yml
├── templates
│ ├── change_passwd.sh
│ ├── my.cnf
│ └── mysqld.service
└── vars
└── main.yml
8 directories, 10 files
- 创建mysql入口文件,用来调用mysql_install:
# vim mysql.yml
#用于批量安装MySQL
---
- hosts: dbserver
remote_user: root
gather_facts: True
roles:
- mysql_install
- 创建变量:
# vim roles/mysql_install/vars/main.yml
#定义mysql安装中的变量
MYSQL_VER: 5.7.25
MYSQL_VER_MAIN: "{
{ MYSQL_VER.split('.')[0] }}.{
{ MYSQL_VER.split('.')[1] }}"
DOWNLOAD_URL: https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-{
{
MYSQL_VER_MAIN }}/mysql-{
{
MYSQL_VER }}-linux-glibc2.12-x86_64.tar.gz
MYSQL_USER: mysql
MYSQL_PORT: 3306
MYSQL_PASSWD: 123456789
SOURCE_DIR: /software
BASE_DIR: /usr/local/mysql
DATA_DIR: /data/mysql
- 创建模板文件:
mysql配置文件
# vim roles/mysql_install/templates/my.cnf
[client]
port = {
{
MYSQL_PORT }}
socket = {
{
BASE_DIR }}/tmp/mysql.sock
[mysql]
default-character-set=utf8
[mysqld]
default-storage-engine=INNODB
character_set_server=utf8
explicit_defaults_for_timestamp
basedir={
{
BASE_DIR }}
datadir={
{
DATA_DIR }}
socket={
{
BASE_DIR }}/tmp/mysql.sock
log_error = {
{
BASE_DIR }}/log/error.log
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
mysql服务文件
# vim roles/mysql_install/templates/mysqld.service
[Unit]
Description=MySQL Server
After=network.target
After=