to t1 values(3)
5)binlog恢复数据
思路:
使用mysqlbinlog提取历史sql操作
通过管道交给mysql命令执行
例子:
[root@mysql-50 mysqllog]# mysqldump -uroot -p123456 db2 < /data/db2.sql #备份
mysql> insert into t2 values(11,'陈红',12);
mysql> update t2 set name='貂蝉' where id = 2;
mysql> drop database db2; #删库
mysql> create database db2;
[root@mysql-50 mysqllog]# mysql -u root -p123456 db2 < /data/db2.sql
[root@mysql-50 mysqllog]# mysqlbinlog --start-position=296 --stop-position=1857 mysql.000001 | mysql -u root -p123456
5,部曲三
XtraBackup工具
一款强大的在线热备份工具
备份过程中不锁库表,适合生产环境,(备份到哪一行就锁哪一行)
由专业组织percona提供(改进mysql分支)
主要含有两个组件
Xtrabackup:c程序,支持innodb/xtradb
Innobackupex:以perl脚本封装xtrabackup,还支持myisam
提示:实际只有innodb存储引擎支持实时增量备份
1)安装软件包
[root@mysql-50 jluo]# yum -y install libev-4.15-1.el6.rf.x86_64.rpm
[root@mysql-50 jluo]# yum -y install percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
2)完全备份与恢复
格式:
Innobackupex 选项 路径
基本选项:
--host:主机名,不写默认本机地址
--user:用户名
--port:端口号,不写默认3306
--password:用户密码
--databases:数据库名 #=”库名”:单个库 =”库1 库2”:多个库 =”库.表”:单个表 不写默认备份所有库
--no-timestamp:不用日期命令备份文件存储的子目录名
--redo-only:日志合并
--apply-log:准备还原(回滚日志)
--copy-back:恢复数据
--incremental 目录名:指定增量备份目录(目录必须为空)
--incremental-basedir=目录名:增量备份时,指定上一次备份数据存储的目录名
--incremental-dir=目录名:准备恢复数据时,指定增量备份数据存储的目录名
--export:导出表信息
import:导出表空间
提示:
1,恢复全部数据库时要求数据库目录必须为空,恢复单个或多个数据库(数据表时不需要为空)
2,备份目录必须为空
例子:
1,备份
1)备份前查看数据库信息
mysql> show databases; #备份前查看数据库信息
+--------------------+
| Database |
+--------------------+
| information_schema |
| db5 |
| mysql |
| performance_schema |
| stum |
| stusystem |
| sys |
+--------------------+
7 rows in set (0.01 sec)
2)完全备份
[root@mysql-50 ~]# innobackupex --user root --password 123456 --no-timestamp /bak/alldir
3)向表里写数据增量备份
mysql> insert into db5.t1 values(1212);
mysql> insert into db5.t1 values(1212);
[root@mysql-50 ~]# innobackupex --user root --password 123456 --incremental /bak/new1dir --incremental-basedir=/bak/alldir --no-timestamp
4)再向表里写数据增量备份
mysql> insert into db5.t1 values(1313);
mysql> insert into db5.t1 values(1313);
[root@mysql-50 ~]# innobackupex --user root --password 123456 --incremental /bak/new2dir --incremental-basedir=/bak/new1dir --no-timestamp
[root@mysql-50 ~]# ls /bak/alldir/
backup-my.cnf mysql sys xtrabackup_logfile
db5 performance_schema xtrabackup_binlog_info
ib_buffer_pool stum xtrabackup_checkpoints
ibdata1 stusystem xtrabackup_info
[root@mysql-50 ~]# vim /bak/alldir/xtrabackup_checkpoints #备份信息文件
backup_type = full-backuped #完全备份
from_lsn = 0 #lsn:日志序列号
to_lsn = 7002759
last_lsn = 7002768
compact = 0
recover_binlog_info = 0
[root@mysql-50 ~]# vim /bak//new1dir/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 7002759
to_lsn = 7005238
last_lsn = 7005247
compact = 0
recover_binlog_info = 0
[root@mysql-50 ~]# vim /bak/new2dir/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 7005238
to_lsn = 7005861
last_lsn = 7005870
compact = 0
recover_binlog_info = 0
2,恢复数据
步骤:
1,准备恢复数据
2,合并日志文件(同时也拷贝数据到主目录里)
3,把备份目录下数据拷贝到数据库目录下
4,修改数据库目录的所有者和组用户为mysql
5,启动数据库服务
例子:
[root@mysql-50 ~]# systemctl stop mysqld #停掉mysql
[root@mysql-50 ~]# rm -rf /var/lib/mysql #删掉数据库,模拟数据库损坏,要重新恢复数据
[root@mysql-50 ~]# mkdir /var/lib/mysql #新建数据库目录
[root@mysql-50 ~]# innobackupe