0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

优化企业数据处理效能:MySQL在大规模应用中的顶尖实践与案例分析

马哥Linux运维 来源:马哥Linux运维 2025-02-10 11:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1.企业故障恢复案例

背景:
正在运行的网站系统,MySQL数据库,数据量25G,日业务增量10-15M。

备份策略:
每天23:00,计划任务调用mysqldump执行全备脚本

故障时间点:
上午10点开发人员误删除一个核心业务表,如何恢复?

思路:

1)停业务避免数据的二次伤害
2)找一个临时的库,恢复前一天的全备
3)截取前一天23:00到第二天10点误删除之间的binlog,恢复到临时库
4)测试可用性和完整性
5)开启业务前的两种方式

a.直接使用临时库顶替原生产库,前端应用割接到新库
b.将误删除的表单独导出,然后导入到原生产环境

6)开启业务

模拟数据

#!/bin/bash

num=1
while true;do
  mysql -uroot -p123 -e "insert into proc.proc1 value($num);commit;"
  (( num++ ))
  sleep 1
done

备份

[root@db02 ~]# mysqldump -A -R --triggers --master-data=2 --single-transaction|gzip > /tmp/full_$(date +%F).sql.gz

模拟误删除数据

mysql> drop table proc.proc;

恢复思路

1)停业务避免数据的二次伤害
[root@db02 ~]# /etc/init.d/mysqld stop


2) 准备新环境
[root@m01 scripts]# ./mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/application/mysql/data
[root@m01 scripts]# /etc/init.d/mysqld start

3)找一个临时的库,恢复前一天的全备
[root@db02 ~]# scp /tmp/full_2022-08-19.sql.gz 172.16.1.61:/tmp/
[root@m01 scripts]# zcat /tmp/full_2022-08-19.sql.gz |mysql


3)截取前一天23:00到第二天10点误删除之间的binlog,恢复到临时库
起始位置点:
[root@db02 ~]# zcat /tmp/full_2022-08-19.sql.gz |head -25
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=7138;


结束位置点:42855

第二段起始位置点:42975
第二段结束位置点:58870

[root@db02 ~]# mysqlbinlog  --start-position=7138 --stop-position=42855 /application/mysql/data/mysql-bin.000002 > /tmp/inc1.sql
[root@db02 ~]# mysqlbinlog  --start-position=42975 --stop-position=58870 /application/mysql/data/mysql-bin.000002 > /tmp/inc2.sql
[root@db02 ~]# scp /tmp/inc* 172.16.1.61:/tmp/

4)测试可用性和完整性
5)开启业务前的两种方式
a.直接使用临时库顶替原生产库,前端应用割接到新库
b.将误删除的表单独导出,然后导入到原生产环境
6)开启业务

2.企业级增量恢复实战

背景:
某大型网站,mysql数据库,数据量500G,每日更新量100M-200M

备份策略:
xtrabackup,每周六0:00进行全备,周一到周五及周日00:00进行增量备份。

故障场景:
周三下午2点出现数据库意外删除表操作。

如何恢复???

模拟数据

#!/bin/bash

num=1
while true;do
  mysql -uroot -p123 -e "insert into proc.proc1 value($num);commit;"
  (( num++ ))
  sleep 1
done

备份

## 上周六全备 周六 00点 备周一到周五数据
[root@db02 ~]# innobackupex --user=root --password=123 --no-timestamp /backup/full_$(date +%F)
[root@db02 ~]# cat /backup/full_2022-08-19/xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 2335986976
last_lsn = 2335986976
compact = 0
recover_binlog_info = 0


## 第一次增备 周日的00点  备的周六增量数据  周六00点之后到周日00点之前
[root@db02 ~]# innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir /backup/full_$(date +%F) /backup/inc_6
[root@db02 ~]# cat /backup/inc_6/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 2335986976
to_lsn = 2336208335
last_lsn = 2336223316
compact = 0
recover_binlog_info = 0


## 第二次增备 周一的00点  备的周日增量数据  周日00点之后到周一00点之前
[root@db02 ~]# innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir /backup/inc_6 /backup/inc_7
[root@db02 ~]# cat /backup/inc_7/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 2336208335
to_lsn = 2336236884
last_lsn = 2336249656
compact = 0
recover_binlog_info = 0


## 第三次增备 周二的00点  备的周一增量数据  周一00点之后到周二00点之前
[root@db02 ~]# innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir /backup/inc_7 /backup/inc_1
[root@db02 ~]# cat /backup/inc_1/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 2336236884
to_lsn = 2336264378
last_lsn = 2336264942
compact = 0
recover_binlog_info = 0


