mysql之mysqldump 、lvm-snapshot、 xtrabackup的备份

时间:2021-07-10 00:03:16

一、备份类型和备份工具简介


   备份的目的是在灾难发生时用来还原,因此为了保证可以还原,因此需要定期进行恢复测试,另外还需要根据实际情况制定最优的备份和恢复策略。


   1、备份类型

       ①、按备份时服务器是否继续提供服务区分:

冷备(cold backup):备份时读写都不受影响温备(warm backup)全局施加共享锁,只能读,不能写
热备(hot backup):也叫离线备份,读写操作均中止


         不同的存储引擎对备份的支持也是不一样的:

MyISAM:存储引擎可以使用LVM快照功能配合实现热备份,如果没有LVM,则只能实现温备份。//InnoDB则:可以完全支持热备,可使用的热备工具有:xtrabackup, mysqldump等


     ②、按备份操作方式区分:

物理备份:直接复制数据文件。特点:速度快逻辑备份:将数据导出至文本文件中。特点:速度慢、丢失浮点数精度;方便使用文本处理工具直接对其处理、可移植能力强


     ③、按是否备份全部数据还是只备份部分数据区别:

完全备份(full backup):备份全部需要备份的数据增量备份:仅备份上次完全备份或增量备份以后变化的数据差异备份:仅备份上次完全备份依赖变化的数据一般情况下,根据备份策略组合使用:完全+增量;完全+差异


   那么MySQL备份需要备份那些数据呢?

     主要包括:数据、配置文件、二进制日志、事务日志


   2、常用备份工具简介

       ①、mysqldump: 逻辑备份工具,单线程,可以对InnoDB热备、MyISAM温备、Aria温备

                缺点:备份和恢复过程较慢,很难实现差异或增量备份


           mysqldumper:多线程的mysqldump

               缺点:很难实现差异或增量备份


       ②、LVM逻辑卷快照接近于热备的工具,因为要先请求全局锁,而后创建快照,并在创建完成后释放全局锁,可以使用cp、tar等工具进行物理备份,备份和恢复岁都很快

               缺点:很难实现增量备份,并且请求全局锁需要等待一段时间,在繁忙的服务器上尤其如此

备份过程如下:mysql> FLUSH TABLES;mysql> LOCK TABLES然后创建快照:释放锁,而后复制数据


select语句:备份:select clause into outfile '/path/to/somefile'恢复:load data infile '/path/to/somefile' into table 'tb_name'



        ③、Xtarbackup: Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。

   特点: (1)备份过程快速、可靠; (2)备份过程不会打断正在执行的事务; (3)能够基于压缩等功能节约磁盘空间和流量; (4)自动实现备份检验; (5)还原速度快;


        ④、其它工具

               Innobase:商业备份工具,

               innobackup

               mysqlhostcopy:物理备份工具,几乎冷备



二、使用mysqldump对MySQL进行备份与恢复

   1、基本语法:

备份单个数据或单个数据中的指定表:mysqldump [OPTIONS] database [tb1] [tb2]…
备份多个数据库:mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
备份所有数据库:mysqldump [OPTIONS] --all-databases [OPTIONS]


   2、选项[OPTIONS]说明:

