首页 电脑 电脑学堂 查看内容

MySQL常用的备份工具

2016-4-5 11:28 2642 0

摘要: 最近在面试过程中,总是遇到面试官问:平时工作中经常是如何备份的,使用哪些备份工具。于是还是默默的寻找资料总结一下吧。常用备份工具mysql复制逻辑备份(mysqldump,mydumper)物理备份(copy,xtrabackup)备份工具 ...

最近在面试过程中,总是遇到面试官问:平时工作中经常是如何备份的,使用哪些备份工具。于是还是默默的寻找资料总结一下吧。

常用备份工具

  1. mysql复制
  2. 逻辑备份(mysqldump,mydumper)
  3. 物理备份(copy,xtrabackup)

备份工具差异对比

1.mysql复制相对于其他的备份来说,得到的备份数据比较实时。

2.逻辑备份:分表比较容易。

mysqldump备份数据时是将所有sql语句整合在同一个文件中;

mydumper备份数据时是将SQL语句按照表拆分成单个的sql文件,每个sql文件对应一个完整的表。

3.物理备份:拷贝即可用,速度快。

copy:直接拷贝文件到数据目录下,可能引起表损坏或者数据不一致。

xtrabackup对于innodb表是不需要锁表的,对于myisam表仍然需要锁表。

拓展

xtrabackup的原理

xtrabackup利用innodb的crash recovery的原理,备份innodb表时不需要锁表,xtrabackup一页一页复制data pages,并且xtrabackup还有另外一个线程监视redo log,一旦redo log发生变化,xtrabackup就会将log pages复制走(因为redo log是循环的,所以为了防止日志被覆盖,redo log一旦发生变化,就会立刻被xtrabackup复制走)【由于数据是复制出来的,所以备份出来的数据是不一致的,待恢复时,结合redo log利用crush recovery的原理恢复一致性的数据】。xtrabackup对于myisam表是需要锁表的。

mysqldump的原理

参考链接:

http://tencentdba.com/blog/mysqldump-backup-principle/

首先呢,对于mysqldump来说是需要锁表的,除了–single-transaction单独使用的时候是不需要锁表的。

以下分析均以innodb存储引擎为例子。

  • mysqldump不添加任何参数在mysqldump准备备份某个表的数据之前,mysqldump会对该表添加read表级锁,直到该表数据备份完毕,才会释放锁。

    # 备份sql
    mysqldump -uroot -h127.0.0.1 -P3306 wing t1 > dump1.sql
    
    # general log
    160307  9:22:15     3 Connect   [email protected] on 
                        3 Query     /*!40100 SET @@SQL_MODE='' */
                        3 Query     /*!40103 SET TIME_ZONE='+00:00' */
                        3 Query     SHOW VARIABLES LIKE 'gtid\_mode'
                        3 Query     SELECT LOGFILE_GROUP_NAME, FILE_NAME, TOTAL_EXTENTS, INITIAL_SIZE, ENGINE, EXTRA FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'UNDO LOG' AND FILE_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IN (SELECT DISTINCT LOGFILE_GROUP_NAME FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA='wing' AND TABLE_NAME IN ('t1'))) GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE ORDER BY LOGFILE_GROUP_NAME
                        3 Query     SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA='wing' AND TABLE_NAME IN ('t1')) ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME
                        3 Query     SHOW VARIABLES LIKE 'ndbinfo\_version'
                        3 Init DB   wing
                        3 Query     SHOW TABLES LIKE 't1'
                        3 Query     LOCK TABLES `t1` READ /*!32311 LOCAL */
                        3 Query     show table status like 't1'
                        3 Query     SET SQL_QUOTE_SHOW_CREATE=1
                        3 Query     SET SESSION character_set_results = 'binary'
                        3 Query     show create table `t1`
                        3 Query     SET SESSION character_set_results = 'utf8'
                        3 Query     show fields from `t1`
                        3 Query     SELECT /*!40001 SQL_NO_CACHE */ * FROM `t1`
                        3 Query     SET SESSION character_set_results = 'binary'
                        3 Query     use `wing`
                        3 Query     select @@collation_database
                        3 Query     SHOW TRIGGERS LIKE 't1'
                        3 Query     SET SESSION character_set_results = 'utf8'
                        3 Query     UNLOCK TABLES
                        3 Quit
    
  • 添加–single-trasaction参数的mysqldump在备份数据之前,mysqldump会做两件事情,首先将数据库的隔离级别设置为RR模式,然后发出start trasaction语句,开启事务(在RR级别下,此时利用innodb的mvcc得到一份数据快照,保证了数据的一致性),最后开始备份数据,期间无需锁表。

    # 备份sql
    mysqldump -uroot -h127.0.0.1 -P3306 --single-transaction wing t1 > dump1.sql
    
    # general log
    160307  9:30:56     5 Connect   [email protected] on 
                        5 Query     /*!40100 SET @@SQL_MODE='' */
                        5 Query     /*!40103 SET TIME_ZONE='+00:00' */
                        5 Query     SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
                        5 Query     START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
                        5 Query     SHOW VARIABLES LIKE 'gtid\_mode'
                        5 Query     UNLOCK TABLES
                        5 Query     SELECT LOGFILE_GROUP_NAME, FILE_NAME, TOTAL_EXTENTS, INITIAL_SIZE, ENGINE, EXTRA FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'UNDO LOG' AND FILE_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IN (SELECT DISTINCT LOGFILE_GROUP_NAME FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA='wing' AND TABLE_NAME IN ('t1'))) GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE ORDER BY LOGFILE_GROUP_NAME
                        5 Query     SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA='wing' AND TABLE_NAME IN ('t1')) ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME
                        5 Query     SHOW VARIABLES LIKE 'ndbinfo\_version'
                        5 Init DB   wing
                        5 Query     SHOW TABLES LIKE 't1'
                        5 Query     SAVEPOINT sp
                        5 Query     show table status like 't1'
                        5 Query     SET SQL_QUOTE_SHOW_CREATE=1
                        5 Query     SET SESSION character_set_results = 'binary'
                        5 Query     show create table `t1`
                        5 Query     SET SESSION character_set_results = 'utf8'
                        5 Query     show fields from `t1`
                        5 Query     SELECT /*!40001 SQL_NO_CACHE */ * FROM `t1`
                        5 Query     SET SESSION character_set_results = 'binary'
                        5 Query     use `wing`
                        5 Query     select @@collation_database
                        5 Query     SHOW TRIGGERS LIKE 't1'
                        5 Query     SET SESSION character_set_results = 'utf8'
                        5 Query     ROLLBACK TO SAVEPOINT sp
                        5 Query     RELEASE SAVEPOINT sp
                        5 Quit
    

