Mysql大数据备份及恢复

【引自攀岩人生的博客】MySQL备份一般采取全库备份、日志备份;MySQL出现故障后可以使用全备份和日志备份将数据恢复到最后一个二进制日志备份前的任意位置或时间;mysql的二进制日志记录着该数据库的所有增删改的操作日志还包括了这些操作的执行时间

Binlog的用途:主从同步、恢复数据库

使用binlog工具备份

查看binlog是否开启,因为默认是关闭的

 

从上图可知off为关闭状态,一般logbin为只读,在/etc/my.cnf下开启

 

重启数据库

 

重启后在目录下查看是否生成bin日志,黄色表示为日志

创建数据库,表,数据

 

创建表的时候 auto_increment为自增

重新开始一个新的日志文件

flush logs; #重新生成新的二进制文件

delete from tb1 where id=2; #删除id列中的序列号为2的数据方便测试

insert into tb1(name) values(‘tom’); #创建一个新的数据名为tom

查看数据

 

查看mysql上的二进制文件日志

 

查看二进制日志事件

  1. mysql> show binlog events; 
  2.  
  3. +------------------+------+----------------+-----------+-------------+-----------------------------------------------------------------------------------+ 
  4.  
  5. | Log_name         | Pos  | Event_type     | Server_id | End_log_pos | Info                                                                              | 
  6.  
  7. +------------------+------+----------------+-----------+-------------+-----------------------------------------------------------------------------------+ 
  8.  
  9. | mysql-bin.000001 |    4 | Format_desc    |         1 |         123 | Server ver: 5.7.13-log, Binlog ver: 4                                             | 
  10.  
  11. | mysql-bin.000001 |  123 | Previous_gtids |         1 |         154 |                                                                                   | 
  12.  
  13. | mysql-bin.000001 |  154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                              | 
  14.  
  15. | mysql-bin.000001 |  219 | Query          |         1 |         316 | create database test1                                                             | 
  16.  
  17. | mysql-bin.000001 |  316 | Anonymous_Gtid |         1 |         381 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                              | 
  18.  
  19. | mysql-bin.000001 |  381 | Query          |         1 |         525 | use `test1`; create table tb1(id int primary key auto_increment,name varchar(20)) | 
  20.  
  21. | mysql-bin.000001 |  525 | Anonymous_Gtid |         1 |         590 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                              | 
  22.  
  23. | mysql-bin.000001 |  590 | Query          |         1 |         663 | BEGIN                                                                             | 
  24.  
  25. | mysql-bin.000001 |  663 | Table_map      |         1 |         713 | table_id: 108 (test1.tb1)                                                         | 
  26.  
  27. | mysql-bin.000001 |  713 | Write_rows     |         1 |         758 | table_id: 108 flags: STMT_END_F                                                   | 
  28.  
  29. | mysql-bin.000001 |  758 | Xid            |         1 |         789 | COMMIT /* xid=10 */                                                               | 
  30.  
  31. | mysql-bin.000001 |  789 | Anonymous_Gtid |         1 |         854 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                              | 
  32.  
  33. | mysql-bin.000001 |  854 | Query          |         1 |         927 | BEGIN                                                                             | 
  34.  
  35. | mysql-bin.000001 |  927 | Table_map      |         1 |         977 | table_id: 108 (test1.tb1)                                                         | 
  36.  
  37. | mysql-bin.000001 |  977 | Write_rows     |         1 |        1026 | table_id: 108 flags: STMT_END_F                                                   | 
  38.  
  39. | mysql-bin.000001 | 1026 | Xid            |         1 |        1057 | COMMIT /* xid=11 */                                                               | 
  40.  
  41. | mysql-bin.000001 | 1057 | Rotate         |         1 |        1104 | mysql-bin.000002;pos=4          | # 此处为日志轮换事件,执行flush logs引起的 
  42.  
  43. +------------------+------+----------------+-----------+-------------+-----------------------------------------------------------------------------------+ 
  44.  
  45. 17 rows in set (0.00 sec)  

