MySQL单个大表增量备份+索引+结构变更简单方法

MySQL增量订阅神器Canal全解析 Canal([kə’næl])是阿里巴巴开源的纯 Java 开发的 MySQL 数据库增量日志解析工具,其核心功能是通过模拟 MySQL Slave 的交互协议,伪装成 Slave 向 MySQL Master 发送 dump 请求,实时解析并订阅 Master 的二进制日志(binlog),最终将增量数据推送至下游系统(如 Kafka、Elasticsearch、Redis 等)。对于需要实现 MySQL 数据实时流动的团队,Canal 是一个值得深入研究和应用的解决方案。 阅读详情

由于使用了低版本mysql,且是myisam引擎,在进行一个千万级数据表加索引时过于缓慢,安全起见采用增量模式备份新表,通过重命名方式迁移结构到新的备份表。

测试版本,目前针对的是MySQL低版本模式进行的测试,与此版本无关。
数据库版本

以下操作皆可以直接用于测试,是编写文章过程实际SQL

思路,依据原始表,创建三个insert,update,delete表,依赖主键ID,并创建三个触发器,然后全量备份原始表为一个新表,因为原始表数据的增删改都会记录在三个表,故单表SQL的操作记录可以直接拿到。这时选一个时间,或做好脚本,暂停原始表写入,导出触发器创建的insert,update,delete表记录,重新导入备份SQL到备份表中,原始表和备份表改名实现大表操作如加索引,字段等模式。

1.创建数据库

create database test_db;
use test_db;

2.创建原始表和insert,update,delete表

创建原始表,这个表就是我们要备份的表了

# 原始表
CREATE TABLE `back_test` ( 
  `id` int(11) NOT NULL auto_increment,   
  `user_id` int(11) NOT NULL default 0,   
  `friend_id` int(11) NOT NULL default 0,   
  `dir_id` int(11) NOT NULL default 0,   
  `created` int(11) NOT NULL default 0,   
  PRIMARY KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

#插入记录表
create table back_test_insert like back_test;
#更新记录表
create table back_test_update like back_test;
#删除记录表
create table back_test_delete ( `id` int(11));

3.创建数据触发器

SHOW TRIGGERS;

delimiter //  
create trigger back_test_insert after insert on back_test for each row begin insert into back_test_insert set id=new.id,user_id=new.user_id,friend_id=new.friend_id,dir_id=new.dir_id,created=new.created; end//  

create trigger back_test_update after update on back_test for each row begin replace into back_test_update set id=new.id,user_id=new.user_id,friend_id=new.friend_id,dir_id=new.dir_id,created=new.created; end//  

create trigger back_test_delete after delete on back_test for each row begin insert into back_test_delete values(old.id); end//  

delimiter ; 

4.加入测试数据

insert into back_test values(null,1,10,1,1198464252);  
insert into back_test values(null,1,11,1,1198464252);  
insert into back_test values(null,1,2,1,1198464252);  
insert into back_test values(null,2,10,1,1198464252);  
insert into back_test values(null,2,12,1,1198464252);  
insert into back_test values(null,3,12,1,1198464252);  
update back_test set dir_id=5 where user_id=3;  
update back_test set dir_id=4 where user_id=3;  
delete from back_test where user_id=2 and friend_id=12; 

5.导出触发器记录备份SQL

退出mysql,使用linux命令行执行备份

mysql -uhomestead -psecret -e "use test_db;select concat('replace into back_test set id=',id,',user_id=',user_id,',friend_id=',friend_id,',dir_id=',dir_id,',created=',created,';') from back_test_insert;">>backup_ii.sql  

mysql -uhomestead -psecret -e "use test_db;select concat('update back_test set user_id=',user_id,',friend_id=',friend_id,',dir_id=',dir_id,',created=',created,' where id=',id,';') from back_test_update;">>backup_uu.sql  

mysql -uhomestead -psecret -e "use test_db;select concat('delete from back_test where id=',id,';') from back_test_delete">>backup_dd.sql  

6.迁移备份

查看备份文件结构,依据导出的备份文件,暂停数据库写入,导入insert,update,delete表的SQL到备份表,重命名原始表和备份表,实现数据结构或索引更改。


参考文献:MySQL大表备份的简单方法

MySQL全面瓦解备份与恢复 恢复非常简单可以通过网络来备份和恢复备份的结果为ASCII文件,可以编辑与存储引擎无关非常灵活,可以使用mysqldump的工具提供很多可选项。必须由数据库服务器来完成备份和恢复过程备份结果占据更多的空间:逻辑备份在某些场景下比数据库文件本身还要大精度问题,无法保证还原出来的数据强一致还原时间长:还原之后,加载注释语句,转换存储格式,重建索引都需要消耗一定时间使用方式实现数据的备份和还原# 选择对应的数据库# 查询需要备份的数据。 阅读详情

相关推荐

用SOLIDWORKS从零画一个履带机器人,手把手教你搞定底盘和传动

本文详细介绍了如何使用SOLIDWORKS从零开始设计履带式机器人,重点讲解底盘结构优化和传动系统设计的关键步骤。通过七个阶段的实战指南,包括前期规划、底盘建模、驱动系统装配、履带生成、动态模拟等,帮助工程师和爱好者掌握履带机器人的核心设计技巧,提升地形适应能力和动力效率。

weixin_30872499的博客 632

mysql备份表的两种方法(数据迁移)

mysql备份的两种方法(传输方式:单表传输),在数据量小的情况下一般采用insert的方法向备份表中插入数据。当源表的数据量过大时使用表空间的方式进行数据的迁移。 第一种方法:(针对表中数据量小的情况) (1)使用源表的表结构建新的备份表;(源表为t1,备份表为t1_copy) create table t1_copy like t1; (2)插入数据到备份表中。 insert i...

hammring的博客 3702

库卡kuka仿真软件sim Pro 3.1简单实用教程

实验目的 建立机器人,自定义抓手,导入外部模型,掌握工具坐标、基坐标的使用,自动生成轨迹。 实验步骤 打开KUKA.Sim Pro 3.1.2仿真软件,依次点击KUKA Sim Library 3.1 → KUKA_ROBOTS→Small Robots(3kg-10kg)→Archiv→AGILUS-1 Series→sixx,双击KR 6 R700 sixx,加载机器臂到工作空间; 加载自定义抓手。双击Miscellaneous,再双击圆锥Cone设置上半径为0,下半径为40,高为100; 点击“捕

weixin_45168199的博客 4万+

Linux--MySQL数据库,表的增量备份与恢复

在操作ID下面紧跟着的是时间标记. 要实现基于位置或时间点恢复数据,需要分别依赖二进制日志文件中的操作ID或者时间标记.例如, 通过二进制日志文件得知,在操作ID为“617”的时候,user_info表中插入了“其他同学”的用户数据。2)继续录入新的数据并进行增量备份继续录入两个用户的数据,并执行‘mysqladmin -u root -p flush-logs”命令刷新二进制日志,进行增量备份,如此,二进制日志文件mysql-bin.000005中仅保留插入两个用户数据的操作。创建表一班学生成绩表。

