1.为什么要与用percona来备份
常见的MySQL备份工具
—跨平台性差
—备份时间长、冗余备份、浪费存储空间
mysqldump备份缺点:
—效率较低、备份与还原速度慢,锁表(即备份数据库中的一个表时,其他表都不能使用)
—备份过程中,数据插入和更新操作被阻塞
xtraBackup工具
款强大的在线热备份工具
—备份过程中不锁表库,适合生产环境
—由专业组织percona提供
主要包含两个组件
—xtrabackup :C程序。支持innoDB/XtreDB存储系统
—innobackupex :以Perl脚本分装xtrabackup ,还支持mylsam
2.安装软件
3.命令格式
]# innobackupex 选项
命令常用选项
命令:
*完全备份(没有指明数据库名,会将整个数据库的所有库都备份下来)
]# innobackupex --user 用户名 --password 密码 备份目录名 --no-timestamp
(默认备份时的文件名称会自动以时间日期格式命名,可用--no-timestamp 来取消)
]#innobackupex --apply-log 目录名 //准备恢复数据
这是备份的目录名,备份完成后,目录下不仅有 数据库下的数据,还有描述备份信息的配置文件(xtrabackup 开头的)
[root@host50 ~]# ls /allbak backup-my.cnf ib_buffer_pool mysql sys xtrabackup_info db1 ibdata1 performance_schema xtrabackup_checkpoints xtrabackup_logfile
*完全恢复(在需要恢复的客户机上进行,首先要将之前数据库备份的数据目录(假设为 /alldbk ) scp 到客户机上)
]# innobackupex --copy-back 目录名 //恢复数据
恢复步骤:
1)停止数据库服务
]#systemctl stop mysqld
2)清空数据库目录
rm -rf /var/lib/mysql/*
3)准备恢复数据
(把备份完成后又改变的数据文件的信息,和 已经备份完的数据合并到一块,这就是备份不锁表的原因)
innobackupex --apply-log /alldbk
4)拷贝数据(完成后数据库目录下就会出现准备备份之后拷贝目录下的文件)
innobackupex --copy-back /alldbk
5)修改数据库文件的所属主和所属组为mysql
chown -R mysql:mysql /var/lib/mysql
6)启动服务
systemctl start mysqld
netstat -utnlp | grep :3306 查看一下服务有没有开启
7)管理员权限下查看数据
因为这里的数据库为主数据库服务端的,所有mysql -uroot -p密码 这个密码填原来数据库的密码,而不是现在客户端的密码
############################################################################################################
在完全备份中,恢复单张表(类似一张表中的数据丢失了)
步骤:
1)删除没有数据的表空间
表空间:存储数据的文件,这个文件在 数据库目录下数据库名下
每个表都有对应的 .frm (存放表结构) 和.ibd (表空间,存储表里的数据)文件
[root@localhost ~]# ls /var/lib/mysql/abc123 db.opt gz.frm gz.ibd T1.frm T1.ibd T2.frm T2.ibd T3.frm T3.ibd T4.frm T4.ibd yg.frm yg.ibd
将没有数据的表空间文件删除
> mysql alter table 库名.表名 discard tablespace;
2)导出表信息
在备份文件中备份的数据库中也有.ibd 表空间,备份文件中的表空间数据是完整的
innobackupex --apply-log --export /allbak
3)拷贝表信息文件到数据库目录下
root@host50 ~]# cp /allbak/db3/user2.{cfg,exp,ibd} /var/lib/mysql/db3/
4)修改表信息文件的所有者及组用户为mysql
root@host50 ~]# chown mysql:mysql /var/lib/mysql/db3/user2.*
5)导入表空间
mysql> alter table db3.user2 import tablespace;
6)删除数据库目录下的表信息文件
[root@host50 ~]# rm -rf /var/lib/mysql/db3/user2.cfg [root@host50 ~]# rm -rf /var/lib/mysql/db3/user2.exp
7)查看表记录
mysql> select * from db3.user2;
实现此案例需要按照如下步骤进行。
步骤一:备份所有数据,在50主机执行
1)完全备份 (备份所有数据到/fullbak目录)
步骤二:增量备份 (每次执行备份,值备份新数据,在50主机执行)
1) 插入新记录,并做增量备份
2) 插入新记录,并做增量备份
mysql> insert into db3.user2 values(6,"jack");// 插入新记录,多写几条
[root@host50 ~]# innobackupex --user root --password 123456 --incremental /new2dir --incremental-basedir=/newdir1 --no-timestamp //第2次增量备份 ,数据存储目录/new2dir
3) 把备份文件拷贝给目标主机51
步骤三:在主机51 恢复数据
1) 停止服务,并清空数据
2) 合并日志
3) 恢复数据
原文:https://www.cnblogs.com/zhanglei97/p/11615713.html