查看指定二进制日志的事件(上面那个命令只能查看默认1的)

  1. mysql> show binlog events in 'mysql-bin.000002'
  2.  
  3. +------------------+-----+----------------+-----------+-------------+---------------------------------------+ 
  4.  
  5. | Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                  | 
  6.  
  7. +------------------+-----+----------------+-----------+-------------+---------------------------------------+ 
  8.  
  9. | mysql-bin.000002 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.13-log, Binlog ver: 4 | 
  10.  
  11. | mysql-bin.000002 | 123 | Previous_gtids |         1 |         154 |                                       | 
  12.  
  13. | mysql-bin.000002 | 154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  | 
  14.  
  15. | mysql-bin.000002 | 219 | Query          |         1 |         292 | BEGIN                                 | 
  16.  
  17. | mysql-bin.000002 | 292 | Table_map      |         1 |         342 | table_id: 108 (test1.tb1)             | 
  18.  
  19. | mysql-bin.000002 | 342 | Delete_rows    |         1 |         391 | table_id: 108 flags: STMT_END_F       | 
  20.  
  21. | mysql-bin.000002 | 391 | Xid            |         1 |         422 | COMMIT /* xid=14 */                   | 
  22.  
  23. | mysql-bin.000002 | 422 | Anonymous_Gtid |         1 |         487 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  | 
  24.  
  25. | mysql-bin.000002 | 487 | Query          |         1 |         560 | BEGIN                                 | 
  26.  
  27. | mysql-bin.000002 | 560 | Table_map      |         1 |         610 | table_id: 108 (test1.tb1)             | 
  28.  
  29. | mysql-bin.000002 | 610 | Write_rows     |         1 |         654 | table_id: 108 flags: STMT_END_F       | 
  30.  
  31. | mysql-bin.000002 | 654 | Xid            |         1 |         685 | COMMIT /* xid=15 */                   | 
  32.  
  33. +------------------+-----+----------------+-----------+-------------+---------------------------------------+ 
  34.  
  35. 12 rows in set (0.00 sec)  

使用mysqlbinlog工具的-v(–verbose)选项,该选项会将行事件重构成被注释掉的伪SQL语句,如果想看到更详细的信息可以将该选项给两次如-vv,这样可以包含一些数据类型和元信息的注释内容,如

先切换到binlog所在的目录下

mysqlbinlog mysql-bin.000001

mysqlbinlog -v mysql-bin.000001

mysqlbinlog -vv mysql-bin.000001

-h,-P,-p,-u等,这些参数仅在指定了–read-from-remote-server后有效。

恢复导出binlog日志

 

恢复完成后查看表的数据是否完整

常见的选项有:

–start-datetime #从二进制日志中读取指定时间戳或者本地计算机时间之后的日志事件

–stop-datetime #从二进制日志中读取指定时间戳或者本地计算机时间之前的日志事件

–start-position #从二进制日志中读取指定position 事件位置作为开始

–stop-position #从二进制日志中读取指定position 事件位置作为事件截至

 

因为备份得时候把删除那项跳过了,所以id为2的zhangsan也恢复了

使用mysqldump备份恢复

它是用于备份和数据迁移的工具,一般在数据量比较小的情况下使用如几个G,当数据比较大的情况下建议不使用;mysqldump可以对单(多)个表、单(多)个数据库及所有数据库进行导出操作;

  1. mysqldump [options] db_name [tbl_name ...] #导出指定数据库或单个表 
  2.  
  3. mysqldump [options] --databases db_name ... #导出多个数据库 
  4.  
  5. mysqldump [options] --all-databases #导出所有  

备份数据库test1

  1. mysqldump -p123456 --flush-logs test1 > /opt/test1.spl 
  2.  
  3. #备份整个数据库,并且重新开启一个新的binlog 
  4.  
  5. mysql -p123456 test1 </opt/test1.spl #从备份的目录中导入  

创建数据测试mysqldump工具

 

查看数据

 

创建备份的目录及备份数据库和cp bin.000001二进制文件

 

清楚二进制00000.2之前的日志

 

删除数据测试

 

然后在进行备份第二个二进制文件

 

进行数据库恢复

   

  

 

查看表的数据是否恢复 

 

上面数据已经全部恢复 希望能帮到你 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/244402.html<

(0)
管理的头像管理
上一篇2025-04-25 17:19
下一篇 2025-04-25 17:21

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注