day5
常用的mysql备份工具
物理备份缺点
-跨平台差
-备份时间长冗余备份,浪费存储空间
逻辑备份 mysqldump mysqlbinlog
mysqldump 备份缺点
-效率较低,备份和还原速度慢,锁表
-备份过程中,数据插入和更新操作被阻塞
etrabackup
强大的在线热备份工具
备份过程中不锁库表,适合生产环境
由专业组织percona提供(改进mysql分叉)
包含两个组件
xtrabackup:c程序 支持innoDB/xtraDB
innobackupex:以perl几哦啊吧封装etrabackup,还支持myisam
安装软件包
真机上:
[root@room12pc14 mysql]# scp /linux-soft/03/mysql/linpercona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm 192.168.4.50:/root
[root@room12pc14 mysql]# scp percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm 192.168.4.50:/root
Fay50
[root@fay50 ~]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
[root@fay50 ~]# yum -y install percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
[root@fay50 ~]# rpm -qa | grep -i percona
[root@fay50 ~]# rpm -ql percona-xtrabackup-24
innobackupex 命令
常用选项
–host 主机名
–user 用户名
–port 端口号
–password 密码
–databases 数据库名
–no-timestamp 不用日期命名备份文件储蓄的子目录名
–databases=“库名”
–databases=“库名.表名”
–databases=“库1 库2”
常用选项(续1)
–redo-only //日志合并
–apply-log //准备恢复数据
–copy-back //拷贝数据
–incremental 目录名 //增量备份
–incremental-basedir=目录名 //增量备份是,指定上一次备份数据存储的目录名
–incremental-dir=目录名 //准备恢复数据时,指定;增量备份数据存储的目录名
–export 导出表信息
import //导入表空间
命令格式
完全备份
[ ]# innobackupex --user 用户名 --password 密码 备份目录名 --no-timestamp
[root@fay50 ~]# innobackupex --user root --password 123qqq…A /allbak --no-timestamp //备份数据,不要建日期时间子目录存储
完全恢复
[ ]#innobackupex --apply-log 目录名 //准备恢复数据
[ ]#innobackupex --copy-back 目录名 //恢复数据
查看所属搜素引擎
mysql> show create table db3.user\G //查看建表的引擎
mysql> show engines; //查看所有引擎
真机上
[root@room12pc14 mysql]# scp libev-4.15-1.el6.rf.x86_64.rpm root@192.168.4.51:/root
[root@room12pc14 mysql]# scp percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm root@192.168.4.51:/root
fay50
[root@fay50 ~]# scp -r /allbak root@192.168.4.51:/root
fay51
[root@fay51 ~]# rpm -ivh /root/libev-4.15-1.el6.rf.x86_64.rpm
[root@fay51 ~]# yum -y install percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
完全备份的恢复
命令格式
增量备份
[ ]# innobackupex --user 用户名 --password 密码 --incremental 增量目录 --incremental-basedir=目录名 --no-timestamp
增量恢复
[ ]#innobackupex --apply-log --redo-only 目录名 --incremental-dir=目录名 //准备恢复数据
[ ]#innobackupex --copy-back 目录名 //恢复数据
fay51
[root@fay51 ~]# systemctl stop mysqld //关闭数据库服务
[root@fay51 ~]# rm -rf /var/lib/mysql/* //清空当前数据库所有内容
[root@fay51 ~]# innobackupex --apply-log /root/allbak //准备恢复数据
[root@fay51 ~]# innobackupex --copy-back /root/allbak //恢复数据
[root@fay51 ~]# chown -R mysql:mysql /var/lib/mysql //更改数据库文件的所有者和所属组
[root@fay51 ~]# ls -ld /var/lib/mysql //查看更改后的权限
恢复单张表
具体操作如下:
1.删除表空间
2.导出表信息
3.拷贝表信息文件到数据库目录下
4.修改表信息文件的所有者及组用为mysql
5.导入表空间
6.删除数据库目录下的表信息文件
7.查看表记录
相关命令
mysql> alter table 库名.表名 discard tablespace; //删除表空间
[ ]#innobackupex --apply-log --export 数据完全备份目录 //导出表信息
[ ]# cp 数据完全备份目录/数据库名目录/表名.(idb,cfg,exp) 数据库目录/库名目录 //拷贝表信息文件
[ ]#chown mysql:mysql 数据库目录/库名 //修改所有者/组
mysql > alter table 库名.表名 import tablespace ; //导入表空间
mysql > select * from 库名.表名 ; //查看表记录
[ ] #rm -rf 数据库目录/库名/表名.{cfg,exp} //删除表信息文件
例子
mysql> alter table db3.user2 discard tablespace; //删除表空间
[root@fay50 ~]# innobackupex --apply-log --export /allbak //从备份文件中导出表信息
[root@fay50 db3]# cp /allbak/db3/user2.{cfg,exp,ibd} /var/lib/mysql/db3 把备份文件中的数据拷贝到需要恢复的数据库表的表目录下
[root@fay50 db3]# chown mysql:mysql /var/lib/mysql/db3/user2.* //修改数据库目录的所有者和所属组身份
[root@fay50 db3]# ls -ld /var/lib/mysql/db3/user2.* //查看修改后的数据库目录的所有者和所属组身份
mysql> alter table db3.user2 import tablespace; //导入表空间
[root@fay50 db3]# rm -rf /var/lib/mysql/db3/user2.cfg //删除目录下多余文件
[root@fay50 db3]# rm -rf /var/lib/mysql/db3/user2.exp //删除目录下多余文件
mysql> select * from db3.user2 ; //查看恢复后的表信息
增量备份和恢复
在fay50
[root@fay50 ~]# innobackupex --user root --password 123qqq…A /fullbak --no-timestamp //完全备份
[root@fay50 ~]# cat /fullbak/xtrabackup_checkpoints //查看备份信息
backup_type = full-backuped
from_lsn = 0
to_lsn = 3592408
last_lsn = 3592417
compact = 0
recover_binlog_info = 0
mysql> insert into db3.user2 values(5,“jacky”); //插入新信息
mysql> insert into db3.user2 values(5,“jacky”);
mysql> insert into db3.user2 values(5,“jacky”);
mysql> insert into db3.user2 values(5,“jacky”);
mysql> insert into db3.user2 values(5,“jacky”);
[root@fay50 ~]# innobackupex --user root --password 123qqq…A --incremental /new1dir --incremental-basedir=/fullbak --no-timestamp //增量备份,参照fullbak文件做增量备份
mysql> insert into db3.user2 values(6,“jacky666”); //增量备份后再增加数据
mysql> insert into db3.user2 values(6,“jacky666”);
mysql> insert into db3.user2 values(6,“jacky666”);
mysql> insert into db3.user2 values(6,“jacky666”);
[root@fay50 ~]# innobackupex --user root --password 123qqq…A --incremental /new2dir --incremental-basedir=/new1dir --no-timestamp //根据上次增量备份,再做增量备份
[root@fay50 ~]# ls /new2dir //查看新增量备份的目录下文件
[root@fay50 ~]# cat /new2dir/xtrabackup_checkpoints //查看新增量备份的信息