--all-databases , -A导出全部数据库。//mysqldump -uroot -p --all-databases--all-tablespaces , -Y导出全部表空间。//mysqldump -uroot -p --all-databases --all-tablespaces--no-tablespaces , -y不导出任何表空间信息。//mysqldump -uroot -p --all-databases --no-tablespaces--character-sets-dir字符集文件的目录//mysqldump -uroot -p --all-databases --character-sets-dir=/usr/local/mysql/share/mysql/charsets--databases, -B导出几个数据库。参数后面所有名字参量都被看作数据库名。//mysqldump -uroot -p --databases test mysql--debug输出debug信息,用于调试。默认值为:d:t:o,/tmp/mysqldump.trace//mysqldump -uroot -p --all-databases --debug//mysqldump -uroot -p --all-databases --debug=” d:t:o,/tmp/debug.trace”--debug-check检查内存和打开文件使用说明并退出。//mysqldump -uroot -p --all-databases --debug-check--debug-info输出调试信息并退出//mysqldump -uroot -p --all-databases --debug-info--default-character-set设置默认字符集,默认值为utf8//mysqldump -uroot -p --all-databases --default-character-set=latin1--delete-master-logsmaster备份后删除日志. 这个参数将自动激活--master-data。//mysqldump -uroot -p --all-databases --delete-master-logs--dump-slave该选项将导致主的binlog位置和文件名追加到导出数据的文件中。设置为1时,将会以CHANGE MASTER命令输出到数据文件;设置为2时,在命令前增加说明信息。该选项将会打开--lock-all-tables,除非--single-transaction被指定。该选项会自动关闭--lock-tables选项。默认值为0。//mysqldump -uroot -p --all-databases --dump-slave=1//mysqldump -uroot -p --all-databases --dump-slave=2--events, -E导出事件。//mysqldump -uroot -p --all-databases --events--flush-logs开始导出之前刷新日志。请注意:假如一次导出多个数据库(使用选项--databases或者--all-databases),将会逐个数据库刷新日志。除使用--lock-all-tables或者--master-data外。在这种情况下,日志将会被刷新一次,相应的所以表同时被锁定。因此,如果打算同时导出和刷新日志应该使用--lock-all-tables 或者--//master-data 和--flush-logs。//mysqldump -uroot -p --all-databases --flush-logs--flush-privileges在导出mysql数据库之后,发出一条FLUSH PRIVILEGES 语句。为了正确恢复,该选项应该用于导出mysql数据库和依赖mysql数据库数据的任何时候。//mysqldump -uroot -p --all-databases --flush-privileges--force在导出过程中忽略出现的SQL错误。//mysqldump -uroot -p --all-databases --force--help显示帮助信息并退出。mysqldump --help--hex-blob使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用该选项。影响到的字段类型有BINARY、VARBINARY、BLOB。//mysqldump -uroot -p --all-databases --hex-blob--host, -h需要导出的主机信息//mysqldump -uroot -p --host=localhost --all-databases--ignore-table不导出指定表。指定忽略多个表时,需要重复多次,每次一个表。每个表必须同时指定数据库和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ……//mysqldump -uroot -p --host=localhost --all-databases --ignore-table=mysql.user--include-master-host-port在--dump-slave产生的'CHANGE MASTER TO..'语句中增加'MASTER_HOST=<host>,MASTER_PORT=<port>'//mysqldump -uroot -p --host=localhost --all-databases --include-master-host-port--lock-all-tables, -x提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭--single-transaction 和--lock-tables 选项。//mysqldump -uroot -p --host=localhost --all-databases --lock-all-tables--lock-tables, -l开始导出前,锁定所有表。用READ LOCAL锁定表以允许MyISAM表并行插入。对于支持事务的表例如InnoDB和BDB,--single-transaction是一个更好的选择,因为它根本不需要锁定表。请注意当导出多个数据库时,--lock-tables分别为每个数据库锁定表。因此,该选项不能保证导出文件中的表在数据库之间的逻辑一致性。不同数据库表的导出状态可以完全不同。//mysqldump -uroot -p --host=localhost --all-databases --lock-tables--log-error附加警告和错误信息到给定文件//mysqldump -uroot -p --host=localhost --all-databases --log-error=/tmp/mysqldump_error_log.err--master-data该选项将binlog的位置和文件名追加到输出文件中。如果为1,将会输出CHANGE MASTER 命令;如果为2,输出的CHANGE MASTER命令前添加注释信息。该选项将打开--lock-all-tables 选项,除非--single-transaction也被指定(在这种情况下,全局读锁在开始导出时获得很短的时间;其他内容参考下面的--single-transaction选项)。该选项自动关闭--lock-tables选项。//mysqldump -uroot -p --host=localhost --all-databases --master-data=1;//mysqldump -uroot -p --host=localhost --all-databases --master-data=2;//mysqldump -uroot -p --host=localhost --all-databases --net_buffer_length=1024--no-data, -d不导出任何数据,只导出数据库表结构。//mysqldump -uroot -p --host=localhost --all-databases --no-data--password, -p连接数据库密码,使用命名管道连接mysql//mysqldump -uroot -p --host=localhost --all-databases --pipe--port, -P连接数据库端口号--result-file, -r直接输出到指定文件中。该选项应该用在使用回车换行对(\\r\\n)换行的系统上(例如:DOS,Windows)。该选项确保只有一行被使用。//mysqldump -uroot -p --host=localhost --all-databases --result-file=/tmp/mysqldump_result_file.txt--routines, -R导出存储过程以及自定义函数。//mysqldump -uroot -p --host=localhost --all-databases --routines--single-transaction该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于InnoDB存储引擎。本选项和--lock-tables 选项是互斥的,因为LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用--quick 选项。//mysqldump -uroot -p --host=localhost --all-databases --single-transaction--socket,-S指定连接mysql的socket文件位置,默认路径/tmp/mysql.sock//mysqldump -uroot -p --host=localhost --all-databases --socket=/tmp/mysqld.sock--tables覆盖--databases (-B)参数,指定需要导出的表名。//mysqldump -uroot -p --host=localhost --databases test --tables test--user, -u指定连接的用户名。--xml, -X导出XML格式.//mysqldump -uroot -p --host=localhost --all-databases --xml


   3、以下图数据库为例