## 第四次增备 周三的00点  备的周二增量数据  周二00点之后到周三00点之前
[root@db02 ~]# innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir /backup/inc_1 /backup/inc_2
[root@db02 ~]# cat /backup/inc_2/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 2336264378
to_lsn = 2336273708
last_lsn = 2336273708
compact = 0
recover_binlog_info = 0



## binlog截取 周三00点之后到周三下午14点之间的数据

删除数据

mysql> select * from ts;
+----+------+
| id | A    |
+----+------+
|  1 |  300 |
|  2 |  200 |
+----+------+


mysql> drop table test.ts;

恢复思路

1.停业务,停库
[root@db02 ~]# /etc/init.d/mysqld stop

2.准备新环境

3.清空data目录
[root@db02 ~]# mv /application/mysql/data/ /usr/local/src/

4.重做数据
1)全备只做redo不做undo
[root@db02 ~]# innobackupex --apply-log --redo-only /backup/full_2022-08-19/

2)周六的增量数据合并到full中只做redo不做undo
[root@db02 ~]# innobackupex --apply-log --redo-only --incremental-dir=/backup/inc_6 /backup/full_2022-08-19/

3)周日六的增量数据合并到full中只做redo不做undo
[root@db02 ~]# innobackupex --apply-log --redo-only --incremental-dir=/backup/inc_7 /backup/full_2022-08-19/

4)周一的增量数据合并到full中只做redo不做undo
[root@db02 ~]# innobackupex --apply-log --redo-only --incremental-dir=/backup/inc_1 /backup/full_2022-08-19/

5)周二的增量数据合并到full中redo和undo都做
[root@db02 ~]# innobackupex --apply-log --incremental-dir=/backup/inc_2 /backup/full_2022-08-19/

6)全备整体做一遍redo和undo
[root@db02 ~]# innobackupex --apply-log /backup/full_2022-08-19/

5.恢复数据
[root@db02 ~]# innobackupex --copy-back /backup/full_2022-08-19/

6.授权
[root@db02 ~]# chown -R mysql.mysql /application/mysql/data

7.启动数据库
[root@db02 ~]# /etc/init.d/mysqld start


8.binlog截取 周三00点之后到周三下午14点之间的数据
第一段起始位置点:184023
[root@db02 ~]# cat /backup/full_2022-08-19/xtrabackup_binlog_info 
mysql-bin.000003184023

[root@db02 ~]# mysqlbinlog -vvv --base64-output=decode-row /usr/local/src/data/mysql-bin.000003 |grep -i drop -C 5
第一段结束位置点:200666

第二段起始位置点:200781

[root@db02 ~]# mysqlbinlog -vvv --base64-output=decode-row /usr/local/src/data/mysql-bin.000003
第二段结束位置点:205830


## 截取
[root@db02 ~]# mysqlbinlog --start-position=184023 --stop-position=200666 /usr/local/src/data/mysql-bin.000003 > /tmp/inc_1.sql
[root@db02 ~]# mysqlbinlog --start-position=200781 --stop-position=205830 /usr/local/src/data/mysql-bin.000003 > /t

链接:https://www.cnblogs.com/wangchengww/p/16603009.html

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据处理
    +关注

    关注

    0

    文章

    654

    浏览量

    30078
  • MySQL
    +关注

    关注

    1

    文章

    931

    浏览量

    29748

