mysql备份与还原

tar 备份:

基于文件系统的备份
/data/mysql

1、停止数据库

[root@uplook ~]# /etc/init.d/mysqld stop

2、使用tar备份数据库文件

mkdir /server/backup -p

cd /server/backup

tar cJvf /server/backup/database.$(date +%F).tar.xz /data/mysql/

还原:
模拟数据库出现故障 ,MySQL 数据文件删除

解压备份文件:# tar xf database.2016-01-06.tar.xz -C /data/mysql

数据文件授权
# chown -R mysql.mysql /data/mysql

启动
service mysqld start


MySQL备份还原

备份简介:
类型:
1、根据服务是否在线继续分为热备份、温备份和冷备份。
热备份:读写均不受影响;
温备份:仅可以执行读操作;
冷备份:也成为离线备份,读写操作均终止。
2、根据备份时是否之间复制数据文件分为物理备份和逻辑备份。
物理备份:直接复制数据文件;速度快。
逻辑备份:通常是将数据导出至文本文件中。速度慢、丢失浮点数精度;方便使用文本根据直接进行处理、可移植能力强;
3、根据备份数据集内容分为完全备份、增量备份和差异备份。
完全备份:备份全部数据;
增量备份:仅备份上次完全备份或增量备份以后变化的数据;
差异备份:仅备份上次完全备份以来变化的数据;

内容:
	数据文件,配置文件,二进制日志(用于即时点还原),事务日志
	
策略:
	完全+增量,完全+差异
工具:
	msqldump
	lv:逻辑卷快照
	InnoDB:商业工具
	Xtrabackup:开源工具   物理备份
	mysqlbackup:MySQL企业版备份工具

mysqldump

1、备份恢复单个数据库
备份:
mydqldump -u 用户 –p’密码’ –default-character-set=Iatin1 数据库名 [|gzip] > 备份文件名(数据库默认字符集为Iatin1)

 示例:备份school数据库
 mysqldump -uroot -p'123' --default-character-set=gbk -B school > /tmp/school.$(date +%F).sql
 
 查看备份内容:
 egrep -v "\*|--|^$"  /tmp/school.$(date +%F).sql
 注意:-B 作用:创建数据库和切换到数据库,恢复时不用创建数据库和删表。

备份多个库,-B 数据库1 数据库2 ...

恢复:
	1)MySQL中用source命令
	 删除:mysql -uroot -p -e 'drop database school;'
	 查看:mysql -uroot -p -e 'show databases;' | grep school
	 恢复:mysql> source /tmp/school.2015-11-17.sql;
	 查看: mysql -uroot -p -e 'select * from school.Books;'
	2)mysql命令恢复
	 删除:mysql -uroot -p -e 'drop database school;'
	 查看:mysql -uroot -p -e 'show databases;' | grep school
	 恢复:mysql -uroot -p < /tmp/school.2015-11-17.sql 
	 查看: mysql -uroot -p -e 'select * from school.Books;'

2、备份恢复单个表
备份:
mysqldump -u 用户名 -p 数据库名 表名 > 备份的文件名
示例:
mysqldump -uroot -p school Books > /tmp/Books.$(date +%F).sql
恢复:
mysql -uroot -p -e ‘drop table school.Books;’
mysql -uroot -p -e ‘use school;show tables;’ | grep Books
mysql -uroot -p school < /tmp/Books.2015-11-17.sql
mysql -uroot -p -e ‘select * from school.Books;’
备份多个表:
mysqldump -u 用户名 -p 数据库名 表名1 表名2 > 备份的文件名

    mysqldump  -uroot -p123456  test2 user2  > /home/user2.sql 		备份指定数据库的指定表  
	mysql -u root -p123456         test2 < /home/user2.sql                 还原备份的表到指定数据库中
	
	数据库test2中有两个表

mysql> show tables;
±----------------+
| Tables_in_test2 |
±----------------+
| password |
| user2 |

mysql> desc password;
±---------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±---------±------------±-----±----±--------±------+
| id | int(11) | YES | | NULL | |
| password | varchar(50) | YES | | NULL | |
±---------±------------±-----±----±--------±------+
2 rows in set (0.00 sec)