mysql之mysqldump 、lvm-snapshot、 xtrabackup的备份

   开启二进制日志文件,用于日志备份与恢复

[root@localhost ~]# vim /etc/my.cnf//开启二进制文件并指定存放路径log_bin=/data/mydata/logbin/


mysql之mysqldump 、lvm-snapshot、 xtrabackup的备份


   示例1:部分备份和完全备份

       ①、使用mysqldump分别备份hellodb数据库和所有数据库

//备份hellodb数据库[root@localhost ~]# mysqldump -u root -h localhost -p --database hellodb --lock-all-tables --flush-logs --master-data=2 > /tmp/2014-4.sqlEnter password:[root@localhost ~]# ls /tmp/2014-4.sql  log_bin.000001  log_bin.000002  log_bin.index//下面备份所有数据库[root@localhost ~]# mysqldump -u root -h localhost -p --all-databases --lock-all-tables --flush-logs --master-data=2 > /tmp/2014-4-all.sqlEnter password:-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.[root@localhost ~]# ls /tmp/  2014-4-all.sql  log_bin.000001  log_bin.0000032014-4.sql      log_bin.000002  log_bin.index//tmp下生成了备份的sql和二进制日志文件


       ②、删除数据库hellodb并恢复

mysql> DROP database hellodb;    //删除数据库Query OK, 7 rows affected (0.03 sec)mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || da_test            || mydb               || mysql              |+--------------------+[root@localhost ~]# mysql -u root -p < /tmp/2014-4.sql    //恢复数据库Enter password:mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || da_test            || hellodb            || mydb               || mysql              |+--------------------+


       ③、全部数据库的删除与恢复步骤同上


   示例2、增量备份与恢复

       以数据库da_test为例

mysql之mysqldump 、lvm-snapshot、 xtrabackup的备份


    ①、先将数据库da_test备份

[root@localhost ~]# mysqldump -u root -p --database da_test --lock-all-tables --flush-logs --master-data=2 > /tmp/da_test.sqlEnter password:[root@localhost ~]# ls /tmp/2014-4-all.sql  da_test.sql     log_bin.000002  log_bin.0000042014-4.sql      log_bin.000001  log_bin.000003  log_bin.index


    ②、在数据库da_test下test表中插入2条新的内容,并删除数据库da_test

