首页 > 其他分享 >使用ansible脚本用pt-archiver归档数据

使用ansible脚本用pt-archiver归档数据

时间:2023-12-21 18:15:51浏览次数:42  
标签:xx1 name pt item xx ansible archiver mysql archive

【背景说明】

需要使用ansible来管理删除数据任务,数据量较大,使用pt-archiver工具

【环境说明】

MySQL主从架构+pt-archiver 3.5.5

【剧本说明】


tree roles/archive_mysql/ roles/archive_mysql/ ├── files │ └── percona-toolkit-3.5.5-1.el7.x86_64.rpm pt工具 ├── tasks │ ├── archive_mysql.yml 执行剧本逻辑 │ └── main.yml 调用剧本 └── vars └── main.yml 环境变量
ansble的hosts配置,建议定义一下角色
[mysql]
xx.x.x.xx1 ansible_user=root ansible_ssh_pass=xxxx cluster_role=master
xx.x.x.xx2 ansible_user=root ansible_ssh_pass=xxxx cluster_role=slave
tasks目录脚本
指定需要执行的节点信息,注意标识为master节点
cat roles/archive_mysql/tasks/main.yml --- - name: exec mysql archive include: archive_mysql.yml when: cluster_role == "master" tags: [archive_mysql]

取MySQL主从的主IP,然后使用pt工具执行删除数据操作 cat roles/archive_mysql/tasks/archive_mysql.yml --- - name: copy percona-toolkit rpm package copy: src: ../files/{{ item }} dest: '/tmp/{{ item }}' mode: 0774 with_items: ['percona-toolkit-3.5.5-1.el7.x86_64.rpm'] - name: install percona-toolkit rpm yum: name: '/tmp/{{ item }}' state: present with_items: - percona-toolkit-3.5.5-1.el7.x86_64.rpm - name: kubectl MySQL IP shell: kubectl describe service mysql -n production | grep 'Endpoints:' | awk -F ':' '{print $2}' | tr -d '[:space:]' register: mysql_service_ip - name: print target_database debug: var: mysql_service_ip.stdout - name: Get dbname shell: "/usr/local/mysql/bin/mysql -u {{ mysql_user }} -p{{ mysql_password }} -h {{ mysql_service_ip.stdout }} -P {{ mysql_port }} -e 'SHOW DATABASES LIKE \"{{ data_center }}%_eip\";'" register: query_result changed_when: false - name: Get dbname set_fact: target_database: "{{ item }}" with_items: "{{ query_result.stdout_lines }}" when: item is match('^[a-zA-Z0-9_]+$') - name: print target_database debug: var: target_database - name: Delete data using pt-archiver shell: | pt-archiver --source h={{ mysql_service_ip.stdout }},D={{ target_database }},t={{ item.table_name }},u={{ mysql_user }},p={{ mysql_password }},P={{ mysql_port }} --where="{{ item.where_clause }}" --charset=utf8 --progress 100 --limit=1000 --txn-size {{ batch_size }} --statistics --bulk-delete --purge loop: "{{ tables_to_archive }}" register: delete_output - name: Print several lines of text vars: msg: | {% for item in delete_output.results %} cmd: {{ item.cmd }} archive_results: {% for end_item in item.stdout_lines %} {{ end_item }} {% endfor %} {% endfor %} debug: msg: "{{ msg.split('\n') }}"

 

环境变量定义

添加自己数据库的变量信息,如果是固定数据库IP,自己定义一个数据库IP即可,这里是使用k8s的service方式取到主节点IP
tables_to_archive:这个变量注意定义表名跟条件
cat roles/archive_mysql/vars/main.yml 
---

    mysql_user: read_write
    mysql_password: 'xxxxxx'
    mysql_port: 3306
    data_center: test1
    batch_size: 10000
    tables_to_archive:
      - table_name: sbtest1
        where_clause: "id<40090"
      - table_name: sbtest2
        where_clause: "id<50900"

执行结果

ansible-playbook archive_mysql.yaml 

PLAY [mysql_ms] ***************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************************************************************************************************
ok: [xx.x.x.xx1]
ok: [xx.x.x.xx2]

TASK [archive_mysql : copy percona-toolkit  rpm package] ***************************************************************************************************************************************************************************
skipping: [xx.x.x.xx2] => (item=percona-toolkit-3.5.5-1.el7.x86_64.rpm) 
ok: [xx.x.x.xx1] => (item=percona-toolkit-3.5.5-1.el7.x86_64.rpm)

TASK [archive_mysql : install percona-toolkit rpm] *********************************************************************************************************************************************************************************
skipping: [xx.x.x.xx2] => (item=[]) 
ok: [xx.x.x.xx1] => (item=[u'/tmp/percona-toolkit-3.5.5-1.el7.x86_64.rpm'])