正常使用mysqldump备份必携带–single-transaction,–master-data=2参数

这两个参数的使用可以保证数据的一致性以及数据的不丢失。但是mysqldump开始的时候会有短暂的锁。

160307 10:30:58     3 Connect   [email protected] on 
                    3 Query     /*!40100 SET @@SQL_MODE='' */
                    3 Query     /*!40103 SET TIME_ZONE='+00:00' */
                    3 Query     FLUSH /*!40101 LOCAL */ TABLES
                    3 Query     FLUSH TABLES WITH READ LOCK
                    3 Query     SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
                    3 Query     START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
                    3 Query     SHOW VARIABLES LIKE 'gtid\_mode'
                    3 Query     SHOW MASTER STATUS
                    3 Query     UNLOCK TABLES
                    3 Query     SELECT LOGFILE_GROUP_NAME, FILE_NAME, TOTAL_EXTENTS, INITIAL_SIZE, ENGINE, EXTRA FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'UNDO LOG' AND FILE_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IN (SELECT DISTINCT LOGFILE_GROUP_NAME FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA='wing' AND TABLE_NAME IN ('t1'))) GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE ORDER BY LOGFILE_GROUP_NAME
                    3 Query     SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA='wing' AND TABLE_NAME IN ('t1')) ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME
                    3 Query     SHOW VARIABLES LIKE 'ndbinfo\_version'
                    3 Init DB   wing
                    3 Query     SHOW TABLES LIKE 't1'
                    3 Query     SAVEPOINT sp
                    3 Query     show table status like 't1'
                    3 Query     SET SQL_QUOTE_SHOW_CREATE=1
                    3 Query     SET SESSION character_set_results = 'binary'
                    3 Query     show create table `t1`
                    3 Query     SET SESSION character_set_results = 'utf8'
                    3 Query     show fields from `t1`
                    3 Query     SELECT /*!40001 SQL_NO_CACHE */ * FROM `t1`
                    3 Query     SET SESSION character_set_results = 'binary'
                    3 Query     use `wing`
                    3 Query     select @@collation_database
                    3 Query     SHOW TRIGGERS LIKE 't1'
                    3 Query     SET SESSION character_set_results = 'utf8'
                    3 Query     ROLLBACK TO SAVEPOINT sp
                    3 Query     RELEASE SAVEPOINT sp
                    3 Quit
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部