对于MySQL的备份,可分为以下两种:
1. 冷备
2. 热备
其中,冷备,顾名思义,就是将数据库关掉,利用操作系统命令拷贝数据库相关文件。而热备指的是在线热备,即在不关闭数据库的情况下,对数据库进行备份。实际生产中基本上都是后者。
关于热备,也可分为两种方式:
1. 逻辑备份
2. 物理备份
对于前者,常用的工具是MySQL自带的mysqldump,对于后者,常用的工具是Percona提供的XtraBackup。
对于规模比较小,业务并不繁忙的数据库,一般都是选择mysqldump。
那么,mysqldump的备份原理是什么呢?
抛开源码不谈,其实我们可以通过打开general log,查看mysqldump全库备份时执行的命令来了解mysqldump背后的原理。
打开general log
mysql> set global general_log=on;
其中,general log的存放路径可通过以下命令查看
mysql> show variables like '%general_log_file%';
执行全库备份
# mysqldump --master-data=2 -R --single-transaction -A -phello > 3306_20160518.sql
其中
--master-data指定为2指的是会在备份文件中生成CHANGE MASTER的注释。具体在本例中,指的是
--CHANGE MASTER TO MASTER_LOG_FILE='mysql2-bin.000049', MASTER_LOG_POS=587;
如果该值设置为1,则生成的是CHANGE MASTER的命令,而不是注释。
-R 备份存储过程与函数
--single-transaction 获取InnoDB表的一致性备份。
-A 相当于--all-databases。
下面来看看general log中的内容
160518 11:00:59 14 Connect root@localhost on
14 Query /*!40100 SET @@SQL_MODE=''*/
14 Query /*!40103 SET TIME_ZONE='+00:00'*/
14 Query FLUSH /*!40101 LOCAL*/TABLES14 Query FLUSH TABLES WITH READLOCK14 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
14 Query START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT*/
14 Query SHOW VARIABLES LIKE 'gtid\_mode'
14Query SHOW MASTER STATUS14Query UNLOCK TABLES14 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 GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE ORDER BYLOGFILE_GROUP_NAME14 Query SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' ORDER BYTABLESPACE_NAME, LOGFILE_GROUP_NAME14Query SHOW DATABASES14 Query SHOW VARIABLES LIKE &