mysql> INSERT INTO test values(8,'jerry',4,'Female','test for logbin',19);mysql> INSERT INTO test values(9,'cat',5,'Female','test for logbin',11);mysql> select * from test;+-----+--------------+-------+--------+------------------------+-----+| TID | Name         | Class | Gender | Course                 | Age |+-----+--------------+-------+--------+------------------------+-----+|   1| Ling Huchong |     1| Male   | Hamogong               |  24||   2| Huang Rong   |     2| Female | Chilian Sehnzhang      |  19||   3| Lu Wushuang  |     2| Female | Jiuyang Shenzhang      |  18||   4| Zhu Ziliu    |     3| Male   | Pixie Jianfa           |  52||   5| Chen Jialuo  |     1| Male   | Xianglong Shiba Zhang  |  22||   6| OU Yangfeng  |     3| Male   | Shengxiang Bannuo Gong |  70||   7| tom          |     1| Male   | NULL                   |  11||   8| jerry        |     4| Female | test forlogbin        |  19||   9| cat          |     5| Female | test forlogbin        |  11|+-----+--------------+-------+--------+------------------------+-----+mysql> DROP DATABASE da_test;    //删除da_testQuery OK, 3 rows affected (0.00 sec)mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || hellodb            || mydb               || mysql              |


     ③、查看二进制文件进行增量备份

           先查看现在操作在二进制文件中记录的位置

mysql> SHOW MASTER STATUS;+----------------+----------+--------------+------------------+| File           | Position | Binlog_Do_DB | Binlog_Ignore_DB |+----------------+----------+--------------+------------------+| log_bin.000004 |     3485 |              |                  |+----------------+----------+--------------+------------------+1 row in set (0.00 sec)

       查看日志:

mysqlbinlog --stop-position=3485 /tmp/log_bin.000004

mysql之mysqldump 、lvm-snapshot、 xtrabackup的备份

   从上图可以看到,使用--stop-position=3485,最后面的几行就是我们的增量操作,新插入到test表中的两条信息。

       ④、进行增量备份

[root@localhost ~]# mysqlbinlog --start-position=3223 --stop-position=3485 /tmp/log_bin.000004 > /tmp/insert.sql[root@localhost ~]# ls /tmp/2014-4-all.sql  2014-4.sql  da_test.sql  insert.sql  log_bin.000001  log_bin.000002  log_bin.000003  log_bin.000004  log_bin.000005  log_bin.index


       ⑤、恢复增量备份

//先恢复增量备份之前备份的数据库da_test[root@localhost ~]# mysql -u root -p < /tmp/da_test.sql  mysql> use da_test;mysql> select * from test;+-----+--------------+-------+--------+------------------------+-----+| TID | Name         | Class | Gender | Course                 | Age |+-----+--------------+-------+--------+------------------------+-----+|   1 | Ling Huchong |     1 | Male   | Hamogong               |  24 ||   2 | Huang Rong   |     2 | Female | Chilian Sehnzhang      |  19 ||   3 | Lu Wushuang  |     2 | Female | Jiuyang Shenzhang      |  18 ||   4 | Zhu Ziliu    |     3 | Male   | Pixie Jianfa           |  52 ||   5 | Chen Jialuo  |     1 | Male   | Xianglong Shiba Zhang  |  22 ||   6 | OU Yangfeng  |     3 | Male   | Shengxiang Bannuo Gong |  70 ||   7 | tom          |     1 | Male   | NULL                   |  11 |+-----+--------------+-------+--------+------------------------+-----+