2301_77023501的博客 1622

在Proteus中用80C51模拟4线SPI点亮OLED屏幕

在Proteus里用80C51模拟4线SPI控制OLED屏幕使其显示图案(汇编实现)。

Connor3093的博客 5003

PYNQ开发板使用-使用DMA进行数据搬移(Simple DMA transfer 模式)

该篇是学习使用PYNQ开发板,实际上是对ZYNQ PL端AXI_CDMA 核的应用。实验步骤参照官网的教程,一步一步地做,但是由于在硬件资源布置方面与官方教程稍有出入,所以在SDK的源码里也进行了修改。 AXI_CDMA特性: 如果是使用ZYNQ 7系列芯片(可能其他Xilinx也是通用的),xilinx的AXI_CDMA 核有两种传输模式:轮询(poll)和中断(...

YGLeeeon的博客 3521

MySQL增量备份

步骤1:修改配置文件 修改my.cnf,添加log_bin=mysql-bin,然后重启服务: Service mysqld restart 步骤2:进行完全备份 执行语句:mysqldump -u root --single-transaction --master-data=2 --databases 数据库名> /mysqlBackup/数据库名_`date +%F`.sql -p --single-transaction: 基于此选项能实现热备InnoDB表;因此,不需要同时使用--l

W_kiven的博客 1439

Unreal 5 MetaHuman插件全流程:从安装到角色动画生成

本文详细介绍了Unreal 5中MetaHuman插件的全流程使用指南,从安装配置到角色动画生成。通过Quixel Bridge下载预设角色,利用面部捕捉技术赋予数字人模型生命力,并提供材质编辑、性能优化等进阶技巧,帮助用户快速创建照片级真实的虚拟角色。

weixin_29009081的博客 829

MySQL 千万级数据迁移

MySQL千万级数据迁移 --- 逻辑非删除的数据迁移

wskws的专栏 1396

(01)ORB-SLAM2源码无死角解析-(38) EPnP 算法原理详解→理论基础二:分情况求得beta初始解

讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (01)ORB-SLAM2源码无死角解析-(00)目录_最新无死角讲解:https://blog.youkuaiyun.com/weixin_43013761/article/details/123092196 文末正下方中心提供了本人联系方式,点击本人照片即可显示WX→官方认证{\color{blue}{文末正下方中心}

江南才尽江南山,年少无知年少狂! 1024

【知识图谱】Neo4j基本操作及数据库文件导入(graph.db.dump)

初探Neo4j导入数据备份数据客户端操作导入csv文件指定csv文件格式使用命令行导入csv文件附录 请读者参考上篇博文 Neo4j安装教程 导入数据 若开启服务,先在终端停止 Neo4j 服务 ./neo4j stop 接下来,下载射雕三部曲的数据库文件 wget https://labfile.oss.aliyuncs.com/courses/1354/graph.db.dump 下载完将出现 graph.db.dump 文件: 将数据库文件导入到 Neo4j 中 首先进入neo4j 根目录下:

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 8620

mysql增量备份几种_mysql的增量备份

一、启用 Binary Log修改 MySQL Server 的系统设置文件(eg. /etc/my.cnf),在 [mysqld] 区块中加上 log-bin=mysql-bin 选项,然后重新启动 MySQL Server,例如:[mysqld]log-bin启用后你应该可以在 MySQL 的 Data Dir 里面发现如下的文件:mysql-bin.indexmysql-bin.000001...

weixin_42515158的博客 512

Captcha must be filled out,解决Kaggle新用户注册无法弹出验证提示的问题

Captcha must be filled out

weixin_46713695的博客 5万+

【MySQL 备份恢复指南:含备份类型分类、xtrabackup物理备份( 全备/ 增量 / 差异)及 mysqldump逻辑备份(备份表,库,表结构,表数据) 与 binlog 恢复备份操作】

MySQL 备份恢复指南:含备份类型分类、xtrabackup物理备份( 全备/ 增量 / 差异)及 mysqldump逻辑备份(备份表,库,表结构,表数据及其恢复) 与 binlog 恢复备份操作

m0_63756214的博客 907

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

数据库管理与高可用-MySQL全量,增量备份与恢复

每次备份均复制所有数据(即完整副本),与历史备份无关。全部数据(文件、数据库、系统状态等)1. 恢复简单(仅需最后一次全量备份);2. 备份逻辑简单,不易出错。1. 备份时间长;2. 存储空间占用大;3. 对业务影响较大(尤其数据量大时)。最快(直接恢复全量)最大。

2401_85836041的博客 1411

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

如何使用binlog进行增量备份

在MySQL中,使用binlog进行增量备份是一种常见的做法,它允许你记录并恢复数据库的变更,而不是整个数据库的全量备份。启用binlog在MySQL的配置文件(通常是my.cnf或my.ini)中启用binlog。你需要设置log_bin参数来指定binlog文件的存储位置,以及server_id来确保每个MySQL服务器有一个唯一的标识。[mysqld]配置binlog格式binlog格式可以是STATEMENTROW或MIXED。ROW格式记录行的更改,而STATEMENT。

qq_50054286的博客 769

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

MySQL binlog与增量备份的基本原理总结

定义 binlog是记录所有数据库表结构变更(例如CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE即使update没有导致数据变化也会被记录、DELETE…)的二进制日志。 binlog不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,但你可以通过查询通用日志来查看MySQL执行过的所有语句。以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。 作用 复制:MySQL Replication在Master端开启bin

Neo 9411

mysql备份与恢复

是一个功能强大且免费的 MySQL 热备份解决方案,尤其适合 InnoDB 用户。它是许多开源社区和企业的首选。则是适合需要企业级支持和更广泛功能集的用户,但它是商业软件,需要购买许可。物理备份工具:使用工具如mysqldump、Percona XtraBackup 等进行备份。优点:快速,适用于大型数据库,支持增量备份。缺点:占用存储空间大,备份和恢复时间较长。逻辑备份工具mysqldump是常用的逻辑备份工具,导出 SQL 脚本。优点:易于理解和操作,适合小型数据库。缺点。

WuuuuuJay的博客 1327

MySQL表备份四大方法详解与实战对比

数据库备份是保障数据安全的核心技术,其中表级备份因其灵活性成为高频需求。从原理上看,MySQL备份可分为逻辑备份(SQL语句重构)和物理备份(文件级复制)两大流派。逻辑备份通过SELECT语句提取数据,物理备份则直接操作表空间文件。在工程实践中,需要根据数据量、业务连续性要求和恢复速度等因素选择合适方案。SELECT INTO OUTFILE适合快速导出CSV格式数据,CREATE TABLE AS可实现表结构克隆,mysqldump提供最完整的对象备份,而InnoDB表空间传输则在跨服务器迁移时展现极速性

weixin_29218963的博客 225

MySQL数据库备份与恢复

数据传输、数据存储、数据交换、软件故障、硬盘坏道等情况容易产生数据故障。如果没有采取数据备份和数据恢复手段与措施,就会导致数据的丢失。没有数据库的备份,就没有数据库的恢复,企业应当把企业数据备份的工作列为一项不可忽视的系统工作,为其选择相应的备份设备和技术,进行经济可靠的数据备份,从而避免损失。......

weixin_51099370的博客 4944

mysql中如何复制数据表_MySQL中表的复制以及大型数据表的备份教程

表复制mysql拷贝表操作我们会常常用到,下面就为您详细介绍几种mysql拷贝表的方式,希望对您学习mysql拷贝表方面能够有所帮助。假如我们有以下这样一个表:id username password-----------------------------------1 admin *************2 sameer *************3 ste...

weixin_34566429的博客 219

MySQL数据库定时备份全攻略:从逻辑备份到增量恢复的实战指南

数据库备份是数据安全与容灾的核心基础,其原理在于通过定期复制数据库状态,确保在硬件故障、人为误操作或恶意攻击等意外发生时,能够快速恢复业务。这项技术的核心价值在于保障数据持久性与业务连续性,是运维工程师和开发者的必备技能。在MySQL生态中,逻辑备份工具mysqldump因其灵活性和兼容性,成为中小规模场景的常用选择,它通过导出SQL语句实现数据迁移与恢复。结合crontab定时任务,可以构建自动化的备份体系。在实际应用中,合理的备份策略需考虑全量与增量备份的结合,并遵循3-2-1原则进行多介质存储。本文聚

weixin_33491377的博客 305

MySQL数据备份

MySQL数据备份

650

MySQL 生产级备份与恢复全攻略:全量 / 增量 / 逻辑 / 物理备份深度拆解 + 误删数据秒级恢复实战

本文系统讲解MySQL备份与恢复体系,涵盖全量/增量、逻辑/物理备份的底层原理与核心差异;详解mysqldump、mydumper、XtraBackup等工具的生产级实战;提供误删数据的多场景快速恢复方案(闪回、延迟从库、回收站);并附Java备份管理模块完整实现。

果酱 の 博客 814

MySQL数据库备份与恢复实战:从逻辑备份到增量恢复的完整指南

数据库备份与恢复是数据安全的核心保障,其本质在于通过系统性的数据复制与还原机制,确保业务连续性。从技术原理上看,主要分为逻辑备份与物理备份两种方式:逻辑备份通过导出SQL语句或文本格式数据实现,具有可读性强、恢复粒度灵活的优点;物理备份则直接复制数据库物理文件,速度更快,适合大规模数据场景。在工程实践中,结合全量备份与增量备份策略,并利用二进制日志进行时间点恢复,能够有效平衡恢复点目标与恢复时间目标。对于MySQL数据库,掌握mysqldump工具进行逻辑全量备份,以及基于binlog的增量恢复流程,是应对

weixin_30715523的博客 371

Mysql数据库备份和恢复总结

前言:数据库备份是我们服务端开发经常遇到的问题。为了用户体验,我们要尽量减少服务器备份时的损失。所以备份时间尽量选在半夜,而且要尽量减少备份所用的时间。 一、数据库备份的目的 做灾难恢复:对损坏的数据进行恢复和还原 需求改变:因需求改变而需要把数据还原到改变以前 测试:测试新功能是否可用 二、备份需要考虑的问题 可以容忍丢失多长时间的数据; 恢复数据要在多长时间内完; 恢复的时候是否需要持续提供服务; 恢复的对象,是整个库,多个表,还是单个库,单个表。 三、备份的类型1、根据是否需要数据库离线 冷备

何哥的博客 3524
上一篇: 关于后端编程‘闭环’的一些思考
下一篇: centos7安装mysql8
苟先
博客等级 码龄15年 15粉丝 19原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值