mysql备份小纪1
作者:互联网
备份类型
热备(innodb)
不停业务,能一致性恢复
冷备
关闭数据库业务
温备
锁表备份,只能查询不能修改
备份工具
逻辑备份
mysqldump(压缩比高,可读性
mysqlbinlog
物理备份
cp
xtrabackup(性能高
例子
全备:
mysqldump -A > /bak/full.sql
只备份某个表:
mysqldump -uroot -p dbname table1 table2 >/backup/bak1.sql
在备份开始时,刷新一个新的binlog日志:
-F
--master-data=0 默认值
--master-data=1 以change master to命令形式,可以用作主从复制
--master-data=2 以注释形式记录,备份时刻的文件名+position号
--single-transation 不加的时候会锁表,加此参数innodb不锁表热备,可提高速度
对单表备份
select concat ("mysqldump -uroot -p1 ", table_schema,' ',table_name , ' > /bak/',table_schema,'_',table_name,'.sql') from information_schema.tables where table_schema='WW' into outfile '/tmp/dump.sh';
前一晚全备
mysqldump -uroot -p -A -R --triggers --master-data=2 --single-transation > /bak/full.sql
备份恢复
0.初始化数据库,并启动
mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/application/mysql/data
/etc/init.d/mysqld start
1.恢复昨晚全备
set sql_log_bin=0;
source /bak/full.sql
2.找到binlog,并截取
head -10 /bak/full.sql
show master status;
show binary logs;
mysqlbinlog --start-postion=120 /data/mysql/mysql-bin.000 > /bak/binlog.sql
source /bak/binlog.sql
项目案例
- 背景环境
- 数据量25G,日业务增量10-15M
- 备份方式
- 每天23:00,调用mysqldump全备
- 故障时间点
- 早上10:00,误删除了一个表
- 恢复思路
- 停库
- 找测试库
- 恢复全备到测试库
- 截取binlog到误删除时间点,恢复到测试库
- 起点 master-data=2,找备份文件,获取日志名字和位置号
- 终点 分析最后一个binlog,找到误删除事件的位置点
- 验证数据,将故障表导出,导入生产库
- 开启业务
生产备份细节
mysqldump -uroot -p -A -R --triggers --master-data=2 --single-transation | gzip > /bak/all_$(date +%F-$T).sql.gz
若报错超出 max_allowed_packet大小,备份时指定最大数据包大小 --max_allowed_packet=128M
物理备份XBK
原理
1.非innodb,锁定表,直接表的数据文件
2.备份开始时刻,立即触发checkpoint,将内存数据刷到磁盘,拷贝此时所有的数据文件(LSN=1000),在此过程中产生的日志文件(to_lsn=1000 redo last_lsn=1020 和undo)也进行备份
全备,不加时间戳
innobackupex --user=root --password=123 -no-timestamp /bak/full
恢复全备
- 停库
- 删数据
- 准备备份:innobackupex --apply-log /bak/full/
- 恢复数据:cd /bak/full cp -a * /applicatino/mysql/data
- 或者innobackupex --copy-back /bak/full/
- 依赖于my.cnf
- 或者innobackupex --copy-back /bak/full/
- 该权限,启数据库
增量备份实现
-
周一的备份
innobackupex --user=root --password=123 --no-timestamp --incremental-basedir=/bak/full --incremental /bak/inc1
incremental-basedir= 上次备份的路径
--incremental 打开增量备份功能
-
周二的备份
innobackupex --user=root --password=123 --no-timestamp --incremental-basedir=/bak/inc1 --incremental /bak/inc2
-查看各个备份的LSN信息
cat /bak/full/xtrabackup_checkpoints /bak/inc1/xtrabackup_checkpoints /bak/inc2/xtrabackup_checkpoints
(注意看from LSN/to LSN)
项目案例
准备备份
--apply-log (redo+undo)
--redo-only(redo)
全备准备
innobackupex --apply-log --redo-only /bak/full
第一次增量合并
innobackupex --apply-log --redo-only --incremental-basedir=/bak/inc1 /bak/full
第二次增量合并
innobackupex --apply-log --incremental-basedir=/bak/inc2 /bak/full
全备再次准备
innobackupex --apply-log /bak/full
单独恢复单表
alter table t1 discard tablespace;
alter table t1 import tablespace;
标签:full,小纪,--,备份,sql,mysql,innobackupex,bak 来源: https://www.cnblogs.com/ddlearning/p/15314004.html