mysql> desc user2;
±------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±------------±-----±----±--------±------+
| id | int(11) | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
±------±------------±-----±----±--------±------+
2 rows in set (0.00 sec)

备份数据库test2中的两个表
mysqldump -uroot -p123456 test2 user2 password > /home/usrpass.sql

还原两个表数据到数据库test2
mysql -u root -p123456 test2 < /home/usrpass.sql

3、备份数据结构
-d只备份库结构,不包含数据内容(备份数据库的表结构和数据库结构)

4、增量备份
前提:
1)是要开启MySQL log-bin日志功能,重启MySQL
vim /etc/my.cnf
log_bin = /data/mysql/data/mysql-bin
2)存在一个完全备份
生产环境一般凌晨某个时刻进行全备
mkdir -p /server/backup
mysqldump -uroot -p --default-character-set=gbk --single-transaction -F -B school |gzip > /server/backup/school_$(date +%F).sql.gz
InnoDB 表在备份时,通常启用选项 --single-transaction 来保证备份的一致性

主上备份从上导入的时候在主上设置innodb
用全备+binlog做基于时间点的恢复的时候,这个参数记录的数据给你提供了binlog恢复的起点
mysqldump 的这2个参数 --single-transaction --master-data

MySQL增量恢复案例图解
	
实例:
	准备数据库和表
	mysql> create database uplooking default character set gbk collate gbk_chinese_ci;
	=======================================================
	学生表:Student(Sno,Sname,Ssex,Ssage,Ssdept)
	-------------------(学号-主键,姓名,性别,年龄,所在系)
	=======================================================
	use uplooking

CREATE TABLE Student (
Sno int(10) NOT NULL COMMENT ‘学号’,
Sname varchar(16) NOT NULL COMMENT ‘姓名’,
Ssex char(2) NOT NULL COMMENT ‘性别’,
Sage tinyint(2) NOT NULL DEFAULT ‘0’ COMMENT ‘学生年龄’,
Sdept varchar(16) DEFAULT ‘NULL’ COMMENT ‘学生所在系别’,
PRIMARY KEY (Sno)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=gbk;

	表中插入数据
INSERT INTO `Student` VALUES (1, '陆亚', '男', 24, '计算机网络');
INSERT INTO `Student` VALUES (2, 'tom', '男', 26, '英语');
INSERT INTO `Student` VALUES (3, '张阳', '男', 21, '物流管理');
INSERT INTO `Student` VALUES (4, 'alex', '女', 22, '电子商务');	
	
半夜零点手工全备
	date -s "20151117"
	通过脚本备份:sh mysqlbak.sh
	查看:ls -l /server/backup/

备份脚本:
#!/bin/sh
#parameter defined
BAKDATE=date +%F
MYUSER=root
MYPASS=“123456”
MYSOCK=/var/lib/mysql/mysql.sock
DBNAME=“uplooking”
MAIN_PATH=/server/backup
DATA_PATH=/server/backup
DATA_FILE=KaTeX parse error: Expected group after '_' at position 25: …H}/mysql_backup_̲{BAKDATE}.sql.gz

#command defined
MYSQL_PATH=/usr/bin
#MYSQL_DUMP=“ M Y S Q L P A T H / m y s q l d u m p − u MYSQL_PATH/mysqldump -u MYSQLPATH/mysqldumpuMYUSER -p$MYPASS -S M Y S O C K − A − B − F − − s i n g l e − t r a n s a c t i o n − e " M Y S Q L D U M P = " MYSOCK -A -B -F --single-transaction -e" MYSQL_DUMP=" MYSOCKABFsingletransactione"MYSQLDUMP="MYSQL_PATH/mysqldump -u M Y U S E R − p MYUSER -p MYUSERpMYPASS -S $MYSOCK -F -B $DBNAME --default-character-set=gbk --single-transaction -e”
#backup command
${MYSQL_DUMP} | gzip > $DATA_FILE
备份后查看binlog情况
[root@uplooking ~]# ls -lrt /var/lib/mysql | grep “mysql-bin”
-rw-rw----. 1 mysql mysql 5038 11月 17 00:05 mysql-bin.000002
-rw-rw----. 1 mysql mysql 242 11月 17 00:09 mysql-bin.000003
-rw-rw----. 1 mysql mysql 120 11月 17 00:09 mysql-bin.000004
-rw-rw----. 1 mysql mysql 136 11月 17 00:09 mysql-bin.index
-rw-rw----. 1 mysql mysql 242 11月 17 2015 mysql-bin.000001