//再恢复增量备份[root@localhost ~]# mysql -u root -p < /tmp/insert.sql  Enter password:mysql> select * from test;+-----+--------------+-------+--------+------------------------+-----+| TID | Name         | Class | Gender | Course                 | Age |+-----+--------------+-------+--------+------------------------+-----+|   1 | Ling Huchong |     1 | Male   | Hamogong               |  24 ||   2 | Huang Rong   |     2 | Female | Chilian Sehnzhang      |  19 ||   3 | Lu Wushuang  |     2 | Female | Jiuyang Shenzhang      |  18 ||   4 | Zhu Ziliu    |     3 | Male   | Pixie Jianfa           |  52 ||   5 | Chen Jialuo  |     1 | Male   | Xianglong Shiba Zhang  |  22 ||   6 | OU Yangfeng  |     3 | Male   | Shengxiang Bannuo Gong |  70 ||   7 | tom          |     1 | Male   | NULL                   |  11 ||   8 | jerry        |     4 | Female | test for logbin        |  19 ||   9 | cat          |     5 | Female | test for logbin        |  11 |+-----+--------------+-------+--------+------------------------+-----+



三、使用LVM逻辑卷快照对MySQL进行备份与恢复

    前提及注意事项:        

事务日志跟数据文件必须在同一个卷上;创建快照卷之前,要请求MySQL的全局锁;在快照创建完成之后释放锁;请求全局锁完成之后,做一次日志滚动;做二进制日志文件及位置标记(手动进行);日志文件与数据库目录不在同一目录下


   1、请求全局锁,并滚动日志

mysql> flush tables with read lock;mysql> flush logs;


   2、进行位置标记

[root@localhost data]# mysql -e "show master status;" > /data/mydata/binlog/position.txt[root@localhost data]# cat /data/mydata/binlog/position.txtFile    Position    Binlog_Do_DB    Binlog_Ignore_DBlog_bin.000026  106


  3、创建快照并释放全局锁

[root@localhost mydata]# lvcreate -L 1G -s -n mydata-snap -p r /dev/mydata/mylv  Logical volume "mydata-snap" createdmysql> unlock tables;    //释放全局锁Query OK, 0 rows affected (0.00 sec)


   4、创建快照并备份

[root@localhost ~]# mount /dev/mydata/mydata-snap /mnt/ -o ro    //以只读模式挂载快照[root@localhost ~]# mkdir -pv /backup/2014-04-20    //创建备份目录[root@localhost ~]# cp -a /mnt/* /backup/2014-04-20/    //将快照内容拷进备份目录[root@localhost ~]# umount /mnt    //卸载快照[root@localhost ~]# lvremove /dev/mydata/mydata-snap    //删除快照


   5、恢复数据

       前提:将数据库databases全部删掉

   mysql之mysqldump 、lvm-snapshot、 xtrabackup的备份

       ①、提取备份之后的所有事件至某sql脚本中

[root@localhost ~]# mysqlbinlog --start-position=106 /data/mydata/binlog/log_bin.000020 > /data/mydata/binlog/backAfter.txt


       ②、还原数据,修改权限及属主属组等,并启动mysql

[root@localhost data]# cp -a /backup/2014-04-20/* /data/mydata/data/[root@localhost data]# chown -R mysql.mysql /data/

   mysql之mysqldump 、lvm-snapshot、 xtrabackup的备份


       ③、及时点还原

mysql> set session sql_log_bin=0;Query OK, 0 rows affected (0.00 sec)mysql> source /data/mydata/binlog/backAfter.txtQuery OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)mysql> set session sql_log_bin=1;



四、使用Xtrabackup对MySQL进行备份与恢复

       PS:Xtrabackup只能在MYSQL5.6以上版本用哦,为此,我装了个MariaDB来演示本次实验

mysql之mysqldump 、lvm-snapshot、 xtrabackup的备份

   

   1、安装Xtrabackup

     下载:percona-xtrabackup-2.1.8-733.rhel6.x86_64.rpm

[root@localhost ~]# yum -y install percona-xtrabackup-2.1.8-733.rhel6.x86_64.rpm


   2、创建一个最小权限的用户进行备份

