Ansible部署MySQL实操

一、Ansible概述

Ansible是一款开源的自动化运维工具,由Michael DeHaan于2012年创建,2015年被红帽(Red Hat)收购(收购金额超1亿美元)。它基于Python开发,通过SSH协议实现远程节点管理,无需在被控端安装任何客户端代理(Agentless)。这种设计使其成为轻量级、易部署的自动化解决方案,特别适合批量系统配置、应用程序部署和任务编排等场景。

Ansible部署MySQL实操_第1张图片

核心特点

无代理架构:直接通过SSH管理节点,减少环境复杂性。

声明式语言:使用YAML格式的Playbook描述任务,降低学习成本。

模块化设计:提供超过3000个内置模块(如 copy 、 service ),支持Python扩展自定义模块。

幂等性:同一任务多次执行结果一致,避免意外变更。

一、安装与配置

1. 安装步骤(以CentOS为例)

# 安装EPEL源
yum install epel-release -y 
# 安装Ansible
yum install ansible -y 
# 验证安装
ansible --version 


2. 关键配置

主机清单(/etc/ansible/hosts)
示例配置:

[web_servers]

192.168.95.11 ansible_ssh_port=22 ansible_ssh_user=root

192.168.95.12

[db_servers]

192.168.95.13

[all:vars]

ansible_ssh_private_key_file=/root/.ssh/id_rsa

SSH免密登录设置

ssh-keygen -t rsa -P ""

ssh-copy-id [email protected]  # 向所有节点分发公钥

配置文件(/etc/ansible/ansible.cfg)调优项

forks = 50             # 并发连接数

host_key_checking = False  # 跳过SSH指纹验证

log_path = /var/log/ansible.log

2. Playbook编写示例

---

- name: 部署Web应用

  hosts: web_servers

  vars:

    app_version: "2.0"

  tasks:

    - name: 安装Nginx

      yum: 

        name: nginx 

        state: latest

    

    - name: 复制配置文件

      copy:

        src: templates/nginx.conf.j2 

        dest: /etc/nginx/nginx.conf

        backup: yes

      notify: 重启Nginx  # 触发处理器

    

    - name: 启动服务

      service:

        name: nginx

        state: started

        enabled: yes

  

  handlers:

    - name: 重启Nginx

      service:

        name: nginx

        state: restarted

此Playbook实现了应用部署→配置更新→服务启动的全流程,并包含配置回滚(备份)和服务重启的联动机制。

二、下面开始部署MySQL 5.7

小编我采用MySQL脚本的方式传输到目标主机,并执行此脚本方式,这样配置相对简单且高效

2.1,创建文件

Playbook文件 ( deploy_mysql.yml )

---

- name: 部署MySQL 5.7到目标主机

  hosts: target_server

  become: yes

  vars:

    src_dir: /usr/local/

  tasks:

    - name: 上传MySQL安装脚本

      copy:

        src: mysql5.7.sh

        dest: "{{ src_dir }}/mysql5.7.sh"

        mode: 0755

    - name: 上传MySQL安装包

      copy:

        src: mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz

        dest: "{{ src_dir }}/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz"

    - name: 执行安装脚本

      command: "{{ src_dir }}/mysql5.7.sh"

      args:

        chdir: "{{ src_dir }}"

      async: 600

      poll: 0

2.2,使用方法

创建Inventory文件

创建  hosts.ini  文件:

[target_server]

192.168.1.128

[target_server:vars]

ansible_user=your_username  # 替换为目标主机的用户名

ansible_ssh_private_key_file=~/.ssh/id_rsa  # 替换为SSH密钥路径

ansible_become_password=your_sudo_password  # 若需要sudo密码

2.3,准备文件
确保以下文件与Playbook在同一目录:

 mysql5.7.sh  (MySQL安装脚本)

 mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz  (MySQL二进制包)

2.4,运行Playbook

ansible-playbook -i hosts.ini deploy_mysql.yml

2.5,安装脚本示例 ( mysql5.7.sh )

#!/bin/bash
set -e

SRC_DIR=/usr/local/src
MYSQL_DIR=/usr/local/mysql
DATA_DIR=/data/mysql

# 解压安装包
tar zxvf $SRC_DIR/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
mv /usr/local/mysql-5.7.44-linux-glibc2.12-x86_64 $MYSQL_DIR

# 创建MySQL用户
if ! id mysql &>/dev/null; then
    useradd -M -s /sbin/nologin mysql
fi

# 创建数据目录
mkdir -p $DATA_DIR
chown -R mysql:mysql $DATA_DIR

# 初始化MySQL
$MYSQL_DIR/bin/mysqld --initialize-insecure --user=mysql --basedir=$MYSQL_DIR --datadir=$DATA_DIR

# 创建配置文件
cat > /etc/my.cnf < [mysqld]
basedir = $MYSQL_DIR
datadir = $DATA_DIR
port = 3306
socket = /tmp/mysql.sock
EOF

# 创建systemd服务
cat > /etc/systemd/system/mysqld.service < [Unit]
Description=MySQL Server
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=$MYSQL_DIR/bin/mysqld --defaults-file=/etc/my.cnf
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

# 启动MySQL
systemctl daemon-reload
systemctl enable mysqld
systemctl start mysqld

echo "MySQL 5.7 安装完成!"

注意事项

脚本权限:

确保  mysql5.7.sh  有可执行权限 ( chmod +x mysql5.7.sh )

重要安全提示:

初始化命令  --initialize-insecure  会创建空密码的root账户

生产环境必须 在安装后运行  mysql_secure_installation 

自定义调整:

修改  DATA_DIR  变量指定数据存储位置

在  my.cnf  中添加额外配置参数

总结:根据实际情况调整参数,免密配置,目标主机配置,编排配置,最后运行等待安装完成

你可能感兴趣的:(运维,mysql,ansible,mysql)