ansible自动化部署mysql主从部署剧本

在这个剧本中,我们首先使用yum模块安装mysql-server软件包,并将结果记录在变量result中。然后,我们使用debug模块输出安装结果。接下来,我们使用service模块启动MySQL服务,并将结果记录在service_result变量中。如果MySQL服务被启动,我们将使用debug模块输出“MySQL服务已启动”的消息,否则我们将输出“MySQL服务已安装,并已启动”的消息。接下来,我们使用mysql_user模块设置MySQL root用户的密码,并使用mysql_query模块获取主服务器的server_id。然后,我们使用mysql_user模块配置主从复制的repl用户,并使用mysql_replication模块对从服务器进行配置。最后,我们使用mysql_query模块获取主服务器的binlog文件和位置,并使用mysql_query模块获取从服务器的复制状态信息。

需要注意以下几点:

在剧本中使用了变量mysql_root_password和mysql_repl_password,请根据实际情况修改这些变量的值。
剧本中使用了mysql_user模块和mysql_replication模块,请确保已经安装了MySQL官方的Python驱动程序(python3-mysql或python2-mysql)。
在剧本中使用了when语句来进行条件判断,以便只在必要时才执行任务。
剧本中使用了register关键字来将结果存储在变量中,以便后续操作使用。
请确保您的目标服务器已正确配置SSH访问权限。

---
- name: 安装MySQL和主从复制配置
  hosts: db_servers
  become: true

  vars:
    mysql_root_password: your_password_here
    mysql_repl_password: your_password_here

  tasks:
    - name: 安装MySQL
      yum:
        name: mysql-server
        state: present
      register: result

    - name: 输出安装结果信息
      debug:
        msg: "{{ result.stdout_lines }}"

    - name: 启动MySQL服务
      service:
        name: mysqld
        state: started
        enabled: true
      when: result.changed
      register: service_result

    - name: 输出启动结果信息
      debug:
        msg: "MySQL服务已启动"
      when: service_result.changed

    - name: 输出不需要启动信息
      debug:
        msg: "MySQL服务已安装,并已启动"
      when: not service_result.changed

    - name: 设置MySQL root密码
      mysql_user:
        login_password: ""
        user: root
        password: "{{ mysql_root_password }}"
        host_all: yes
      when: result.changed

    - name: 获取master服务器id
      mysql_query:
        login_user: root
        login_password: "{{ mysql_root_password }}"
        query: "show global variables like 'server_id'"
      register: get_server_id
      when: result.changed

    - name: 配置master服务器
      mysql_user:
        login_user: root
        login_password: "{{ mysql_root_password }}"
        login_host: "{{ inventory_hostname }}"
        login_port: 3306
        user: repl
        password: "{{ mysql_repl_password }}"
        priv: "*.*: REPLICATION SLAVE"
        state: present
        host_all: yes
      when: result.changed

    - name: 输出配置完成信息
      debug:
        msg: "MySQL主服务器已配置"

    - name: 暂停slave服务器
      mysql_replication:
        login_user: root
        login_password: "{{ mysql_root_password }}"
        mode: pause
      when: result.changed

    - name: 获取slave服务器id
      mysql_query:
        login_user: root
        login_password: "{{ mysql_root_password }}"
        query: "show global variables like 'server_id'"
      register: get_slave_server_id
      when: result.changed

    - name: 配置slave服务器
      mysql_replication:
        login_user: root
        login_password: "{{ mysql_root_password }}"
        master_host: "{{ master_host }}"
        master_port: 3306
        master_user: repl
        master_password: "{{ mysql_repl_password }}"
        mode: changemaster
        master_log_file: "{{ mysql_master_log_file.stdout_lines[0] }}"
        master_log_pos: "{{ mysql_master_log_pos.stdout_lines[0] }}"
      when: result.changed

    - name: 启动slave服务器
      mysql_replication:
        login_user: root
        login_password: "{{ mysql_root_password }}"
        mode: start
      when: result.changed

    - name: 输出配置完成信息
      debug:
        msg: "MySQL从服务器已配置"

    - name: 获取master服务器binlog文件和位置
      mysql_query:
        login_user: root
        login_password: "{{ mysql_root_password }}"
        query: "show master status"
      register: mysql_master_status
      when: result.changed

    - name: 输出master服务器binlog文件和位置信息
      debug:
        msg: "MySQL master服务器 binlog 文件为 {{ mysql_master_status.stdout_lines[0].split('\t')[0] }}, 位置为 {{ mysql_master_status.stdout_lines[0].split('\t')[1] }}"

    - name: 获取slave服务器复制状态
      mysql_query:
        login_user: root
        login_password: "{{ mysql_root_password }}"
        query: "show slave status"
      register: mysql_slave_status
      when: result.changed

    - name: 输出slave服务器复制状态
      debug:
        msg: "MySQL从服务器复制状态为 {{ mysql_slave_status.stdout_lines[0].split('\t')[10] }}"

    - name: 恢复slave服务器
      mysql_replication:
        login_user: root
        login_password: "{{ mysql_root_password }}"
        mode: resume
      when: result.changed
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值