一、备份类型和备份工具简介
备份的目的是在灾难发生时用来还原,因此为了保证可以还原,因此需要定期进行恢复测试,另外还需要根据实际情况制定最优的备份和恢复策略。
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-logs master备份后删除日志. 这个参数将自动激活--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=,MASTER_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、以下图数据库为例
开启二进制日志文件,用于日志备份与恢复
[root@localhost ~]# vim /etc/my.cnf //开启二进制文件并指定存放路径 log_bin=/data/mydata/logbin/
示例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.sql Enter 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.sql Enter 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.000003 2014-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为例
①、先将数据库da_test备份
[root@localhost ~]# mysqldump -u root -p --database da_test --lock-all-tables --flush-logs --master-data=2 > /tmp/da_test.sql Enter password: [root@localhost ~]# ls /tmp/ 2014-4-all.sql da_test.sql log_bin.000002 log_bin.000004 2014-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_test Query 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
从上图可以看到,使用--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.txt File Position Binlog_Do_DB Binlog_Ignore_DB log_bin.000026 106
3、创建快照并释放全局锁
[root@localhost mydata]# lvcreate -L 1G -s -n mydata-snap -p r /dev/mydata/mylv Logical volume "mydata-snap" created mysql> 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全部删掉
①、提取备份之后的所有事件至某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> set session sql_log_bin=0; Query OK, 0 rows affected (0.00 sec) mysql> source /data/mydata/binlog/backAfter.txt 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) Query OK, 0 rows affected (0.00 sec) mysql> set session sql_log_bin=1;
四、使用Xtrabackup对MySQL进行备份与恢复
PS:Xtrabackup只能在MYSQL5.6以上版本用哦,为此,我装了个MariaDB来演示本次实验
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 546472 140420 18:30:39 innobackupex: Connection to database server closed 140420 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 = 1 InnoDB: FTS optimize thread exiting. InnoDB: Starting shutdown... InnoDB: Shutdown completed; log sequence number 1673750 140420 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 files innobackupex: 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/
5、innobackupex增量备份
命令: innobackupex --incremental /backup --incremental-basedir=BASEDIR BASEDIR:指的是完全备份所在的目录,此命令执行结束后,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 changed MariaDB [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中添加的选项,并重启;