原文标题:提升企业数据处理能力:MySQL在大规模应用中的最佳实践与案例解析

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    智造引擎,仿真之巅:Altair HyperWorks 重塑工程研发新格局?

    物理场、大规模工程的复杂需求?作为全球领先的企业级有限元分析(CAE)平台,Altair HyperWorks 以全流程集成、顶尖技术与开放架构,成为万千制造
    发表于 04-03 14:45

    高带宽服务器大规模数据传输的优势解析

    影响系统性能的重要因素。 如果服务器带宽不足,就容易出现下载速度慢、视频加载卡顿、数据同步延迟等问题。因此,很多企业开始部署高带宽服务器来满足大规模数据传输需求。本文将详细分析高带宽服
    的头像 发表于 03-11 09:14 432次阅读

    工业数据台支持接入MySQL数据库吗

    工业数据台完全支持接入MySQL数据库 ,且通过数据同步、集成与治理等技术手段,能够充分发挥MySQL
    的头像 发表于 12-04 11:23 507次阅读
    工业<b class='flag-5'>数据</b><b class='flag-5'>中</b>台支持接入<b class='flag-5'>MySQL</b><b class='flag-5'>数据</b>库吗

    MCU数据采集模块的数据处理分析能力如何?

    MCU数据采集模块的数据处理分析能力如何?现代化结构物安全监测领域,MCU数据采集模块扮演着至关重要的角色。它不仅仅是
    的头像 发表于 12-02 16:03 539次阅读
    MCU<b class='flag-5'>数据</b>采集模块的<b class='flag-5'>数据处理</b>和<b class='flag-5'>分析</b>能力如何?

    内存与数据处理优化艺术

    事务数量,更好地利用CPU缓存。测试表明,处理大量数据(如20MB)时,这种优化可能带来数倍的性能提升。
    发表于 11-14 07:46

    弱信号样品比表面与孔径分析数据处理与增强技巧

    比表面与孔径分析,弱信号样品(如低比表面积材料、微量样品或低孔隙率材料)因吸附信号微弱,易被背景干扰掩盖,导致数据精度下降甚至无法准确分析
    的头像 发表于 10-29 09:32 414次阅读
    弱信号样品<b class='flag-5'>在</b>比表面与孔径<b class='flag-5'>分析</b><b class='flag-5'>中</b>的<b class='flag-5'>数据处理</b>与增强技巧

    如何利用 AI 算法优化碳化硅衬底 TTV 厚度测量数据处理

    碳化硅半导体制造,晶圆总厚度变化(TTV)是衡量衬底质量的关键指标。TTV 厚度测量数据处理的准确性直接影响工艺优化与产品良率。然而,测量数据常受环境噪声、设备误
    的头像 发表于 08-25 14:06 761次阅读
    如何利用 AI 算法<b class='flag-5'>优化</b>碳化硅衬底 TTV 厚度测量<b class='flag-5'>数据处理</b>

    PCIe协议分析仪能测试哪些设备?

    场景:监测GPU与主机之间的PCIe通信,分析数据传输效率、延迟和带宽利用率。 应用价值:优化大规模AI训练任务的数据加载和模型参数同步,例
    发表于 07-25 14:09

    MySQL 8.0性能优化实战指南

    作为一名运维工程师,MySQL数据优化是我们日常工作中最具挑战性的任务之一。MySQL 8.0作为当前主流版本,性能、安全性和功能上都有
    的头像 发表于 07-24 11:48 1054次阅读

    电商API的实时数据处理

      现代电商平台中,API(应用程序接口)扮演着核心角色,它连接用户、商家和后台系统,实现数据的高效交换。随着电商业务规模的扩大,实时数据处理变得至关重要——它要求系统
    的头像 发表于 07-23 15:39 696次阅读
    电商API的实时<b class='flag-5'>数据处理</b>

    使用NVIDIA GPU加速Apache SparkParquet数据扫描

    随着各行各业的企业数据规模不断增长,Apache Parquet 已经成为了一种主流数据存储格式。Apache Parquet 是一种列式存储格式,专为高效的
    的头像 发表于 07-23 10:52 1216次阅读
    使用NVIDIA GPU加速Apache Spark<b class='flag-5'>中</b>Parquet<b class='flag-5'>数据</b>扫描

    MySQL数据备份与恢复策略

    数据企业的核心资产,MySQL作为主流的关系型数据库管理系统,其数据的安全性和可靠性至关重要。本文将深入探讨
    的头像 发表于 07-14 11:11 885次阅读

    抖音电商 API 接口和传统电商接口,直播数据处理谁更快?

    直播电商蓬勃发展的今天,数据处理速度成为平台竞争力的关键。抖音电商作为新兴力量,其API接口针对直播场景进行了优化,而传统电商接口则基于通用模型设计。本文将逐步分析两者的
    的头像 发表于 07-09 15:39 839次阅读
    抖音电商 API 接口和传统电商接口,直播<b class='flag-5'>数据处理</b>谁更快?

    企业MySQL数据库管理指南

    在当今数字化时代,MySQL作为全球最受欢迎的开源关系型数据库,承载着企业核心业务数据的存储与处理。作为
    的头像 发表于 07-09 09:50 888次阅读

    伟创力高效电源模块大规模数据中心的应用

    受云端存储和数据处理需求持续增长的推动,数据中心正以前所未有的速度扩张。当前全球超大规模数据中心,即规模最大的那些数据中心,总容量在过去四年
    的头像 发表于 07-07 15:41 1425次阅读