TASK [archive_mysql : kubectl MySQL IP] ********************************************************************************************************************************************************************************************
skipping: [xx.x.x.xx2]
changed: [xx.x.x.xx1]

TASK [archive_mysql : print target_database] ***************************************************************************************************************************************************************************************
ok: [xx.x.x.xx1] => {
    "mysql_service_ip.stdout": "xx.x.x.xx1"
}
skipping: [xx.x.x.xx2]

TASK [archive_mysql : Get dbname] **************************************************************************************************************************************************************************************************
skipping: [xx.x.x.xx2]
ok: [xx.x.x.xx1]

TASK [archive_mysql : Get dbname] **************************************************************************************************************************************************************************************************
skipping: [xx.x.x.xx1] => (item=Database (test1%_eip)) 
ok: [xx.x.x.xx1] => (item=test1_eip)
skipping: [xx.x.x.xx2]

TASK [archive_mysql : print target_database] ***************************************************************************************************************************************************************************************
ok: [xx.x.x.xx1] => {
    "target_database": "test1_eip"
}
skipping: [xx.x.x.xx2]

TASK [archive_mysql : Delete data using pt-archiver] *******************************************************************************************************************************************************************************
skipping: [xx.x.x.xx2] => (item={u'table_name': u'sbtest1', u'where_clause': u'id<40090'}) 
skipping: [xx.x.x.xx2] => (item={u'table_name': u'sbtest2', u'where_clause': u'id<50900'}) 
changed: [xx.x.x.xx1] => (item={u'table_name': u'sbtest1', u'where_clause': u'id<40090'})
changed: [xx.x.x.xx1] => (item={u'table_name': u'sbtest2', u'where_clause': u'id<50900'})

TASK [archive_mysql : Print several lines of text] *********************************************************************************************************************************************************************************
ok: [xx.x.x.xx1] => {
    "msg": [
        "cmd: pt-archiver --source h=xx.x.x.xx1,D=test1_eip,t=sbtest1,u=read_write,p=xxxxxx,P=3306 --where=\"id<40090\" --charset=utf8 --progress 100 --limit=1000 --txn-size 10000 --statistics   --bulk-delete --purge", 
        "", 
        "archive_results:", 
        "                      TIME                ELAPSED   COUNT", 
        "                      2023-12-21T17:26:37       0       0", 
        "                      2023-12-21T17:26:37       0     100", 
......省略
        "                      2023-12-21T17:26:38       1   29500", 
        "                      2023-12-21T17:26:38       1   29507", 
        "                      Started at 2023-12-21T17:26:37, ended at 2023-12-21T17:26:38", 
        "                      Source: A=utf8,D=test1_eip,P=3306,h=xx.x.x.xx1,p=...,t=sbtest1,u=read_write", 
        "                      SELECT 29507", 
        "                      INSERT 0", 
        "                      DELETE 29507", 
        "                      Action             Count       Time        Pct", 
        "                      bulk_deleting         30     0.7110      47.36", 
        "                      select                31     0.0785       5.23", 
        "                      commit                 3     0.0576       3.83", 
        "                      other                  0     0.6542      43.58", 
        "            ", 
        "cmd: pt-archiver --source h=xx.x.x.xx1,D=test1_eip,t=sbtest2,u=read_write,p=xxxxxx,P=3306 --where=\"id<50900\" --charset=utf8 --progress 100 --limit=1000 --txn-size 10000 --statistics   --bulk-delete --purge", 
        "", 
        "archive_results:", 
        "                      TIME                ELAPSED   COUNT", 
        "                      2023-12-21T17:26:39       0       0", 
        "                      2023-12-21T17:26:39       0     100", 
        "                      2023-12-21T17:26:39       0     200", 
        "                      2023-12-21T17:26:39       0     300", 
......省略
        "                      2023-12-21T17:26:41       1   37607", 
        "                      Started at 2023-12-21T17:26:39, ended at 2023-12-21T17:26:41", 
        "                      Source: A=utf8,D=test1_eip,P=3306,h=xx.x.x.xx1,p=...,t=sbtest2,u=read_write", 
        "                      SELECT 37607", 
        "                      INSERT 0", 
        "                      DELETE 37607", 
        "                      Action             Count       Time        Pct", 
        "                      bulk_deleting         38     0.8458      46.27", 
        "                      commit                 4     0.1391       7.61", 
        "                      select                39     0.0874       4.78", 
        "                      other                  0     0.7557      41.34", 
        "            ", 
        ""
    ]
}
skipping: [xx.x.x.xx2]