备份后继续插入数据:
	INSERT INTO Student values(0005,'xumubin','男',29,'中文专业');
	INSERT INTO Student values(0006,'wangzhao','男',21,'导弹专业');
	
模拟用户破坏数据
	mysql> drop database uplooking;

增量恢复全过程
	大概了解删除了以为没有用的数据库。
	1)检查凌晨备份
	2)检查全备后的所有binlog
	[root@uplooking ~]# ls -lrt /var/lib/mysql/mysql-bin.*
	-rw-rw----. 1 mysql mysql 5038 11月 17 00:05 /data/mysql/data/mysql-bin.000002
	-rw-rw----. 1 mysql mysql  242 11月 17 00:09 /data/mysql/data/mysql-bin.000003
	-rw-rw----. 1 mysql mysql  136 11月 17 00:09 /data/mysql/data/mysql-bin.index
	-rw-rw----. 1 mysql mysql  768 11月 17 00:18 /data/mysql/data/mysql-bin.000004
	-rw-rw----. 1 mysql mysql  242 11月 17 2015 /data/mysql/data/mysql-bin.000001
	3)立即刷新并备份出binlog
	[root@uplooking ~]# mysqladmin -uroot -p flush-logs
	[root@uplooking ~]# ls -lrt /var/lib/mysql/mysql-bin.*
	[root@uplooking ~]# cp /var/lib/mysql/mysql-bin.000004 /server/backup/
	提示:根据时间点及前一个binlog可以知道发现问题时刻前binlog日志为mysql-bin.000004
	
	4)恢复binlog生成sql语句
	[root@uplooking ~]# cd /server/backup/
	[root@uplooking backup]# mysqlbinlog mysql-bin.000004 > bin.log
	[root@uplooking backup]# egrep -v "^#|^$|\*" bin.log 
	
	5)恢复凌晨备份
	[root@uplooking ~]# cd /server/backup/
	[root@uplooking backup]# gzip -d mysql_backup_2015-11-17.sql.gz 
	[root@uplooking backup]# mysql -uroot -p 

Enter password:
±----±-------±-----±-----±----------------+
| Sno | Sname | Ssex | Sage | Sdept |
±----±-------±-----±-----±----------------+
| 1 | 陆亚 | 男 | 24 | 计算机网络 |
| 2 | tom | 男 | 26 | 英语 |
| 3 | 张阳 | 男 | 21 | 物流管理 |
| 4 | alex | 女 | 22 | 电子商务 |
±----±-------±-----±-----±----------------+
6)恢复增量备份
注意:恢复增量是将binlog恢复的sql语句中drop database语句删除
删除bin.log中的drop database uplooking
[root@uplooking backup]# mysql -uroot -p < bin.log
Enter password:
[root@uplooking backup]# mysql -uroot -p -e ‘select * from uplooking.Student;’
Enter password:
±----±---------±-----±-----±----------------+
| Sno | Sname | Ssex | Sage | Sdept |
±----±---------±-----±-----±----------------+
| 1 | 陆亚 | 男 | 24 | 计算机网络 |
| 2 | tom | 男 | 26 | 英语 |
| 3 | 张阳 | 男 | 21 | 物流管理 |
| 4 | alex | 女 | 22 | 电子商务 |
| 5 | xumubin | 男 | 29 | 中文专业 |
| 6 | wangzhao | 男 | 21 | 导弹专业 |
±----±---------±-----±-----±----------------+

mysqlbinlog增量恢复方式
	基于时间点恢复
	1)指定开始时间到结束时间
	myslbinlog mysqlbin.000008 --start-datetime=’2014-10-45 01:10:46’ --stop-datetime=’2014-10-45 03:10:46’-r time.sql
	2)指定开始时间到文件结束
	myslbinlog mysqlbin.000008 --start-datetime=’2014-10-45 01:10:46’ -d esen -r time.sql
	3)从文件开头到指定结束时间
	myslbinlog mysqlbin.000008 --stop-datetime=’2014-10-45 03:10:46’ -d esen -r time.sql
	
	基于位置点的增量恢复
	1)指定开始位置到结束位置
	myslbinlog mysqlbin.000008 --start-position=510 --stop-position=1312 -r pos.sql
	2)指定开始位置到文件结束
	myslbinlog mysqlbin.000008 --start-position=510 -r pos.sql
	3)从文件开始位置到指定结束位置
	myslbinlog mysqlbin.000008 --stop-position=1312 -r pos.sql

