mysqldump实战

flush logs;(重新开始一个二进制日志,但不删除原先的二进制日志)
purge binary logs to ‘mysql-bin.000003’;(purge mysql自带工具与rm区别)
reset master ;删除所有二进制文件,并且重头开始计数(生产环境初始化)

备份注意点:
1.能容忍的最多丢失数据+锁表多久
2.备份数据有哪些:数据+innodb的事务日志(同数据一起备份来保证数据的一致性,一般在mysql正常停止的
过程中不会有问题),二进制日志(选备),数据库的配置文件,程序代码(存储过程,这些都存在mysql这个库里,比如函数在mysql.proc当中)
3备份服务器负载,备份时间(业务不繁忙的时间段)

还原要点:
1.还原测试,用于测试备份的可用性
2.需要恢复哪些数据
3.注意还原的数据库版本是否和原来的一致
4.还原数据要在多少时间内完成(还原都是不能访问数据库,只能离线恢复)

备份类型:
1.完全备份:整个数据集
部分备份:只备份数据子集部分库、表
完全备份(一周一次,周日),增量备份、差异备份,后两者配合二进制日志
二进制日志文件不应该与数据文件放在同一磁盘里面,因为二进制文件从某一角度来说就是被备份

冷备份:no read,no write
(停止服务,tar czvf all.bak /var/lib/mysql ;tar czvf logbin.bak /data/logbin(二进制备份);/etc/my.cnf)
注意还原的数据库版本是否和原来的一致,还原后文件的属性,所有者所属组
冷备份原理:拷贝文件,速度比较快;也就是物理备份,克隆磁盘
温备份:no write
热备份: writeable/readable(依靠第三隔离级别,可重复读,在一个事务未提交时,中间过程其他人不可见,默认的)
myisam:支持温备,热备不支持,因为不支持事务,否则导致数据一致性的问题
innodb:都支持

mysqldump:
mysqldump -A >all.sql(不备份 infomaton_schema,perfomance_schema) -A :备份所有数据库(mysql,存储过程)
mysqldump -B db_name(包括create database 语句,-B十分有用)

mysqldump -A --master-data=2 >all.sql //假设pos=710
数据库数据恢复:
1.skip-networking服务器配置,只允许自己访问
2.临时关闭二进制,防止回复的时候产生大量二进制 set sql_log_bin=off
3.增量合并
mysqlbinlog --start-postion=710 mysql-bin.00003 >> /data/inc.sql
mysqlbinlog mysql-bin.00004 >> /data/inc.sql
mysqlbinlog mysql-bin.00005 >> /data/inc.sql
4.先还原完整备份,再还原inc.sql
5.set sql_log_bin=on
6.设置mysql允许别人访问

因此mysqldump实现增量备份条件:启用二进制日志
上述是模拟物理损坏,比如磁盘;如果有人为的删表,需要编辑inc.sql,把drop等记录删掉,再吧inc.sql还原

备份时做日志滚动(推荐) : -F----->flush log(好处,使得备份前后容易区分新旧二进制文件;也有利于增量恢复
,因为全量恢复使用的是全量备份,增量恢复开始就是那个新产生的二进制日志文件)
mysqldump -F -A --single-transaction --master-data=2 >/data/all.sql

-d 只备份表结构
-t 只备份数据,不备份表结构
-f ,–force 忽略SQL错误,继续执行sql(主键冲突数据重复而导致sql无法导入)
-q (mysqldump作为逻辑备份,其实在执行select,-q不使用查询缓存,加快备份速度)

myisam备份(不支持热备,因此该存储引擎很少使用了)
-x:加全局锁

innodb(支持热备)----DML语言隔离,DDL无法隔离(drop/rename table,不过业务过程中很少有DDL)
–single-transaction(推荐),-single-transaction参数的作用,设置事务的隔离级别为可重复读,
即REPEATABLE READ,这样能保证在一个事务中所有相同的查询读取到同样的数据,
也就大概保证了在dump期间,如果其他innodb引擎的线程修改了表的数据并提交,
对该dump线程的数据并无影响,在这期间不会锁表。

理解:–single-transaction:mysqldump可以认为是在select,那么一个select可以认为是一个事务,假设
这个select要执行1min,在同一个select(事务)里面可以重复读,来保证数据的一致性

innodb建议备份策略:
mysqldump -uroot -A -F -E -R --single-transaction --master-date=2 --flush-privileges --triggers
–default-character-set=utf-8(和原先的保持一致) --hex-blob >$file.sql

xtrabackup:

你可能感兴趣的:(mysql,mysql,数据库)