mysqldump和mysqlbinlog实现完全备份和增量备份

本文详细介绍了MySQL的完全备份与增量备份的概念和实现方法,包括mysqldump工具的使用,如温备、热备支持,以及如何结合mysqlbinlog进行增量备份。通过示例展示了如何使用mysqldump进行部分备份、全库备份,以及如何利用mysqlbinlog进行增量备份和恢复操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、数据备份基础:

1、备份类型:

完全备份:整个数据集;

部分部分:只备份数据子集;     

增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据;

差异备份:仅备份最近一次完全备份以来变化的数据;

2、备份方式:

(1)、与存储引擎有关:热备份、温备份、冷备份:

      热备:读写操作均可执行;

      温备:读操作可执行;但写操作不成;

      冷备:读写操作均不可进行;

(2)、与存储引擎无关:物理备份、逻辑备份

      物理备份:直接复制数据文件进行备份;

      逻辑备份:从数据库中“导出”数据另存而进行的备份;

3、引擎支持的备份方式:

MyISAM:支持温备,不能热备

      InnoDB:支持热备          

4、备份时需要考虑的因素:

      持续时长、备份过程的时长、备份负载、恢复过程的时长        

5、备份什么

      数据

      二进制日志、innodb的事务日志

      代码(存储过程、存储函数、触发器、事件调度器)

      服务器的配置文件         

6、备份方案的设计:

      数据集:完全+增量;

      备份手段:物理、逻辑;     

7、备份工具:

mysqldump:逻辑备份工具,适用所有存储引擎,温备;完全备份、部分备份;对InnoDB存储引擎支持热备;

cp,tar等复制归档工具:物理备份工具,适用所有存储引擎;冷备:完全备份,部分备份;   

      mysql> SHOW BINARY|MASTER LOGS; 查看当前服务器所使用的二进制状态

      mysql> SHOW MASTER STATUS;查看当前正在使用的二进制状态

      mysql> SHOW BINLOG EVENTS IN '' FROMpos; 查看某一个指定的二进制日志中的文件内容

mysqlbinlog:查看二进制日志文件并利用其做增量备份

      mysqlbinlog [OPTION] log_file

           --start-position        从哪个位置开始做增量备份

           --stop-position        增量备份到哪个位置结束

           --start-datetime=    从哪个时间点开始做增量备份

           --stop-datetime=     增量备份到哪个时间点结束

二、备份工具详解:mysqldump、mysqlbinlog                      

1、逻辑备份工具:mysqldump,mydumper,phpMyAdmin

(1)、mysqldump:客户端命令,通过mysql协议连接至mysqld服务器

      man mysqldump

      mysqldump [options] [db_name [tbl_name...]]   

       shell> mysqldump [options] db_name[tbl_name ...]

            shell> mysqldump [options]--databases db_name ...

            shell> mysqldump [options]--all-databases

       备份的数据集:

           -A,--all-databases              备份所有数据库

           -B db_name,...                备份指定数据库

           --databases db_name,...       备份指定数据库

(2)引擎支持备份方式及实现:

MyISAM:只支持温备;必须锁定备份库,而后才能启动备份操作,

支持锁定的参数如下:

          --lock-all-tables, -x :锁定所有库的所有表

            --lock-tables, -l:对于每个单独的数据库,在启动备份之前锁定其所有表;

           注意:这两个参数对InnoDB表一样生效,实现温备;

      InonoDB:支持热备,可以直接启用备份,无需锁定表。

           --single-transaction

(3)、其他选项:

      -E,--events:备份指定数据库相关的所有event scheduler;

      --routines, -R:备份指定数据库相关的所有存储过程和存储函数;  

      --triggers:备份表的相关的触发器;

      --master-data :

           1)、记录为CHANGE MASTER TO语句,此语句不被注释;

           2)、记录为注释的CHANGE MASTER TO语句

            mysqldump--master-data=2 --all-databases > dumpfile

      --flush-logs:日志滚动

           锁定表完成后,执行flush logs命令;

2、备份建议:         

二进制日志文件不应该与数据文件放在同一磁盘;

建议还原时关闭二进制日志记录

      mysql> SHOW GLOBAL VARIABLES LIKE'%log%';

      sql_log_bin  ON

      mysql> SET sql_log_bin = OFF;

三、利用mysqldump做完全备份还原

1、mysqldump做部分备份和完全备份:                    

[root@www ~]# cphellodb.sql /root/

cp:"hellodb.sql" 与"/root/hellodb.sql" 为同一文件

[root@www ~]#file hellodb.sql

hellodb.sql:ASCII text, with very long lines

[root@www ~]#less hellodb.sql

-- MySQL dump10.13  Distrib 5.5.33, for Linux (x86_64)

--

-- CurrentDatabase: `hellodb`

CREATE DATABASE/*!32312 IF NOT EXISTS*/ `hellodb` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `hellodb`;

-- Tablestructure for table `classes`

DROP TABLE IFEXISTS `classes`;

/*!40101 SET@saved_cs_client     =@@character_set_client */;

/*!40101 SETcharacter_set_client = utf8 */;

CREATE TABLE`classes` (

  `ClassID` tinyint(3) unsigned NOT NULLAUTO_INCREMENT,

  `Class` varchar(100) DEFAULT NULL,

  `NumOfStu` smallint(5) unsigned DEFAULT NULL,

  PRIMARY KEY (`ClassID`)

) ENGINE=MyISAMAUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