基于时间点实例:
	恢复全备:
	[root@uplooking backup]# mysql -uroot -p < mysql_backup_2015-11-17.sql 
	[root@uplooking backup]# mysql -uroot -p -e 'select * from uplooking.Student;'

Enter password:
±----±-------±-----±-----±----------------+
| Sno | Sname | Ssex | Sage | Sdept |
±----±-------±-----±-----±----------------+
| 1 | 陆亚 | 男 | 24 | 计算机网络 |
| 2 | tom | 男 | 26 | 英语 |
| 3 | 张阳 | 男 | 21 | 物流管理 |
| 4 | alex | 女 | 22 | 电子商务 |
±----±-------±-----±-----±----------------+
查看时间点:
[root@uplooking backup]# mysqlbinlog mysql-bin.000004
我们采用从文件开头到指定结束时间
[root@uplooking backup]# mysqlbinlog mysql-bin.000004 --stop-datetime=‘2015-11-17 0:16:13’> time.sql
提示:比最后一条正确语句时间稍微往后即可。
恢复增量备份
[root@uplooking backup]# mysql -uroot -p < time.sql
Enter password:
[root@uplooking backup]# mysql -uroot -p -e ‘select * from uplooking.Student;’
Enter password:
±----±---------±-----±-----±----------------+
| Sno | Sname | Ssex | Sage | Sdept |
±----±---------±-----±-----±----------------+
| 1 | 陆亚 | 男 | 24 | 计算机网络 |
| 2 | tom | 男 | 26 | 英语 |
| 3 | 张阳 | 男 | 21 | 物流管理 |
| 4 | alex | 女 | 22 | 电子商务 |
| 5 | xumubin | 男 | 29 | 中文专业 |
| 6 | wangzhao | 男 | 21 | 导弹专业 |
±----±---------±-----±-----±----------------+

基于位置点实例:
	恢复全备
	[root@uplooking backup]# mysql -uroot -p < mysql_backup_2015-11-17.sql 
	生产位置点恢复增量SQL(采用开始位置到指定结束位置)
	[root@uplooking backup]# mysqlbinlog mysql-bin.000004 --stop-position=661 > pos.sql
	[root@uplooking backup]# mysql -uroot -p < pos.sql 
	Enter password: 
	[root@uplooking backup]# mysql -uroot -p -e 'select * from uplooking.Student;'

Enter password:
±----±---------±-----±-----±----------------+
| Sno | Sname | Ssex | Sage | Sdept |
±----±---------±-----±-----±----------------+
| 1 | 陆亚 | 男 | 24 | 计算机网络 |
| 2 | tom | 男 | 26 | 英语 |
| 3 | 张阳 | 男 | 21 | 物流管理 |
| 4 | alex | 女 | 22 | 电子商务 |
| 5 | xumubin | 男 | 29 | 中文专业 |
| 6 | wangzhao | 男 | 21 | 导弹专业 |
±----±---------±-----±-----±----------------+

课堂演示:

MySQL完全加增量备份与还原
0点 完全备份 lianxi
lianxi.2016-01-06-00:02:53.sql

0:06 插入两条数据
| 908 | 赵六 | 男 | 1999 | 计算机系 | 江西省赣州市 |
| 909 | 王霞 | 女 | 1998 | 中文系 | 云南省昆明市

1、模拟删除数据
02:11:46 误删除
# mysql -uroot -p123456 -e ‘delete from lianxi.student;’

2、模拟用户插入一条数据
[root@uplook backup]# mysql -uroot -p123456 -e “insert into lianxi.student values(910,‘林坤’,‘男’,1985,‘中文系’,‘湖北省武汉市’);”

