MySQL 分为 热备和冷备
(一) 热备
物理备份的缺点
(1)跨平台差
(2)备份时间长、冗余备份、浪费存储时间
热备
备份中不锁表适合生产环境
1. 安装
(1)libev-4.15-1.el6.rf.x86_64.rpm (依赖包)
(2)XtraBackup软件包
2. 常用的选项
(1)--host(主机名)
(2)--user(用户名)
(3)--port(端口号)
(4)--password(密码)
(5)--databases(数据库名)
例子:
--databases="库名" 为一个库
--databases="库名 库名" 多个库空格隔开
--databases="库名.表名" 表的话"库名.表名"
(6)--redo-only(日志合并,备份的会有一个日志文件 在备份过程中也会有数据写入那么这些数据也会有一个备份的文件。日志合并就是把这两个文件合成一个)
(7)--apply-log(准备数据恢复)
(8)--copy-back(拷贝数据)
(9)--incremental 目录名 (增量备份)
(10)--incremental-basedir=目录名 (增量备份时,指定上一次备份数据存储的目录名)
(11)--incremental-dir=目录名 (准备恢复数据时,指定增量备份数据存储的目录名)
(12)--export(导出表信息)
(13)--import(导出表空间)
3. 命令
(1)完全备份/恢复 (恢复时要求数据库为空)
innobackupex --user 用户名 --password 密码 备份目录 (备份)
innobackupex --redo-only --apply-log 目录名 (准备数据恢复)
innobackupex --copy-back 目录名 (数据恢复)
(2)增量备份/恢复 (增量备份要求为innodb引擎,引擎查看 show engines)
innobackupex --user 用户名 --password 密码 --incremental 增量目录 --incremental-basedir=目录名 --no-timestamp (增量备份)
innobackupex --redo-only --apply-log 目录名 --incremental-dir=目录名 (准备恢复数据)
innobackupex --copy-back 目录名 (数据恢复)
4. 恢复完之后 查看权限是否为MySQL 不是的话改为MySQL(chwon -R mysql:mysql /var/lib/mysql)
5.恢复单张表 (完全备份之后在操作恢复单张表,误删除表数据)
(1)表空间(*.ibd)和表结构(*.frm)
表空间里边放着一张表的数据
表结构(desc 查表的结构)
(2)mysql> alter table 库名.表明 discard tablespace; (删除表空间 ibd)
(3)innobackupex --apply-log --export 数据完全备份目录 (导出表信息 ,导出表信息会出现 *.cfg文件和*.exp文件 存储这表的信息数据)
(4)把导出的表信息的两个文件和ibd表结构文件 拷贝到数据库目录下,给数据库目录mysql 所有者/所有组 权限
(5)mysql> alter table db3.user2 import tablespace; (导入表空间)
(6)查看表数据删除数据库目录下的两个表信息文件 *.cfg *.exp
(二)冷备 (可以直接 tar cp 备份,直接备份/var/lib/mysql/* 所有文件)
1. mysqldump (权限要查看)
(1)mysqldump -u root -p 密码 库名 > *.sql (完全备份)
-B 库名1 库名2 (用空格隔开)
-A 所有库
库名 表明 (用空格隔开)
(2)mysql -u root -p 密码 库名 < *.sql
2. binlog日志增量备份
(1)开启日志
指定server_id
(2)mysqlbinlog 日志文件 (查看 以commit为界限 at偏移量 回复日志)
(3)命令
mysqlbinlog --start-datetime="2017-04-12 12:06:55" --stop-datetime="2017-04-12 12:07:23" /var/lib/mysql/mysql-bin.000002 | mysql -u root -p (这是以时间为恢复点 还可以 以偏移量为恢复点 只需要吧 datetime 替换为position)