利用 absible 的事务完成 MySQL 的数据迁移

简介

问题描述:使用 ansible 进行自动化时,如果任务集的任务失败,尽心回滚,尽量保证一个干净的环境
如何解决:使用 block 和 resce 块

playbook

---

- name: 安装 MySQL 并修改数据目录
  hosts: all
  become: yes
  tasks:
    - block:
        - name: 更新 apt 缓存
          apt:
            update_cache: yes
            cache_valid_time: 3600

        - name: 安装 rsync
          apt:
            name: rsync
            state: present

        - name: 停止 MySQL 服务
          service:
            name: mysql
            state: stopped

        - name: 创建新的数据目录
          file:
            path: "{{ ansible_env.HOME }}/mysql/data"
            state: directory
            owner: mysql
            group: mysql
            mode: '0755'

        - name: 修改 MySQL 配置文件以使用新的数据目录
          lineinfile:
            path: /etc/mysql/my.cnf
            regexp: '^(datadir|\\[mysqld\\])'
            line: |
              [mysqld]
              datadir = {{ ansible_env.HOME }}/mysql/data
            backup: yes
            insertafter: '[mysqld]'


        - name: 将 MySQL 数据迁移到新目录
          command: >
            rsync -av /var/lib/mysql/ {{ ansible_env.HOME }}/mysql/data/
          become: yes

        - name: 修正新目录的权限
          file:
            path: "{{ ansible_env.HOME }}/mysql/data"
            owner: mysql
            group: mysql
            recurse: yes

        - name: 启动 MySQL 服务
          service:
            name: mysql
            state: started

        - name: 验证 MySQL 数据目录
          command: mysql -e "SHOW VARIABLES LIKE 'datadir';"
          register: mysql_datadir

        - name: 输出 MySQL 数据目录
          debug:
            msg: "MySQL 数据目录为: {{ mysql_datadir.stdout }}"

      rescue:
        - name: 删除新的数据目录
          file:
            path: "{{ ansible_env.HOME }}/mysql/data"
            state: absent

        - name: 恢复 MySQL 服务
          service:
            name: mysql
            state: started

        - name: 输出错误信息
          debug:
            msg: "安装过程出错,已删除新数据目录并恢复 MySQL 服务。"

仓库代码

GitCode - 全球开发者的开源社区,开源代码托管平台

参考

https://galaxy.ansible.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值