MariaDB [(none)]> create user 'backup'@'localhost' identified by 'backup';MariaDB [(none)]> revoke all privileges,grant option from 'backup'@'localhost';MariaDB [(none)]> grant reload,lock tables,replication client on *.* to 'backup'@'localhost';MariaDB [(none)]> flush privileges;

   3、完全备份

[root@localhost ~]# innobackupex --user=backup --password=backup /backup.........innobackupex: Backup created in directory '/backup/2014-04-20_18-30-30'innobackupex: MySQL binlog position: filename 'mysql-bin.000001', position 546472140420 18:30:39  innobackupex: Connection to database server closed140420 18:30:39  innobackupex: completed OK!


       注意:    

一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。innobakupex命令的--apply-log选项可用于实现上述功能。如下面的命令:

innobackupex --apply-log /backup/2014-04-20_18-30-30/.........xtrabackup: starting shutdown with innodb_fast_shutdown = 1InnoDB: FTS optimize thread exiting.InnoDB: Starting shutdown...InnoDB: Shutdown completed; log sequence number 1673750140420 18:37:01  innobackupex: completed OK!


   4、恢复数据

       注意:恢复不用启动MySQ

innobackupex命令的--copy-back选项用于执行恢复操作,其通过复制所有数据相关的文件至mysql服务器DATADIR目录中来执行恢复过程。innobackupex通过backup-my.cnf来获取DATADIR目录的相关信息。

      先删除database;

//我是移到/tmp/mydata/[root@localhost mydata]# mv /data/mydata/* /tmp/mydata/

       恢复数据:

[root@localhost mydata]# innobackupex --copy-back /backup/2014-04-20_18-30-30/.........innobackupex: Starting to copy InnoDB log filesinnobackupex: in '/backup/2014-04-20_18-30-30'innobackupex: back to original InnoDB log directory '/data/mydata'innobackupex: Copying '/backup/2014-04-20_18-30-30/ib_logfile0' to '/data/mydata/ib_logfile0'innobackupex: Copying '/backup/2014-04-20_18-30-30/ib_logfile1' to '/data/mydata/ib_logfile1'innobackupex: Finished copying back files.140420 19:01:55  innobackupex: completed OK!

//别忘了改权限[root@localhost mydata]# chown -R mysql.mysql /data/mydata/

mysql之mysqldump 、lvm-snapshot、 xtrabackup的备份


   5、innobackupex增量备份

命令:innobackupex --incremental /backup --incremental-basedir=BASEDIRBASEDIR:指的是完全备份所在的目录,此命令执行结束后,innobackupex命令会在/backup目录中创建一个新的以时间命名的目录以存放所有的增量备份数据。另外,在执行过增量备份之后再一次进行增量备份时,其--incremental-basedir应该指向上一次的增量备份所在的目录。需要注意的是,增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是完全备份。