3、2:20 发现数据只有最后一条
[root@uplook backup]# mysql -uroot -p123456 -e ‘select * from lianxi.student;’
Warning: Using a password on the command line interface can be insecure.
±----±-------±-----±------±-----------±-------------------+
| id | name | sex | birth | department | address |
±----±-------±-----±------±-----------±-------------------+
| 910 | 林坤 | 男 | 1985 | 中文系 | 湖北省武汉市 |
±----±-------±-----±------±-----------±-------------------+

4、要求恢复所有数据
1)检查凌晨备份

2)检查全备后的所有binlog
3)立即刷新并备份出binlog
	# mysqladmin -uroot -p123456 flush-logs
4)恢复binlog生成sql语句
	
	# mysqlbinlog mysql-bin.000001 > /server/backup/bin.log
5)恢复0点完全备份
# mysql -uroot -p123456 < /server/backup/lianxi.2016-01-06-00\:02\:53.sql 
[root@uplook mysql]# mysql -uroot -p -e 'select * from lianxi.student;'

Enter password:
±----±----------±-----±------±-------------±-------------------+
| id | name | sex | birth | department | address |
±----±----------±-----±------±-------------±-------------------+
| 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 |
| 902 | 张老二 | 男 | 1986 | 中文系 | 北京市昌平区 |
| 903 | 张三 | 女 | 1990 | 中文系 | 湖南省永州市 |
| 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省阜新市 |
| 905 | 王五 | 女 | 1991 | 英语系 | 福建省厦门市 |
| 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 |
| 907 | 钱七 | 男 | 1997 | 英语系 | 广东省深圳市 |
±----±----------±-----±------±-------------±-------------------+
6)恢复binlog

方法一:恢复binlog时绕过错误删除语句
方法二:基于时间点恢复

mysqlbinlog mysql-bin.000001 --start-datetime=‘2016-1-6 0:06:08’ --stop-datetime=‘2016-1-6 0:08:28’ -r time1.sql

mysqlbinlog mysql-bin.000001 --start-datetime=‘2016-1-6 2:17:03’ -r time2.sql

方法三:基于位置点恢复
mysqlbinlog mysql-bin.000002 --start-position=6667 --stop-position=7104 -r pos1.sql
 mysqlbinlog mysql-bin.000002 --start-position=7212 --stop-position=7315 -r pos2.sql

xtrabackup

简介:
Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。
Xtrabackup有两个主要的工具:xtrabackup、innobackupex

安装:

yum install -y libev-4.03-3.el6.x86_64.rpm percona-xtrabackup-2.3.2-1.el6.x86_64.rpm

或者:

[root@uplooking tools]# rpm -ivh percona-xtrabackup-2.3.2-1.el6.x86_64.rpm 
warning: percona-xtrabackup-2.3.2-1.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
error: Failed dependencies:
libev.so.4()(64bit) is needed by percona-xtrabackup-2.3.2-1.el6.x86_64
#根据提示,需要安装libev-4.03-3.el6.x86_64.rpm 
perl(DBD::mysql) is needed by percona-xtrabackup-2.3.2-1.el6.x86_64
#根据提示,需要安装perl-DBD-MySQL
perl(Time::HiRes) is needed by percona-xtrabackup-2.2.5-5027.el6.x86_64
#根据提示,需要安装perl-Time-HiRes

rpm -ivh percona-xtrabackup-2.3.2-1.el6.x86_64.rpm 

完全备份
innobackupex --user=root --password=1 /server/backup/fullbackup/

恢复:
innobackupex --apply-log /server/backup/fullbackup/2016-01-06_16-26-36/

/etc/init.d/mysqld stop
rm -rf /data/mysql

innobackupex --copy-back /server/backup/fullbackup/2016-01-06_16-26-36/

chown -R /data/mysql /usr/local/mysql