PLAY RECAP ********************************************************************************************************************************************************************************************************************************
xx.x.x.xx1                 : ok=10   changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
xx.x.x.xx2                 : ok=1    changed=0    unreachable=0    failed=0    skipped=9    rescued=0    ignored=0   

 

标签:xx1,name,pt,item,xx,ansible,archiver,mysql,archive
From: https://www.cnblogs.com/zetanchen/p/17919767.html

相关文章

  • JavaScript 数组方法重写
    constlist=[1,2,3]Array.prototype.myForeach=function(fn){for(leti=0;i<this.length;i++){fn(this[i],i,this)}}Array.prototype.myMap=function(fn){const_list=[]for(leti=0;i<this.length;i......
  • 文心一言 VS 讯飞星火 VS chatgpt (161)-- 算法导论13.1 1题
    一、用go语言,按照图13-1(a)的方式,画出在关键字集合(1,2,…,15)上高度为3的完全二叉搜索树。以三种不同方式向图中加入NIL叶结点并对各结点着色,使所得的红黑树的黑高分别为2、3和4。文心一言:首先,我们需要明确什么是完全二叉搜索树(CompleteBinarySearchTree,CBST)和红黑树(Red......
  • 大模型微调方法总结:LoRA、Adapter、Prefix-tuning、P-tuning、Prompt-tuning
    随着深度学习技术的不断发展,大型预训练模型已成为许多任务的重要工具。然而,微调(finetuning)这些大模型以适应特定任务是一个复杂且计算密集型的过程。本文将重点介绍五种不同的微调方法:LoRA、Adapter、Prefix-tuning、P-tuning和Prompt-tuning,并对它们进行总结。LoRA(LearnedRepre......
  • [转]CryptoJS-中文文档
    原文地址:CryptoJS-中文文档-掘金原始文档:code.google.com/archive/p/c…介绍CryptoJS是一个JavaScript的加解密的工具包。它支持多种算法:MD5、SHA1、SHA2、SHA3、RIPEMD-160的哈希散列,以及进行AES、DES、Rabbit、RC4、TripleDES加解密。散列算法MD5MD5是一种广泛使......
  • Capture a TCP dump from a Linux node in an AKS cluster
    https://learn.microsoft.com/en-us/troubleshoot/azure/azure-kubernetes/capture-tcp-dump-linux-node-akshttps://learn.microsoft.com/en-us/azure/aks/node-access#create-an-interactive-shell-connection-to-a-linux-nodekubectlgetnodes-owidekubectldebugno......
  • 使用思维链写Prompt
    思维链(CoT),即ChainofThought,是一种解决问题的方法,这种方法涉及逐步、逻辑地思考问题,以便更好地理解和解决它。例如,当一个大型语言模型(比如GPT-3或GPT-4)面对一个复杂问题时,它不仅仅给出答案,还能展示出达到这个答案的思维过程。这个过程可能包括定义问题、分解问题、逐步解决子问......
  • 算法设计与分析PTA考试(周六考研版)
    7-1递归二路归并排序题目本题目要求读入N个整数,采用递归的二路归并排序法进行排序,输出前3轮排序后的结果。输入格式输入不超过100的正整数N和N个整数(空格分隔)。输出格式输出三行,第一行为第一轮排序结果,第二行为第二轮排序结果,第三行为第三轮排序结果。数据间用一个空格......
  • WepApi TaskCanceledException A任务已取消--async+await的方案替代task.Wait()可有效
     在.netCore中httpClient添加配置超时时长也没用services.AddHttpClient("PPHttpClient",config=>{config.DefaultRequestHeaders.Add("Accept","*/*");config.DefaultRequestHeaders.Add("A......
  • 从 ECMAScript 6 角度谈谈执行上下文
    大家好,我是归思君起因是最近了解JS执行上下文的时候,发现很多书籍和资料,包括《JavaScript高级程序设计》、《JavaScript权威指南》和网上的一些博客专栏,都是从ES3角度来谈执行上下文,用ES6规范解读的比较少,所以想从ES6的角度看一下执行上下文。下面我尝试用ECMAScript6规范文......
  • 解读 | GPT-4突然“变赖“ 是莫名其妙还是另有玄机
    大家好,我是极智视界,欢迎关注我的公众号,获取我的更多前沿科技分享事情是这样的,很多用户反映在11月6日OpenAI开发者日更新之后,GPT-4就有了"偷懒"的毛病,特别是在代码任务,OpenAI对此的声明有两个基调:第一个是"否认",称自11月11日以来,"咱"就没更新过模型呀,那这当然不是"......