增量备份与整理完全备份有着一些不同,尤其要注意的是:(1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。(2)基于所有的备份将未提交的事务进行“回滚”。


  具体备份与恢复操作:

       插入两条新的语句

INSERT INTO test values(8,'jerry',4,'Female','test for logbin',19);mysql> INSERT INTO test values(9,'cat',5,'Female','test for logbin',11);

       备份:

//根据前面的完全备份,生成新的增量备份目录2014-04-20_19-46-52[root@localhost mydata]# innobackupex --incremental /backup --incremental-basedir=/backup/2014-04-20_18-30-30/[root@localhost mydata]# ls /backup/2014-04-20_18-30-30  2014-04-20_19-46-52////再做新的增量备份,生成2014-04-20_19-49-35[root@localhost mydata]# innobackupex --incremental /backup --incremental-basedir=/backup/2014-04-20_18-30-30[root@localhost mydata]# ls /backup/2014-04-20_18-30-30  2014-04-20_19-46-52  2014-04-20_19-49-35

       将增量备份合并到完整备份中:

[root@localhost mydata]# innobackupex --apply-log --redo-only /backup/2014-04-20_18-30-30/////将2014-04-20_19-46-52合并到完整备份中[root@localhost mydata]# innobackupex --apply-log --redo-only /backup/2014-04-20_18-30-30/ --incremental-dir=/backup/2014-04-20_19-46-52/////将2014-04-20_19-49-35合并到完整备份中[root@localhost mydata]# innobackupex --apply-log --redo-only /backup/2014-04-20_18-30-30/ --incremental-dir=/backup/2014-04-20_19-49-35/


       删除/data/mydata下数据,然后恢复

[root@localhost mydata]# rm -rf /tmp/mydata/*[root@localhost mydata]# mv /data/mydata/* /tmp/mydata/MariaDB [(none)]> show databases;+--------------------+| Database           |+--------------------+| information_schema |+--------------------+[root@localhost mydata]# innobackupex --copy-back /backup/2014-04-20_18-30-30/MariaDB [(none)]> show databases;+--------------------+| Database           |+--------------------+| da_test            || hellodb            || information_schema || mydb               || mysql              || performance_schema || test               |+--------------------+MariaDB [(none)]> use da_test;Database changedMariaDB [da_test]> select * from test;    //增量信息也成功还原了+-----+--------------+-------+--------+------------------------+-----+| TID | Name         | Class | Gender | Course                 | Age |+-----+--------------+-------+--------+------------------------+-----+|   1 | Ling Huchong |     1 | Male   | Hamogong               |  24 ||   2 | Huang Rong   |     2 | Female | Chilian Sehnzhang      |  19 ||   3 | Lu Wushuang  |     2 | Female | Jiuyang Shenzhang      |  18 ||   4 | Zhu Ziliu    |     3 | Male   | Pixie Jianfa           |  52 ||   5 | Chen Jialuo  |     1 | Male   | Xianglong Shiba Zhang  |  22 ||   6 | OU Yangfeng  |     3 | Male   | Shengxiang Bannuo Gong |  70 ||   7 | tom          |     1 | Male   | NULL                   |  11 ||   8 | jerry        |     4 | Female | test for logbin        |  19 ||   9 | cat          |     5 | Female | test for logbin        |  11 |+-----+--------------+-------+--------+------------------------+-----+


   6、Xtrabackup的“流”及“备份压缩”功能

Xtrabackup对备份的数据文件支持“流”功能,即可以将备份的数据通过STDOUT传输给tar程序进行归档,而不是默认的直接保存至某备份目录中。要使用此功能,仅需要使用--stream选项即可。如:

[root@localhost backup]# innobackupex --stream=tar  /backup/2014-04-20_18-30-30/ | gzip > /backup/`date +%F_%H-%M-%S`.tar.gz



五、备份策略


        1、将数据和备份放在不同的磁盘设备上;异机或异地备份存储较为理想;

        2、备份的数据应该周期性地进行还原测试;

        3、每次灾难恢复后都应该立即做一次完全备份;

        4、针对不同规模或级别的数据量,要定制好备份策略;

        5、二进制日志应该跟数据文件在不同磁盘上,并周期性地备份好二进制日志文件;


   从备份中恢复应该遵循步骤:

        1、停止MySQL服务器;

        2、记录服务器的配置和文件权限;

        3、将数据从备份移到MySQL数据目录;其执行方式依赖于工具;

        4、改变配置和文件权限;

        5、以限制访问模式重启服务器;mysqld的--skip-networking选项可跳过网络功能;

             方法:编辑my.cnf配置文件,添加如下项:

             skip-networking

             socket=/tmp/mysql-recovery.sock

        6、载入逻辑备份(如果有);而后检查和重放二进制日志;

        7、检查已经还原的数据;

        8、重新以完全访问模式重启服务器;

             注释前面在my.cnf中添加的选项,并重启;







本文出自 “斜视天花板” 博客,请务必保留此出处http://lemidi.blog.51cto.com/8601832/1396538