Xtrabackup实现数据的备份与恢复-mysql
Xtrabackup介绍
Xtrabackup是由percona开源的免费数据库热备份软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁);mysqldump备份方式是采用的逻辑备份,其最大的缺陷是备份和恢复速度较慢,如果数据库大于50G,mysqldump备份就不太适合。
备份原理
备份开始时首先会开启一个后台检测进程,实时检测mysq redo的变化,一旦发现有新的日志写入,立刻将日志记入后台日志文件xtrabackup_log中,之后复制innodb的数据文件一系统表空间文件ibdatax,复制结束后,将执行flush tables with readlock,然后复制.frm MYI MYD等文件,最后执行unlock tables,最终停止xtrabackup_log
xtrabackup增量备份的原理是:
1)、首先完成一个完全备份,并记录下此时检查点LSN;
2)、然后增量备份时,比较表空间中每个页的LSN是否大于上次备份的LSN,若是则备份该页并记录当前检查点的LSN。
Xtrabackup安装
l rpm 安装(下载:https://pan.baidu.com/s/1sl4jByP)
这种安装方法比较简单,只需下载相应的rpm安装包安装即可(注意根据提示安装相应的依赖包)。其中需要的 libev.so.4() 安装包:
https://pan.baidu.com/s/1i4EZfwThttps://pan.baidu.com/s/1i4EZfwT
innobackupex参数介绍:
--defaults-file=/etc/my.cnf:指定my.cnf配置文件位置
--user=root:指定链接数据库的用户名
--apply-log:对xtrabackup的—prepare参数的封装
--copy-back:做数据恢复时把备份文件拷贝到mysql服务器的datadir目录下
--remote-host:通过ssh将备份数据存储到远程的服务器上
--stream:通过指定的数据格式将备份的数据输出到标准输出
--tmpdir:当指定了—remote-host或者是—stream参数后,事务日志需要临时存储到本地磁盘,此参数默认使用了mysql服务器的配置
--use-memory:此参数结合ibbackup使用,类似于xrtabackup的参数use-memory参数
--throttle=IOS:同xtrabackup的参数throttle
--sleep:是给ibbackup使用的,指定每备份1M数据,进程停止考呗多少秒,也是为了减少对正常业务的影响,具体查看ibbackup的手册
-compass:对备份的数据进行压缩,仅仅支持ibbackup,xtrabackup还没有实现
--include=REGEXP对xtrabackup参数的封装,也支持ibbackup;
--database=LIST :列出需要备份的databases,如果没有制定该参数,则所有包含Myisam和innoDB表的database 都会被备份
--password="*****":访问mysql的用户口令,当mysql的root口令为空时省略—password参数。
PORT=3306 :指定mysql监听的端口
--slave-info:slave-info可以记录备份恢 复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。
/mysql_backup:备份位置
--socket=SOCKET :mysql服务器的socket文件的位置
2>/mysql_backup/ innobackupex.log:记录备份时的输出
--databases=数据库名:使用这个参数,针对某个数据库进行备份,如果不加这个参数默认就是全部的库备份
备份阶段
1:全量备份
innobackupex --defaults-file=/etc/my.cnf --user=root --password=root /opt/
2:第一次增量备份
mysql> create database test123;
innobackupex --defaults-file=/etc/my.cnf --user=root --password=root --incremental-basedir=/opt/2019-01-15_20-32-38/ --incremental /opt/incremental
恢复阶段:
1.第一次还原全量恢复
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log --redo-only /opt/2019-01-15_20-32-38
2.第二次还原增量恢复
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log --redo-only /opt/2019-01-15_20-32-38 --incremental-dir=/opt/incremental/2019-01-15_20-40-36/
3.复制所有的备份到他们原来的位置
innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /opt/2019-01-15_20-32-38/
授权新data目录的权限
chown -R mysql.mysql data