mysql备份小纪1
2021/9/20 19:28:27
本文主要是介绍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;
这篇关于mysql备份小纪1的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20部署MySQL集群入门:新手必读指南
- 2024-11-20部署MySQL集群教程:初学者指南
- 2024-11-20部署MySQL集群项目实战:新手教程
- 2024-11-20部署MySQL集群资料:新手入门教程
- 2024-11-20MySQL集群部署教程:入门级详解
- 2024-11-20MySQL集群教程:入门与实践指南
- 2024-11-20部署MySQL集群教程:新手入门指南
- 2024-11-20MySQL读写分离教程:轻松入门
- 2024-11-20部署MySQL集群入门:一步一步搭建你的数据库集群
- 2024-11-19部署MySQL集群学习:入门教程