目录
〔1〕MySQL备份工具
- 物理备份的缺点
- 跨平台性差,备份时间长,冗余备份,浪费存储空间
- mysqldump备份缺点
- 效率低,备份和还原速度慢
- 锁表,备份过程中,数据插入和更新操作被阻塞
〔2〕XtraBackup热备份工具
- 是一款强大的在线热备份工具,属于物理备份
- 备份过程中不锁库表,适合生产环境;由专业组织percona提供
- 主要组件
- xtrabackup: c程序,支持InnoDB/XtraDB的备份
- innobackupex: 以Perl脚本封装xtrabackup,同时支持MyISAM备份
〔3〕Percona安装使用
- 准备软件包
- libev-4.15-1.el6.rf.x86_64.rpm
- percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
- 安装
- rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
- yum -y install percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
- 查看安装列表
- rpm -ql percona-xtrabackup-24
- /usr/bin/innobackupex //备份innodb,xtradb,myisam存储引擎的表
- /usr/bin/xtrabackup //备份innodb,xtradb存储引擎的表
- man innobackupex
- rpm -ql percona-xtrabackup-24
- innobackupex 常用命令
- 主机名: --host
- 用户名: --user
- 端口号: --port
- 密码: --password
- 所有库: --databases
- 一个库: --databases="库名"
- 多个库: --databases="库1 库2"
- 一张表: --databases="库名.表"
- 备份文件存储的目录名不用日期命名
- --no-timestamp
- 日志合并: --redo-only
- 准备恢复数据: --apply-log
- 拷贝恢复数据: --copy-back
- 增量备份: incremental 目录名
- 增量备份时,指定上一次备份数据存储的目录名
- --incremental-basedir=目录名
- 准备恢复数据时,指定增量备份数据存储的目录名
- --incremental-dir=目录名
- 导出表信息: --export
- 导入表空间: import
- innobackupex 备份与恢复
- 完全备份
- 格式: innobackupex --user 用户名 --password 密码 备份目录名 --no-timestamp
- 如: innobackupex --user root --password 123456 /allbak --no-timestamp
- 完全恢复
- 格式
- innobackupex --apply-log 备份目录名 //准备恢复数据
- innobackupex --copy-back 备份目录名 //拷贝恢复数据
- 完全备份恢复全部数据
- systemctl stop mysqld //停止服务
- rm -rf /var/lib/mysql/* //恢复时要求目录为空,否则失败
- innobackupex --apply-log /root/allbak //准备恢复数据
- innobackupex --copy-back /root/allbak //拷贝恢复数据
- chown -R mysql:mysql /var/lib/mysql //改变所有者和组权限
- systemctl restart mysqld //重启服务
- mysql -uroot -p123456 //登录验证MySQL库是否恢复
- 格式
- 恢复单张表
- 环境: db5数据库t5表的记录全部丢失,通过完全备份数据文件恢复
- 表空间:指表存储数据的空间,一张表由表结构和表空间组成,创建时存放在对应数据库目录下,以表名.frm和表名.ibd命名的文件
- 恢复步骤
- 删除表空间(mysql命令行)
- alter table 库名.表名 discard tablespace;
- 导出表信息文件
- innobackupex --apply-log --export 完全备份目录
- 生成表信息文件:表名.exp 表名.cfg
- 拷贝表信息文件到数据库目录下
- cp 完全备份目录/库名/表名.{cfg,exp,ibd} 数据库目录/库名/
- 修改表信息文件所有者和所有组权限
- chown mysql:mysql 数据库目录/库名/
- 导入表空间(mysql命令行)
- alter table 库名.表名 import tablespace;
- 删除数据库目录下的表信息文件
- rm -rf 数据库目录/库名/*.{cfg,exp}
- 删除表空间(mysql命令行)
- 例:
- 完全备份
//删除表空间(mysql命令行)
mysql> alter table db5.t5 discard tablespace;
//导出表信息文件
innobackupex --apply-log --export /allbak
//拷贝表信息文件到数据库目录下
cp /allbak/db5/t5.{cfg,exp,ibd} /var/lib/mysql/db5/
//修改表信息文件所有者和所有组权限
chown mysql:mysql /var/lib/mysql/db5
//导入表空间(mysql命令行)
mysql> alter table db5.t5 import tablespace;
//删除数据库目录下的表信息文件
rm -rf /var/lib/mysql/db5/t5.{cfg,exp}
//查看恢复的数据
mysql> select * from db5.t5;
-
- 增量备份与恢复
- 增量备份
- 概念: 备份上次备份后,所有新产生的数据
- 要求: 增量备份时,必须先有一次备份,通常是完全备份
- 格式: innobackupex --user 用户名 --password 密码 --incremental 增量目录 -- incremental-basedir=上次备份目录 --no-timestamp
- 例
- innobackupex --user root --password 123456 /datafull --no-timestamp
- innobackupex --user root --password 123456 --incremental /newdir1 --incremental-basedir=/datafull --no-timestamp
- innobackupex --user root --password 123456 --incremental /newdir2 --incremental-basedir=/newdir1 --no-timestamp
- 增量恢复
- 合并备份数据: innobackupex --apply-log redo-only 完备目录 --incremental-dir=增量目录
- 拷贝备份数据: innobackupex --copy-back 完备目录
- 例
- systemctl stop mysqld
- rm -rf /var/lib/mysql/*
- innobackupex --apply-log --redo-only /datafull
- innobackupex --apply-log --redo-only /datafull --incremental-dir=/newdir1
- innobackupex --apply-log --redo-only /datafull --incremental-dir=/newdir2
- innobackupex --copy-back /datafull
- chown -R mysql:mysql /var/lib/mysql
- systemctl restart mysqld
- 增量备份
- 增量备份与恢复