/*!40101 SETcharacter_set_client = @saved_cs_client */;

 

#修改MyISAM引擎为InnoDB,使其支持热备

[root@www ~]#sed -i 's/MyISAM/InonoDB/g' hellodb.sql

[root@www ~]#sed -i 's/InonoDB/InnoDB/g' hellodb.sql

[root@www ~]#less hellodb.sql

-- MySQL dump10.13  Distrib 5.5.33, for Linux (x86_64)

--

-- Host:localhost    Database: hellodb

--------------------------------------------------------

-- Serverversion       5.5.33-log

 

-- MySQL dump10.13  Distrib 5.5.33, for Linux (x86_64)

--

-- Host:localhost    Database: hellodb

--------------------------------------------------------

-- Serverversion       5.5.33-log

 

DROP TABLE IFEXISTS `classes`;

/*!40101 SET@saved_cs_client     =@@character_set_client */;

/*!40101 SETcharacter_set_client = utf8 */;

CREATE TABLE`classes` (

  `ClassID` tinyint(3) unsigned NOT NULLAUTO_INCREMENT,

  `Class` varchar(100) DEFAULT NULL,

  `NumOfStu` smallint(5) unsigned DEFAULT NULL,

  PRIMARY KEY (`ClassID`)

) ENGINE=InnoDBAUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

/*!40101 SETcharacter_set_client = @saved_cs_client */;

--

-- Dumping datafor table `classes`

--

mysql> SHOWDATABASES;

+--------------------+

| Database          |

+--------------------+

|information_schema |

| hellodb             |

| mysql               |

| test                  |

| testdb              |

+--------------------+

5 rows in set(0.04 sec)

 

mysql> usehellodb

Reading tableinformation for completion of table and column names

You can turn offthis feature to get a quicker startup with -A

Database changed

mysql> SHOWTABLES;

+-------------------+

|Tables_in_hellodb |

+-------------------+

| classes            |

| coc                 |

| courses           |

| scores             |

| students          |

| teachers          |

| toc                  |

+-------------------+

7 rows in set(0.00 sec)

 

mysql> SELECT* FROM students;

+-------+---------------+-----+--------+---------+-----------+

| StuID |Name          | Age | Gender | ClassID |TeacherID |

+-------+---------------+-----+--------+---------+-----------+

|     1 | Shi Zhongyu   |  22| M      |       2 |         3 |

|     2 | Shi Potian    |  22| M      |       1 |         7 |

|     3 | Xie Yanke     | 53 | M      |       2 |        16 |

|     4 | Ding Dian     | 32 | M      |       4 |         4 |

|     5 | Yu Yutong     | 26 | M      |       3 |         1 |

|     6 | Shi Qing      | 46 | M      |       5 |     NULL |

|     7 | Xi Ren        | 19 | F      |     

### MySQL 完全备份增量备份 #### 完全备份 完全备份是指对整个数据库进行完整的复制,保存所有的数据记录。这种方式可以确保即使发生灾难性的数据丢失事件也能完整恢复所有数据。 对于 MySQL完全备份,通常采用 `mysqldump` 工具来执行操作: ```bash # 使用 mysqldump 进行完全备份 mysqldump -u 用户名 -p 密码 --all-databases > /路径/.../全部数据库_日期.sql ``` 此命令将会导出所有数据库的内容至指定位置的一个 SQL 文件中[^4]。 #### 增量备份 增量备份只针对自上次成功完成的特定类型的备份以来发生变化的数据对象实施保护措施。具体来说,在 MySQL实现增量备份主要依赖于二进制日志(Binary Log),它记录了服务器上的所有更改活动(如 INSERT、UPDATE 或 DELETE 操作)。通过解析这些日志条目并将其应用于另一个实例或用于后续还原过程中的重放机制,即可达到仅传输更新部分的效果。 要启用二进制日志功能,需编辑配置文件 `/etc/my.cnf.d/server.cnf` 并添加如下设置: ```ini [mysqld] server-id = 1 log_bin = /var/lib/mysql/mysql-bin.log expire_logs_days = 7 max_binlog_size = 100M ``` 重启服务使新参数生效后,就可以利用 `mysqlbinlog` 实用程序读取 bin-log 文件内容,并将变更应用到目标环境中去[^5]: ```bash # 将二进制日志转换为SQL语句并通过管道传递给MySQL客户端工具处理 mysqlbinlog --no-defaults /path/to/binlog-file | mysql -u root -ppassword ``` #### 方法对比 - **数据冗余度**: 完整备份每次都会创建一份全新的副本;而增量模式下只有当有变动时才会产生额外开销。 - **性能影响**: 执行全面扫描可能会占用较多资源并对在线业务造成一定干扰;相比之下,基于事务的日志跟踪则更加轻量化且高效。 - **恢复复杂性**: 当需要回滚到某个历史时刻的状态时,前者只需简单加载对应版本的快照;后者除了基础映像外还需逐步重现各阶段累积起来的变化轨迹,增加了流程难度以及潜在风险因素。 综上所述,虽然两种策略各有优劣之处,但在实际部署过程中往往会选择组合运用——定期安排周期性的整体存档作业作为兜底保障手段的同时,辅之以频繁的小范围调整动作以便快速响应日常维护需求[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值