MySql教程

mysql备份小纪1

本文主要是介绍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

项目案例

  1. 背景环境
    1. 数据量25G,日业务增量10-15M
  2. 备份方式
    1. 每天23:00,调用mysqldump全备
  3. 故障时间点
    1. 早上10:00,误删除了一个表
  4. 恢复思路
    1. 停库
    2. 找测试库
    3. 恢复全备到测试库
    4. 截取binlog到误删除时间点,恢复到测试库
      1. 起点 master-data=2,找备份文件,获取日志名字和位置号
      2. 终点 分析最后一个binlog,找到误删除事件的位置点
    5. 验证数据,将故障表导出,导入生产库
    6. 开启业务

生产备份细节

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

恢复全备

  1. 停库
  2. 删数据
  3. 准备备份:innobackupex --apply-log /bak/full/
  4. 恢复数据:cd /bak/full cp -a * /applicatino/mysql/data
    1. 或者innobackupex --copy-back /bak/full/
      1. 依赖于my.cnf
  5. 该权限,启数据库

增量备份实现

  • 周一的备份

    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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!