mysql企业版有两个值得付费的工具:mysql enterprise backup、thread pool。
下面来分析下MEB工作原理:
1.先来个全备
/usr/local/meb5.7/bin/mysqlbackup --user=root --password=root --with-timestamp --backup-dir=/tmp/ backup 2>/tmp/meb.log
通过查看mysqlbackup屏幕输出,可以看到先拷贝所有innodb files。
160823 12:35:36 mysqlbackup: INFO: Full Backup operation starts with following threads 1 read-threads 6 process-threads 1 write-threads160823 12:35:36 mysqlbackup: INFO: Starting to copy all innodb files... 160823 12:35:36 mysqlbackup: INFO: Copying /data/mysql/mysql3306/data/ibdata1 (Barracuda file format). 160823 12:35:36 mysqlbackup: INFO: Found checkpoint at lsn 2530796. 160823 12:35:36 mysqlbackup: INFO: Starting log scan from lsn 2530304. 160823 12:35:36 mysqlbackup: INFO: Copying log... 160823 12:35:36 mysqlbackup: INFO: Log copied, lsn 2530805. 160823 12:35:42 mysqlbackup: INFO: Copying /data/mysql/mysql3306/data/mysql/engine_cost.ibd (Barracuda file format). 160823 12:35:43 mysqlbackup: INFO: Completing the copy of innodb files.
然后开始拷贝binlog文件,拷贝完后锁表(注意最后一个binlog文件在锁表后拷贝)#xtrabackup没有备份binlog文件
160823 12:35:43 mysqlbackup: INFO: Starting to copy Binlog files... 160823 12:35:43 mysqlbackup: INFO: Copying /data/mysql/mysql3306/logs/mysql-bin.000001. 160823 12:35:43 mysqlbackup: INFO: Preparing to lock tables: Connected to mysqld server. 160823 12:35:43 mysqlbackup: INFO: Starting to lock all the tables... 160823 12:35:43 mysqlbackup: INFO: All tables are locked and flushed to disk 160823 12:35:43 mysqlbackup: INFO: Copying /data/mysql/mysql3306/logs/mysql-bin.000004. 160823 12:35:43 mysqlbackup: INFO: Completed the copy of binlog files...
最后拷贝非innodb 信息(表结构定义信息、字典信息等)并解锁
160823 12:35:43 mysqlbackup: INFO: Starting to backup all non-innodb files in subdirectories of '/data/mysql/mysql3306/data' 160823 12:35:43 mysqlbackup: INFO: Copying the database directory 'zhangshuo' 160823 12:35:43 mysqlbackup: INFO: Completing the copy of all non-innodb files.
160823 12:35:43 mysqlbackup: INFO: All tables unlocked
查看备份期间生成的general log,创建了备份信息表
2016-08-23T04:35:36.640964Z 13 Query USE mysql 2016-08-23T04:35:36.641747Z 13 Query CREATE TABLE IF NOT EXISTS mysql.backup_progress( `backup_id` BIGINT NOT NULL, `tool_name` VARCHAR(4096) NOT NULL, `error_code` INT NOT NULL, `error_message` VARCHAR(4096) NOT NULL, `current_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`current_state` VARCHAR(200) NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COLLATE=utf8_bin 2016-08-23T04:35:36.642264Z 13 Prepare INSERT INTO mysql.backup_progress( backup_id, tool_name, error_code, error_message, current_state ) VALUES (?,?,?,?,?)
2.apply-log后在datadir目录下可以看到恢复的数据
/usr/local/meb5.7/bin/mysqlbackup --backup-dir=/tmp/2016-08-23_12-35-36/ apply-log
[root@localhost datadir]# ls -lh 总用量 2.6G -rw-r--r--. 1 root root 1.0K 8月 23 12:35 ibbackup_logfile -rw-r--r--. 1 root root 362 8月 23 12:35 ib_buffer_pool -rw-r--r--. 1 root root 1.0G 8月 23 12:35 ibdata1 -rw-r-----. 1 root root 512M 8月 23 12:42 ib_logfile0 -rw-r-----. 1 root root 512M 8月 23 12:42 ib_logfile1 -rw-r-----. 1 root root 512M 8月 23 12:42 ib_logfile2 drwxr-x---. 2 root root 4.0K 8月 23 12:35 mysql -rw-r--r--. 1 root root 177 8月 23 12:35 mysql-bin.000001 -rw-r--r--. 1 root root 445 8月 23 12:35 mysql-bin.000002 -rw-r--r--. 1 root root 177 8月 23 12:35 mysql-bin.000003 -rw-r--r--. 1 root root 1.4K 8月 23 12:35 mysql-bin.000004 -rw-r--r--. 1 root root 76 8月 23 12:35 mysql-bin.index drwxr-x---. 2 root root 4.0K 8月 23 12:35 sys drwxr-x---. 2 root root 4.0K 8月 23 12:35 zhangshuo
3.将apply好的数据恢复到实例
[root@localhost tmp]# /usr/local/meb5.7/bin/mysqlbackup --defaults-file=/etc/my.cnf --backup-dir=/tmp/2016-08-23_12-35-36/ copy-back
160823 14:02:35 mysqlbackup: INFO: Copying /tmp/2016-08-23_12-35-36/datadir/ibdata1. mysqlbackup: Progress in MB: 200 400 600 800 1000 160823 14:02:43 mysqlbackup: INFO: Copying /tmp/2016-08-23_12-35-36/datadir/mysql/engine_cost.ibd. 160823 14:02:43 mysqlbackup: INFO: Copying /tmp/2016-08-23_12-35-36/datadir/mysql/gtid_executed.ibd. 160823 14:02:43 mysqlbackup: INFO: Copying /tmp/2016-08-23_12-35-36/datadir/mysql/help_category.ibd 160823 14:02:43 mysqlbackup: INFO: Starting to copy Binlog files... 160823 14:02:43 mysqlbackup: INFO: Copying /tmp/2016-08-23_12-35-36/datadir/mysql-bin.000001. 160823 14:02:43 mysqlbackup: INFO: Copying /tmp/2016-08-23_12-35-36/datadir/mysql-bin.000002. 160823 14:02:43 mysqlbackup: INFO: Copying the database directory 'mysql' 160823 14:02:43 mysqlbackup: INFO: Copying the database directory 'sys' 160823 14:02:43 mysqlbackup: INFO: Copying the database directory 'zhangshuo' 160823 14:02:43 mysqlbackup: INFO: Completing the copy of all non-innodb files. 160823 14:02:43 mysqlbackup: INFO: Copying the log file 'ib_logfile0' mysqlbackup: Progress in MB: 1200 1400 160823 14:02:47 mysqlbackup: INFO: Copying the log file 'ib_logfile1' mysqlbackup: Progress in MB: 1600 1800 2000 160823 14:02:54 mysqlbackup: INFO: Copying the log file 'ib_logfile2' 160823 14:03:07 mysqlbackup: INFO: Finished copying backup files to '/data/mysql/mysql3306/data' mysqlbackup completed OK!
4.求解,备份成千上万张表时为什么mysqlbackup会比xtrabackup锁表时间短?