发布于 2016-01-02 07:34:22 | 164 次阅读 | 评论: 0 | 来源: PHPERZ
Percona Server Mysql分支数据库
Percona Server是MySQL的改进版本,使用 XtraDB 存储引擎,在功能和性能上较 MySQL 有着很显著的提升,如提升了在高负载情况下的 InnoDB 的性能,为 DBA 提供了一些非常有用的性能诊断工具,另外有更多的参数和命令来控制服务器行为。
直接使用官方的二进制安装。
https://www.percona.com/doc/percona-xtradb-cluster/5.6/installation.html#installation
innobackupex:
这个是其实是下面三个工具的一个perl脚本封装,可以备份MyISAM, InnoDB, XtraDB表。
xtrabackup:
一个由C编译而来的二进制文件,只能备份InnoDB和XtraDB数据。
xbcrypt:
用来加密或解密备份的数据。
xbstream:
用来解压或压缩xbstream格式的压缩文件。
数据库备份的准备工作:
新建一个最小权限的用户进行备份。
mysql语法:
mysql> CREATE USER 'larry'@'localhost' IDENTIFIED BY 'QAZWSX123';
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'larry'@'localhost';
mysql> GRANT RELOAD,LOCK TABLES, REPLICATION CLIENT ON *.* TO 'larry'@'localhost';
mysql> FLUSH PRIVILEGES;
创建备份的数据目录
root@hostname# mkdir /databackups
使用innobackupex进行一次完整的备份
root@hostname# innobackupex --user=databaseusername --password=QAZWSX123 /databackups
...
...
...
140401 12:02:20 innobackupex: completed OK!
备份过程的说明:
1.它将备份数据文件存放到了我新建的备份数据存放目录,并且它保存至了一个以时间命令的目录中。
2.binlogs文件的时间点,备份时它正处于那个二进制日志文件的哪个点上
3.完成备份立即断开与databases server的连接
4.通知备份完成
备份目录中文件的说明
(1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;TARE
在使用innobackupex进行备份时,还可以使用--no-timestamp选项来阻止命令自动创建一个以时间命名的目录;如此一来,innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据。
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。
innobakupex命令的--apply-log选项可用于实现上述功能。如下面的命令:
root@hostname# innobackupex --user=databaseusername --password=QAZWSX123 --apply-log /databackups/2014-04-01_12-41-31/
/databackups/2014-04-01_12-41-31/这个目录就是刚才使用完全备份自动生成的备份目录。
140401 12:47:58 innobackupex: completed OK!
出现这行,备份成功。
在实现“准备”的过程中,innobackupex通常还可以使用--use-memory选项来指定其可以使用的内存的大小,默认通常为100M。如果有足够的内存可用,可以多划分一些内存给prepare的过程,以提高其完成速度。
切记,不能再刚整理(准备)完成就用来恢复,什么时候需要恢复就什么时候整理!
从一个完全备份中恢复数据
恢复不能启动mysql
innobackupex命令的--copy-back选项用于执行恢复操作,其通过复制所有数据相关的文件至mysql服务器DATADIR目录中来执行恢复过程。innobackupex通过backup-my.cnf来获取DATADIR目录的相关信息。
[root@Master ~]# innobackupex --copy-back --user=larry --password=QAZWSX123 /backups/2014-04-01_12-41-31/
......
......
......
140401 12:56:00 innobackupex: completed OK!
出现上面这行则执行成功。
然后在mysql数据目录更改其文件及目录的所有者和属组。
root@hostname# chown -R mysql:mysql /var/lib/mysql
最后启动mysql。
service mysql start
验证数据备份恢复的完整性。
查看数据库及数据表。
建议:在完成备份的恢复过程后,我们应当立即做一次完整备份。
[root@Master data]# innobackupex --user=databaseusername --password=QAZWSX123 /databackups
数据库的增量备份:
第一次的增量备份:
root@hostname# innobackupex --incremental /backups/ --incremental-basedir=/backups/2014-04-01_13-06-56/
说明:
--incremental 明确说明我们的操作是增量备份
--incremental-basedir= 明确说明我们是相对于谁做增量(上次完全/上次增量),如果每一次都相对于上次的完全备份做增量备份,那就是差异备份!
需要注意的是,增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是完全备份。