菜鸟学Linux 第080篇笔记 mysql备份 xtrabackup




内容总览

percona-xtrabackup 备份软件安装

使用软件备份数据库

备份二进制日志文件

增量备份数据库

还原数据库

还原二进制日志文件操作

使用该软件进行单表备份(未验证,非本人所写)







二进制日志相关的几个选项

innodb_support_xa={TRUE|FALSE}

默认为开启

sync_binlog=0表示不同步

备份时设定为1






percona

ibbackup: InnoDB online physical backup (商业软件)

full

incremental

MyISAM: warm backup, full


$5000



mysqldump (对大数据库来说,备份和恢复时间较长)


LVM -->  mylvmbackup(perl scripts)

几乎热备,,但还是会停一点点



percona:

xtrabackup (开源)

xtradb: innodb的增强版 (推荐使用此引擎)

innodb



www.percona.com 下载rpm安装包



1.安装xtrabackup

# rpm -ivh percona-xtrabackup-2.0.0-417.rhel5.i386.rpm



2. 实现完全备份Mysql 数据库

# innobackupex --help  帮助信息

--user=Mysql-username



完全备份

(注意备份前 my.cnf 配置里必须已经配置了 datadir=/path/file 数据目录)

# innobackupex --user=root --password=mysql /backup/



备份的文件解析

数据库文件夹

backup-my.cnf   备份命令用到的配置选项信息


ibdatal 表空间


xtrabackup_binlog_info 二进制日志文件名 和位置


xtrabackup_binary   备份使用的什么工具执行的


xtrabackup_logfile   数据


xtrabackup_checkpoints  备份信息(根据此来做增量备份)




3. 还原

准备工作

# innobackupex --apply-log /backup/2017-01-13_20-02-44/


mysql> FLUSH LOGS;


# cp mysql-bin.000010 /root/


模拟数据损坏

# service mysqld stop


# rm -rf /mydata/data/*


还原数据库

# innobackupex --copy-back /backup/2017-01-13_20-02-44/


# chown -R mysql.mysql /mydata/data/*


# service mysqld start


即时点还原

# mysqlbinlog mysql-bin.000001 > /tmp/binary-log.sql


mysql> SET sql_log_bin=0;


mysql> SOURCE /tmp/binary-log.sql


mysql> SET sql_log_bin=1;

(完全备份恢复完成)



4.增量备份

增量备份要基于完全备份,注意如果当完全备份恢复一次后,

需要再对其做完全备份,因为之前的完全备份已经对当前恢复的数据库无效

切记切记


完全备份(假设我之前没有做过完全备份这是第一次)

# innobackupex --user=root --password=mysql /backup


增量备份

# innobackupex --user=root --password=mysql --incremental 

/backup/ --incremental-basedir=/backup/2017-01-13_20-58-02/

(此为一条命令)


如第二次增量备份的话就要使用第一次增量备份的路径

即 --incremental-basedir=第一次的增量备份路径



5. 还原 完全备份+增量备份 

准备完全备份

# innobackupex --apply-log --redo-only /backup/2017-01-13_20-58-02/


准备增量备份

# innobackupex --apply-log --redo-only /backup/2017-01-13_20-58-02/

--incremental-dir=/backup/2017-01-13_21-06-29/

(此为一条 命令  注意这里使用的是 --incremental-dir 不要混了)



模拟mysql数据库损坏

# service mysqld stop 

# rm -rf /mydata/data/*



还原备份

# innobackupex --copy-back /backup/2017-01-13_20-58-02/

(指定时要指的是完全备份目录)


# service mysqld start


如果还有二进制日志还原 上边已经有了,,这里不再重述

注意还原二进制日志时,一定要把二进制日志记录给关闭

要不然你还原的操作都被记录到新的数据库里边了而这个没有什么用

你懂得,,

此时增量备份和完全备份恢复完成




重点:

注意这里未详细讲解二进制日志备份,这个是非常重要的,在恢复到即时点数据库时

因为生产环境中二进制日志文件和数据文件理应分开的,不会放在同一个硬盘上

还有备份二进制文件时要先将mysql服务器停掉再进行备份


还原二进制日志文件之前要临时停掉二进制日志记录功能

SET sql_log_bin=0;





此下边章节非个人所写 也未验证

6、导入或导出单张表


默认情况下,InnoDB表不能通过直接复制表文件的方式在mysql服务器之间进行移植,即便使用了innodb_file_per_table选项。而使用Xtrabackup工具可以实现此种功能,不过,此时需要“导出”表的mysql服务器启用了innodb_file_per_table选项(严格来说,是要“导出”的表在其创建之前,mysql服务器就启用了innodb_file_per_table选项),并且“导入”表的服务器同时启用了innodb_file_per_table和innodb_expand_import选项。


(1)“导出”表

导出表是在备份的prepare阶段进行的,因此,一旦完全备份完成,就可以在prepare过程中通过--export选项将某表导出了:

# innobackupex --apply-log --export /path/to/backup


此命令会为每个innodb表的表空间创建一个以.exp结尾的文件,这些以.exp结尾的文件则可以用于导入至其它服务器。


(2)“导入”表

要在mysql服务器上导入来自于其它服务器的某innodb表,需要先在当前服务器上创建一个跟原表表结构一致的表,而后才能实现将表导入:

mysql> CREATE TABLE mytable (...)  ENGINE=InnoDB;


然后将此表的表空间删除:

mysql> ALTER TABLE mydatabase.mytable  DISCARD TABLESPACE;


接下来,将来自于“导出”表的服务器的mytable表的mytable.ibd和mytable.exp文件复制到当前服务器的数据目录,然后使用如下命令将其“导入”:

mysql> ALTER TABLE mydatabase.mytable  IMPORT TABLESPACE;