备份前阶段:
1、备份文件夹必须专用于备份
在xtrabackup文件夹中,不应该有任何其他文件或任何文件夹。因为文件或文件夹时间戳可能会影响下一次增量备份。原因是
if($ option_incremental_basedir ne''){
$ incremental_basedir = $ option_incremental_basedir;
} else {
我的@dirs =`ls -t $ backup_root`;
我的$ inc_dir = $ dirs [0];
格格($ inc_dir);
$ incremental_basedir = File :: Spec-> catfile($ backup_root,$ inc_dir);
ls -t用于确定基于修改时间的最新备份文件夹。最旧的文件夹时间戳可能由于错误而更改,在我们的示例中,清除作业开始工作,并且由于文件夹很大而无法完成。在这种情况下,此清除文件夹(最旧的文件夹)可被视为最新的备份文件夹,xtrabackup会选择错误的文件夹。
2、information_schema未备份
这意味着表创建时间戳丢失。所有表的时间戳都基于它们何时恢复。
备份阶段:
(1)从master进行备份
innobackupex --user = root --password =`keydbgetkey mysqlroot` --host='localhost' --port=3308
复制信息会记录在xtrabackup_binlog_pos_innodb中。
基于ROW的复制事件格式允许仅维护持久表状态。因此,即使临时表中有更改,主日志文件和位置也将相同,所以备份master不会备份临时表。
备份选项--compress --nolock
数据库备份已压缩。它可以节省2/3的空间。no-lock意味着xtrabackup不会发出“FLUSH TABLES WITH READ LOCK”来临时锁定表以获得一致的* frm文件。这意味着如果在备份* frm期间发生某些DDL,则备份可能会不一致。
(2)从slave进行备份
innobackupex --user = root --password =`keydbgetkey mysqlroot` --host='localhost' --port=3308 --slave-info
如果你有一个大的alter table查询运行,xtrabackup将等到“alter query”结束。
mysql> show processlist;
+------+-----------------+-----------+------+---------+--------+----------------------------------+------------------------------------------------+-----------+---------------+
| Id | User | Host | db | Command | Time | State | Info | Rows_sent | Rows_examined |
+------+-----------------+-----------+------+---------+--------+----------------------------------+------------------------------------------------+-----------+---------------+
| 1 | event_scheduler | localhost | NULL | Daemon | 260586 | Waiting on empty queue | NULL | 0 | 0 |
| 157 | root | localhost | NULL | Sleep | 1 | | NULL | 1 | 4 |
| 192 | system user | | NULL | Connect | 258744 | Waiting for master to send event | NULL | 0 | 0 |
| 193 | system user | | yax | Connect | 5923 | altering table | alter table creative_content drop column stacy | 0 | 0 |
| 5389 | root | localhost | NULL | Query | 4 | Waiting for backup lock | LOCK TABLES FOR BACKUP | 0 | 0 |
| 5390 | root | localhost | NULL | Query | 0 | init | show processlist | 0 | 0 |
+------+-----------------+-----------+------+---------+--------+----------------------------------+------------------------------------------------+-----------+---------------+
6 rows in set (0.00 sec)
这里单独提一下 Waiting for backup lock。
xtrabackup详见https://www.percona.com/doc/percona-server/LATEST/management/backup_locks.html
mariabackup详见https://mariadb.com/kb/en/library/backup-lock/
在没有启用GTID的情况下从多线程从站(MTS)进行备份,此时--slave-info无法添加。
innobackupex --user = root --password =`keydbgetkey mysqlroot` --host='localhost' --port=3308 --slave-info
innobackupex: Error: The --slave-info option requires GTID enabled for a multi-threaded slave
对于没有启用GTID的MTS,--safe-slave-backup是可选的。它导致执行点 - 时间恢复的不同机制。
innobackupex --user = root --password =`keydbgetkey mysqlroot` --host='localhost' --port=3308 --safe-slave-backup
或者
innobackupex --user = root --password =`keydbgetkey mysqlroot` --host='localhost' --port=3308
不锁表进行备份
使用此选项可在备份时禁用备份锁定。仅当所有表都是InnoDB并且您不关心备份的二进制日志位置时才使用它。
如果备份用于point-in-time-recovery,则根本不能使用无锁。
恢复阶段:
未完待续。。。
http://funwithmysql.blogspot.com/2017/05/xtrabackup-backup-restore.html