首页 > 数据库 >MySQL核心业务大表归档过程

MySQL核心业务大表归档过程

时间:2024-11-06 14:32:07浏览次数:1  
标签:pt 删除 -- MySQL 归档 op id 大表

      记录一下2年前的MySQL大表的归档,当时刚到公司,发现MySQL的业务核心库,超过亿条的有7张表,最大的表有9亿多条,有37张表超过5百万条,部分表行数如下:

       

      在测试的MySQL环境  :

      pt-archiver 工具,测试200的dev实例,5800万条数据,纯删除1000万条数据,花费约9分多钟。  

  pt-archiver --source h=172.17.0.1,u=dev_op,p='pwd',P=3306,D=test,t=cc  --statistics --no-check-charset --where " id<=13000000" --limit 60000   --commit-each 
--progress 1000000 --bulk-delete --primary-key-only --purge

    和研发,产品讨论如何删除这些大表的没用的数据,确定后,是删除部分没有续约和不合作客户的数据,这些企业的id,由产品部门确认后,给了给列表。

 查询后,这些大表都有比较大的数据行数删除,最大的9亿多条表可以删除出2.3亿条数据,如何备份和删除这2.3亿条数据?

      1,使用腾讯云的数据迁移工具,把整个表备份后,通过pt-archiver 工具删除。 大表不适用

     这样备份可以批量进行,删除可以慢慢删除,小表备份可以,但是对于大表,就多备份了6,7亿条数据。占用空间

      2,可以使用mysqldump工具通过查询备份删除的数据,在通过pt-archiver 工具删除。 小表不适用

     千万级别以下小表就比较麻烦。对于亿级别以上的大表就比较好,如下:    

-- 导出单表
mysqldump -udba_op -p'pwd'  -h172.17.16.126 -P3306 --set-gtid-purged=OFF -t --default-character-set=utf8mb4  --skip-lock-tables  de_db  exam_detail  --where=" exam_id in (select exam_id from  exam   where app_id in (select app_id from bak.t_app_2022)) " >/data1/ex.sql

-- 在备份MySQL还原
source /data1/ex.sql

   pt-archiver删除数据:

   例子: -从库4和5延迟30秒,暂停停止删除   

pt-archiver --source h=172.17.16.12,u=dba_op,p='pwd',P=3306,D=de_db,t=user_detail  --statistics --no-check-charset --where " exam_id in (select exam_id from  exam   where app_id in ('gzdsl'))" --limit 100000  --max-lag=30 --check-slave-lag  u=dba_op,p='pwd',h=172.17.16.106,P=3306 --check-slave-lag  u=dba_op,p='pwd',h=172.17.16.4,P=3306 --commit-each --progress 3000000 --bulk-delete --primary-key-only --purge
--primary-key-only  指定进行DELETE清除时最有效,因为只需读取主键一个字段而无需读取行所有字段
--purge 指定执行的删除操作
--limit 100000 每次删除10万行,可以根据情况调整
--dry-run 打印查询需要清除数据的执行语句,做好确认之后再执行

最后处理:

 1,对于9亿条的数据,修改pt脚本,确定执行最长时间--run-time和延迟时间20秒,减少对系统的影响,类似修改如下:
pt-archiver --source h=172.17.16.12,u=dba_op,p='pwd',P=3306,D=de_db,t=gp_mem  --statistics --no-check-charset --where " sys_user_id in  (select sys_user_id from db_bak.t1)  " --limit 200000  --max-lag=20 --check-slave-lag  u=dba_op,p='pwd',h=172.17.16.106,P=3306  --commit-each --progress 3000000 --bulk-delete --primary-key-only --run-time=100m  --purge

        2,每个表写一个shell文件,调度执行

        3,删除完成后,重建表释放表的空间      

pt-online-schema-change  --alter " engine=innodb  " h=172.17.16.78,P=3306,p='pwd',u=dev_op,D=sg_bak,t=user_detail --charset=utf8mb4 --no-check-replication-filters --recursion-method=none --execute

 

标签:pt,删除,--,MySQL,归档,op,id,大表
From: https://www.cnblogs.com/zping/p/18529529