1、完全备份
innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/

 innobakupex备份介绍
	使用innobakupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命令的目录中。
	(1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。
	(2)xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。
	(3)xtrabackup_binlog_pos_innodb —— 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。
	(4)xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;
	(5)backup-my.cnf —— 备份命令用到的配置选项信息;
在使用innobackupex进行备份时,还可以使用--no-timestamp选项来阻止命令自动创建一个以时间命名的目录;如此一来,innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据。

准备一个完全备份:
	# innobackupex --apply-log  /path/to/BACKUP-DIR
	innobackupex --user=root --password=123 --default-file=/etc/my.cnf --socket=/tmp/mysql.sock /server/backup/
	
	[root@uplooking backup]# ls -l /server/backup/2015-11-17_04-24-45/
	总用量 77868
	-rw-r-----. 1 root root      386 11月 17 04:24 backup-my.cnf
	-rw-r-----. 1 root root 79691776 11月 17 04:24 ibdata1
	drwx------. 2 root root     4096 11月 17 04:24 jiaowu
	drwx------. 2 root root     4096 11月 17 04:24 mysql
	drwx------. 2 root root     4096 11月 17 04:24 performance_schema
	drwx------. 2 root root     4096 11月 17 04:24 school
	drwx------. 2 root root     4096 11月 17 04:24 test
	drwx------. 2 root root     4096 11月 17 04:24 uplooking
	-rw-r-----. 1 root root       22 11月 17 04:24 xtrabackup_binlog_info
	-rw-r-----. 1 root root      113 11月 17 04:24 xtrabackup_checkpoints
	-rw-r-----. 1 root root      524 11月 17 04:24 xtrabackup_info
	-rw-r-----. 1 root root     2560 11月 17 04:24 xtrabackup_logfile
	
	查看相应备份文件:
	
	备份完毕之后不能直接用于恢复,需要做一些准备操作:
	[root@uplooking backup]# innobackupex --apply-log /server/backup/2015-11-17_04-24-45/

增量备份:
	备份完毕,再插入数据
	mysql> use uplooking
	mysql> INSERT INTO Student values(0007,'孟非','男',21,'播音主持');
	mysql> INSERT INTO Student values(0008,'许三多','男',31,'影视表演');
	
	1)日志滚动
	mysql> flush logs;
	2)备份二进制日志
	xtrabackup_binlog_info 里面记录
	[root@uplooking backup]# cat 2015-11-17_04-24-45/xtrabackup_binlog_info 
	mysql-bin.000005	7535
	
	# cp /data/mysql/data/mysql-bin.000005 /server/backup/
	
	可以利用前面的二进制日志方法实现增量恢复
	1)模拟数据损坏
	# /etc/init.d/mysqld stop
	# cd /data/mysql/data/
	# rm -rf *
	
	2)从完全备份中恢复数据
	# innobackupex --copy-back /server/backup/2015-11-17_04-24-45/
	#修改数据文件属主属组
	# chown -R mysql.mysql /data/mysql/data/ /usr/local/mysql/
	启动数据库
	# /etc/init.d/mysqld start
	查看完全恢复
	[root@uplooking data]# mysql -uroot -p -e 'select * from uplooking.Student;'

Enter password:
±----±---------±-----±-----±----------------+
| Sno | Sname | Ssex | Sage | Sdept |
±----±---------±-----±-----±----------------+
| 1 | 陆亚 | 男 | 24 | 计算机网络 |
| 2 | tom | 男 | 26 | 英语 |
| 3 | 张阳 | 男 | 21 | 物流管理 |
| 4 | alex | 女 | 22 | 电子商务 |
| 5 | xumubin | 男 | 29 | 中文专业 |
| 6 | wangzhao | 男 | 21 | 导弹专业 |
±----±---------±-----±-----±----------------+
3)增量恢复
cd /server/backup/
[root@uplooking backup]# mysqlbinlog mysql-bin.000005 > incremental-$(date +%F-%H-%M-%S).sql
[root@uplooking backup]# mysql -uroot -p < incremental-2015-11-17-04-51-20.sql
[root@uplooking backup]# mysql -uroot -p -e ‘select * from uplooking.Student;’
Enter password:
±----±----------±-----±-----±----------------+
| Sno | Sname | Ssex | Sage | Sdept |
±----±----------±-----±-----±----------------+
| 1 | 陆亚 | 男 | 24 | 计算机网络 |
| 2 | tom | 男 | 26 | 英语 |
| 3 | 张阳 | 男 | 21 | 物流管理 |
| 4 | alex | 女 | 22 | 电子商务 |
| 5 | xumubin | 男 | 29 | 中文专业 |
| 6 | wangzhao | 男 | 21 | 导弹专业 |
| 7 | 孟非 | 男 | 21 | 播音主持 |
| 8 | 许三多 | 男 | 31 | 影视表演 |
±----±----------±-----±-----±----------------+

