本文主要讲述基于mysqldump、逻辑卷的快照和Xtrabackup做数据库的备份与复制及注意事项
做备份的目录目的为做灾难恢复、做审计、测试,要对备份的数据做恢复性测试
备份类型
根据备份时,数据库服务器是否在线,可以分为
冷备:cold backup
温备:warm backup 全局施加共享锁,只能读,不能写
热备:hot backup
根据备份的数据集,可以分为:
完全备份 full backup
部分备份 partial backup
根据备份时的接口(直接备份数据文件还是通过mysql服务器导出数据)
物理备份:直接复制(归档)数据文件的备份方式
逻辑备份:把数据从库中提取出来保存为文本文件
根据备份时是备份整个数据还是仅备份变化的数据,可以分为
完全备份 full backup
增量备份 incremental backup
差异备份 differential backup 从上一次完全备份开始备份
备份策略:
选择备份方式
选择备份时间
考虑恢复成本
考虑恢复时长
考虑备份成本:施加锁的时间,备份时长,备份负载
备份对象:
数据
配置文件
代码:存储过程、存储函数、触发器
OS相关的配置文件,如crontab配置计划及相关脚本
跟复制相关的配置信息:二进制日志文件
常用的备份工具简介
mysqldump,单线程,是一个逻辑备份工具,可以对InnoDB热备、MyISAM温备、Aria温备
缺点:备份和恢复过程较慢,很难实现差异或增量备份
mysqldumper:多线程的mysqldump
缺点:很难实现差异或增量备份
基于逻辑卷快照:接近于热备的工具,因为要先请求全局锁,而后创建快照,并在创建完成后释放全局锁,可以使用cp、tar等工具进行物理备份,备份和恢复岁都很快
缺点:很难实现增量备份,并且请求全局锁需要等待一段时间,在繁忙的服务器上尤其如此
select语句:
备份:select clause into outfile ‘/path/to/somefile’
恢复:load data infile ‘/path/to/somefile’ into table ‘tb_name’
Innobase:商业备份工具,
innobackup
Xtarbackup: 由Percona提供的开源备份工具。
mysqlhostcopy:几乎冷备
本实验数据目录是放在逻辑卷组上的,目录为/mydata/data ,基于 10.0.10-MariaDB实现,MariaDB的安装可以参考本人Mysql的博客来实现
一、mysqldump
mysqldump仅适用于数据集较小场景
用法:mysqldump [options] [db_name [tbl_name …]]
主要选项解释:
–all-databases, -A:备份所有数据库
–databases, -B:要备份的数据库,可以同时备份多个,使用空格分隔
–flush-logs, -F:备份前、请求到锁之后滚动日志,要记录下复制时的二进制日志
–flush-privileges:通知数据库重读授权表
–host=host_name, -h host_name:要备份的数据库的主机名,可以基于网络备份
–lock-all-tables, -x:请求锁定所有表之后再备份,对MyISAM,InnoDB,Aria做温备
–single-transaction:能够对InnoDB存储引擎实现热备
-u usename 备份的用户名
-p password 登陆数据库的密码
–events:备份事件调度器代码
–routines:备份存储过程和存储函数
–triggers:备份触发器
–master-date={0|1|2},0表示不记录,1表示距离为change master 语句,2表示记录为注释的change master语句
备份实例:
本实验mysql是没有密码的,如果有则加-u -p选项
[root@master ~]# mysqldump –databases hellodb –lock-all-tables –flush-logs –master-data=2 >/tmp/db.sql
备份完之后,再修改插入一些数据库数据,
MariaDB [none]>use hellodb MariaDB [hellodb]> insert into classes values (13,’xx’,12);Query OK, 1 row affected (0.40 sec)
把数据库全部删除。用DROP命令
MariaDB [(none)]> drop database hellodb
查看/tmp/db.sql,可以看见备份时的二进制日志位置
然后进行二进制日志备份:
[root@master ~]# mysqlbinlog –start-position=367 –stop-position=555 /binlog/mysql-bin000001 > /tmp/db1.sql
恢复数据:打开mysql
先关闭二进制日志,导入完全备份
MariaDB [(none)]> set session sql_log_bin=0MariaDB [(none)]> source /tmp/db.sql //导入备份文件
然后导入二进制备份:
MariaDB [(none)]> source /tmp/db1.sql //导入备份文件
开启二进制日志:
MariaDB [(none)]> set session sql_log_bin=1
查看数据是否恢复:
注:在实际恢复时最好编辑my.cnf配置文件,添加如下项:
skip-networking //跳过网络功能来恢复数据
二、基于lvm逻辑卷的快照备份
待人对事不要太计较,如果太计较就会有悔恨!