mysql MySQL备份恢复

2020-10-25  本文已影响0人  dylan丶QAQ

起因:在工作中常常要用到mysql,平常只是对数据库crud,并没有认真的了解过她,sql语句也只是会一些最基本的,和常用的,一些不常用的都要去网上百度,即决定学习一下mysql,来了解她,虽然开发很多都是黑盒,但追本溯源总是我们想要的。


1. Binlog日志深入分析

1.1. Binlog记录模式及参数配置

DDL:全部记录,定义语言
DML:除select以外都会记录

1log_bin=mysql-bin
2binlog_format=statement|row

mysql-bin 是 basename,mysql-bin-000001.log
Binlog有三种记录模式

先查看了了一下日志

mysql> show binlog events in 'mysql-bin.000001';
mysqlbinlog --start-position=100 --stop-position=120 --database=mydb mysql- bin.000001 > mysql.sql

statement里面只有操作语句是非注释的,其他的说明都是#注释的
看我们的binlog日志大小

1show variables like '%binlog_size%';   #如果一个事务超过binlon大小不不会写入下一个
2max_binlog_size=1024m  #每个binlog日志文件大小
3expire_logs_days=7 #binlog的过期时间
4binlog_cache_size=32768    DML操作不不频繁 <=1m, DML频繁且事务大 2-4m
5max_binlog_cache_size  32位4G,64位16P
1mysql> flush logs; #生成一个新binlog
2mysql> show binary logs; #查看系统binlog数

如果是mysqldump
1、找到这个表最初的记录表结构,和当时的数据,把这个数据insert全部拿出来
2、insert into,备份的时间点和出事的那个阶段咋办?

这个时候使用show binlog来查看已经看不到语句

mysql> show binlog events in 'mysql-bin.000003'; #?是否还有用
mysqlbinlog --base64-output=decode-rows -v mysql-bin.000003
mysqlbinlog --base64-output=decode-rows -vv mysql-bin.000003    #增加数据类型了

mixed:MBR:90%都是statement的模式

90%的语句都是以statement模式进行的

1.2.Binlog日志的正确打开方式

1mysql> show binlog events in 'mysql-bin.000002'
2mysql> show binlog events [IN 'log_name'][FROM pos][LIMIT [offset,] row_count];
mysqlbinlog --no-defaults --database=mydb --base64-output=decode-rows -v -- start-position=123 --stop-position=456 mysql-bin.000002
mysqlbinlog --no-defaults --database=mydb --base64-output=decode-rows -v -- start-datetime='2019-12-11 16:30:00' --stop-datetime='2019-12-11 16:31:00' mysql-bin.000003

2.对备份的正确认识

2.1.MySQL常用的备份工具
2.2数据一致性的理理解
2.3使用mysqldump备份
mysqldump -uroot -p123456 --databases mydb > mydb.sql #导出带数据库的备份脚本
mysqldump -uroot -p123456 --databases mydb ad_user > mydb.sql #导出数据库指定表
mysqldump -uroot -p123456 --all-databases > mydb.sql #导出所有数据库
mysqldump -uroot -p123456 -d mydb > mydb.sql #导出数据库的所有表结构
mysqldump -uroot -p123456 -d mydb ad_user > mydb.sql #导出数据库的某个表结构
2.4不同存储引擎下如何进行备份
mysqldump -uroot -p123456 --master-data=2 --single-transaction --routines -
-triggers --events --databases mydb > mydb.sql
mysqldump -uroot -p123456 --master-data=2 --lock-tables --routines -- triggers --events --databases mydb > mydb.sql

--lock-all-tables #配置导出所有数据库 --all-databases

数据库备份优化相关,请移步我的下一篇博客MySQL数据库备份优化


不要以为每天把功能完成了就行了,这种思想是要不得的,互勉~!

上一篇下一篇

猜你喜欢

热点阅读