innobackupex增量备份:
	innobackupex只能对InnoDB引擎做增量备份
	
1)当前数据库做完全备份
# innobackupex --user=root --password=123 --default-file=/etc/my.cnf --socket=/tmp/mysql.sock /server/backup/
2)准备增量数据
mysql> use uplooking
mysql> INSERT INTO Student values(0009,'张艺谋','男',61,'导演专业');
mysql> INSERT INTO Student values(00110,'徐静蕾','女',36,'导演专业');
3)增量备份
要实现第一次增量备份,可以使用下面的命令进行:
# innobackupex --incremental /backup --incremental-basedir=BASEDIR
其中,BASEDIR指的是完全备份所在的目录
在执行过增量备份之后再一次进行增量备份时,其--incremental-basedir应该指向上一次的增量备份所在的目录

# innobackupex --incremental --user=root --password=123 /server/backup/ --incremental-basedir=/server/backup/2015-11-17_04-55-26/

再次插入一条数据,做增量备份
mysql> INSERT INTO Student values(00111,'李珊珊','女',20,'英语专业');

再次增量备份:
# innobackupex --incremental --user=root --password=123 /server/backup/ --incremental-basedir=/server/backup/2015-11-17_05-14-00/

#特别提示:第二次做增量备份时--incremental-basedir指向上一次增量备份目录。

可以通过检查xtrabackup_checkpoints文件查看备份情况

4)恢复数据
	“准备”(prepare)增量备份与整理完全备份有着一些不同,尤其要注意的是:
	(1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。
	(2)基于所有的备份将未提交的事务进行“回滚”。
	于是,操作就变成了:
	# innobackupex --apply-log --redo-only BASE-DIR

	接着执行:
	# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
	而后是第二个增量:
	# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
	
	其中BASE-DIR指的是完全备份所在的目录,而INCREMENTAL-DIR-1指的是第一次增量备份的目录,INCREMENTAL-DIR-2指的是第二次增量备份的目录
	
	操作示例:
	# innobackupex --apply-log --redo-only /server/backup/2015-11-17_04-55-26/ 
	# innobackupex --apply-log --redo-only /server/backup/2015-11-17_04-55-26/ --incremental-dir=/server/backup/2015-11-17_05-14-00/
	# innobackupex --apply-log --redo-only /server/backup/2015-11-17_04-55-26/ --incremental-dir=/server/backup/2015-11-17_05-17-53/
	
5)模拟数据丢失
	# /etc/init.d/mysqld stop
	# rm -rf /data/mysql/data/*

6)恢复数据
	# innobackupex --copy-back /server/backup/2015-11-17_04-55-26/
7)测试
	# chown -R mysql.mysql /data/mysql/data/
	# /etc/init.d/mysqld start
	[root@uplooking ~]# mysql -uroot -p -e 'select * from uplooking.Student;'

Enter password:
±----±----------±-----±-----±----------------+
| Sno | Sname | Ssex | Sage | Sdept |
±----±----------±-----±-----±----------------+
| 1 | 陆亚 | 男 | 24 | 计算机网络 |
| 2 | tom | 男 | 26 | 英语 |
| 3 | 张阳 | 男 | 21 | 物流管理 |
| 4 | alex | 女 | 22 | 电子商务 |
| 5 | xumubin | 男 | 29 | 中文专业 |
| 6 | wangzhao | 男 | 21 | 导弹专业 |
| 7 | 孟非 | 男 | 21 | 播音主持 |
| 8 | 许三多 | 男 | 31 | 影视表演 |
| 9 | 张艺谋 | 男 | 61 | 导演专业 |
| 110 | 徐静蕾 | 女 | 36 | 导演专业 |
| 111 | 李珊珊 | 女 | 20 | 英语专业 |
±----±----------±-----±-----±----------------+


mysqlbackup

ORACLE公司也提供了针对企业的备份软件MySQL Enterprise Backup简称:mysqlbackup。
MySQL企业备份工具执行在线“热备“,无阻塞的MySQL数据库备份。全备份可以在所有InnoDB数据库上执行,而无需中断MySQL查询或更新。此外,支持增量备份,只备份自上次备份后有变化的数据。另外部分备份,支持特定的表或表空间按需要进行备份。

你可能感兴趣的:(运维部署调优)