相关文章

  • Mysql:常见问题
    字段越多,查询越慢吗?为什么字段越多,查询通常会变慢。具体原因涉及数据库内部的一些机制:数据读取:每个查询都需要从硬盘或者内存中读取数据。字段越多,每行的数据量越大,意味着更多的数据需要被读取到内存中进行处理。这增加了IO操作次数和时间。内存使用:字段越多,查询的结果集......
  • MySQL 索引的底层实现原理与优化策略
    在数据库中,索引是提升查询性能的关键工具。MySQL中的索引机制可以显著加快数据检索速度,尤其在数据量庞大的情况下,合理使用索引可以使得原本耗时的操作变得高效。然而,滥用或错误地使用索引也可能对性能产生负面影响。本文将深入探讨MySQL索引的底层实现原理、常用类型及其......
  • 实践中如何优化 MySQL:深入剖析与策略分享
    MySQL作为一款广泛应用的关系型数据库管理系统,在企业级应用和互联网服务中扮演着重要的角色。然而,随着业务规模的增长和数据量的增加,如何有效地优化MySQL性能,确保系统在高并发、大数据量的环境下仍能高效运行,成为开发者和数据库管理员的重要课题。本文将深入探讨MySQL......
  • 150道MySQL高频面试题,学完吊打面试官--InnoDB索引与MyISAM索引实现的区别+一个表中如
    前言本专栏为150道MySQL大厂高频面试题讲解分析,这些面试题都是通过MySQL8.0官方文档和阿里巴巴官方手册还有一些大厂面试官提供的资料。MySQL应用广泛,在多个开发语言中都处于重要地位,所以最好都要掌握MySQL的精华面试题,这也是面试官最喜欢问的,现在面试官在面试的时候更关......
  • 用pymysql实现对数据库的增删改查
    importpymysqlconnection=pymysql.connect(host='localhost',port=3306,database='your_database',user='your_user',password='your_password',charset='utf8',)#获取游标cursor=connection.cur......
  • MySQL执行语句之后navicate一直正在执行中且无法关闭
    分析:navicate里边超过1000S基本可以断定语句已失去连接。可能原因为:1.数据量过大,语句无法执行。2.数据库资源不足。查看思路:1.查看正在执行的进程:--查询进程SELECT*frominformation_schema.PROCESSLISTWHEREcommand!='sleep'ORDERBYinfodesc;正在执行的进程中......
  • Sql(MySQL事务四大特性、事务隔离级别)
    Sql(MySQL事务四大特性、事务隔离级别)文章目录Sql(MySQL事务四大特性、事务隔离级别)1.事务的特性2.事务隔离级别2.1幻读2.2处理幻读问题2.3死锁问题2.4隔离级别相关命令1.事务的特性MySQL事务有四大特性。原子性(atomicity):一个事务必须是一个不可分割的最......
  • 解决mysql 的 [HY000][1356] View ‘information_schema.TABLES‘ references invalid
    同事在修改mysql用户权限时修改了关于mysql.infoschema的权限信息,导致无法访问information_schema库下的所有视图,使用数据库连接工具连接MySQL数据库时出现报错情况,使用MySQL终端登录并执行show命令同样报错。报错信息如下:ERROR1356(HY000):View'information_s......
  • mysql SQLSTATE[HY000] [1045] Access denied for user
    错误解析错误代码:SQLSTATE[HY000][1045]错误信息:Accessdeniedforuser‘root’@‘localhost’(usingpassword:YES)可能的原因密码错误:尽管重置了密码,但可能在连接数据库的代码中没有更新新的密码。用户权限问题:root用户可能没有从localhost或127.0.0.1访问数据库的......
  • php购物商城在线购物系统php毕业设计php课程设计毕设指导计算机源码获取php源码获取电
    风筝一,功能介绍PHP➕MySQL前台功能:登录:用户可以通过输入用户名和密码进行身份验证,登录成功后进入个人中心页面,享受个性化服务。注册:新用户可以通过填写必要信息(如用户名、密码、邮箱等)完成注册,注册成功后即可登录并开始使用平台服务。轮播图:首页展示一系列动态轮播图,......