设为首页 收藏本站
查看: 1812|回复: 0

[经验分享] mariadb二进制日志和备份恢复

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-10-12 14:28:04 | 显示全部楼层 |阅读模式
一、日志及其说明

1、错误日志

    主要记录服务器启动和关闭过程中的信息,服务器运行过程中的错误信息,事务调度器运行一个事件是产生的日志信息,在从服务器上启动从服务器上启动从服务器进程是产生的日志信息。

2、一般查询日志
general_log、general_log_file 、log、log_output   
3、慢查询日志
    查询执行时长超过指定的查询时长,即为慢查询。主要的配置文件有:slow_query_log,slow_query_log_file /mydata/data/hostname.log   
4、二进制日志
    任何引起或可能引起数据库改变的操作如复制、即时点恢复等。二进制日志记录着每一个ddl,dml,dcl命令及其重启等操作导致数据库发生变化的数据。  

5、中继日志
    relay_log_purge={ON|OFF}#是否自动清理不再需要中继日志  

6、事务日志
    将随机IO换装为顺讯IO,保证数据的一致性、原子性、完整性



二、二进制日志详解
1、二进制日志的格式
基于语句:statement;基于行:row;混合模式:mixed   
2、二进制日志文件

索引文件(mysql-bin.index),二进制日志文件(mysql-bin.00000x)
3、二进制日志的功能
即时点恢复、复制
4、常用的二进制日志命令
显示所有的二进制日志文件:mysql>show binary logs;
执行滚动,即二进制日志会自动滚动一次:mysql>flush logs;
显示当前使用的二进制日志文件:mysql>show master status;
命令行查看二进制日志文件内容:#mysqlbinlog mysql-bin.000001   
查看二进制日志文件内容:mysql>show binlog events in 'mysql-bin.000001';  
mysqlbinlog常用的选项: --start-time --stop-time --start-position --stop-position


图示:


显示二进制日志文件
wKiom1f7od3BxS-7AAA21Ze0JOY973.jpg

二进制文件格式如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
[iyunv@chen data]# mysqlbinlog --stop-position=1451 '/mydata/binlog/master-bin.000001'
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#160929 11:41:17 server id 1  end_log_pos 245 Start: binlog v 4, server v 5.5.44-MariaDB-log created 160929 11:41:17 at startup
ROLLBACK/*!*/;
BINLOG '
XY3sVw8BAAAA8QAAAPUAAAAAAAQANS41LjQ0LU1hcmlhREItbG9nAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABdjexXEzgNAAgAEgAEBAQEEgAA2QAEGggAAAAICAgCAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAZwK5ww==
'/*!*/;
# at 245
#160929 13:39:36 server id 1  end_log_pos 332 Querythread_id=4exec_time=0error_code=0
SET TIMESTAMP=1475127576/*!*/;
SET @@session.pseudo_thread_id=4/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
create database testdb
/*!*/;
# at 332
#160929 13:40:40 server id 1  end_log_pos 454 Querythread_id=5exec_time=0error_code=0
use `testdb`/*!*/;
SET TIMESTAMP=1475127640/*!*/;
SET @@session.foreign_key_checks=0, @@session.unique_checks=0/*!*/;
SET @@session.sql_mode=524288/*!*/;
DROP TABLE IF EXISTS `students` /* generated by server */
/*!*/;
# at 454
#160929 13:40:40 server id 1  end_log_pos 752 Querythread_id=5exec_time=0error_code=0
SET TIMESTAMP=1475127640/*!*/;
CREATE TABLE `students` (
  `id` int(10) unsigned NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `age` tinyint(3) unsigned DEFAULT NULL,
  `gender` enum('f','m') DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!*/;
# at 752
#160929 13:40:40 server id 1  end_log_pos 864 Querythread_id=5exec_time=0error_code=0
SET TIMESTAMP=1475127640/*!*/;
/*!40000 ALTER TABLE `students` DISABLE KEYS */
/*!*/;
# at 864
#160929 13:40:40 server id 1  end_log_pos 975 Querythread_id=5exec_time=0error_code=0
SET TIMESTAMP=1475127640/*!*/;
/*!40000 ALTER TABLE `students` ENABLE KEYS */
/*!*/;
# at 975
#160929 13:40:40 server id 1  end_log_pos 1091 Querythread_id=5exec_time=0error_code=0
SET TIMESTAMP=1475127640/*!*/;
DROP TABLE IF EXISTS `t2` /* generated by server */
/*!*/;
# at 1091
#160929 13:40:40 server id 1  end_log_pos 1240 Querythread_id=5exec_time=0error_code=0
SET TIMESTAMP=1475127640/*!*/;
CREATE TABLE `t2` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!*/;
# at 1240
#160929 13:40:40 server id 1  end_log_pos 1346 Querythread_id=5exec_time=0error_code=0
SET TIMESTAMP=1475127640/*!*/;
/*!40000 ALTER TABLE `t2` DISABLE KEYS */
/*!*/;
# at 1346
#160929 13:40:40 server id 1  end_log_pos 1451 Querythread_id=5exec_time=0error_code=0
SET TIMESTAMP=1475127640/*!*/;
/*!40000 ALTER TABLE `t2` ENABLE KEYS */
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
[iyunv@chen data]#




上述格式说明:

    事件发生的日期和时间

    服务器id
    时间的结束位置

    事件的类型

    原服务器生成此事件的线程id

    语句的时间戳和写入二进制日志文件的时间差

    错误代码

    事件内容

    下一个事件的开始位置



常用服务器参数:
    log_bin = {ON|OFF},此可以为一个文件路径

    log_bin_trust_funcition_creators

    sql_log_bin = {ON|OFF}

    sync_binlog

    binlog_format = mixed {statement|row|mixed}

    max_binlog_cache_size =  #二进制日志的缓冲区大小,仅用于缓冲事务类的语句

    max_binlog_stmt_cache_size =  #状态缓冲区大小

    max_binlog_size =  #二进制日志文件的上限,超过则会自动滚动

    set session sql_log_bin=0; #可使得不记录二进制日志文件


注意:切将二进制日志文件和数据文件存放在同一文件中

图示:


所有与日志相关变量
wKioL1f7oE7BnHVhAABhB7xrKHo993.jpg
wKiom1f7qTqj-x_MAABN483Z0Dc954.jpg
迁移二进制文件至其他目录
wKiom1f7qO_Bp1n2AAA-V4q2NoY841.jpg

三、数据备份及其恢复
    数据备份的主要目的是为了数据恢复,对备份的数据做恢复测试,审计,及其测试等相关操作。

1、备份的类型
冷备:cold backup 温备:warm backup 热备:hot backup   
2、根据备份的数据集分为
完全备份:full backup 部分备份:partial backup  
3、根据备份时的接口(直接备份数据文件还是通过mysql服务器导出数据)分为
物理备份:直接复制(归档)数据文件的备份方式,physical backup(对数据量很大时适用)
逻辑备份:把数据从数据库中提取出来保存为文件,logical backup(文件大小大于10G不适用),主要的备份工具为(mysqldump)。MYISAM只支持温备,且不支持增量备份,而INNODB则为热备,为增量备份。
4、备份工具(mysqldump)
myslqdump为逻辑备份工具,备份和恢复速度比较慢,只适合数据量不是很大的数据库。


mysqldump命令:
    mysqldump [options] [db_name [tbl_name ...]]

备份单个数据库:mysqldump db_name
实例:mysqldump -uroot -hlocalhost -p testdb >/tmp/testdb.sql
恢复数据时需事先创建库再执行数据恢复:mysql -uroot -p testdb</tmp/testdb.sql
备份所有数据库:mysqldump --all-databases >/tmp/all.sql
备份多个数据库:mysqldump -utestuser -h10.1.10.1 -p --databases testdb test >/tmp/testdbs.sql
恢复时无需先创建库:mysql -utestuser -h10.1.10.1 -p </tmp/testdbs.sql  

图示:


单表备份恢复时需事先准备库才能恢复到数据库
wKiom1f8P7HjnD5bAABMyDCjtLE856.jpg
备份多个数据库及其恢复

wKioL1f8QtKgor1iAABPxNx7ahc062.jpg



注意:上诉备份方案存在一定的弊端如:用户正在执行数据操作时,数据则会丢失等情况。
解决方案:在备份是给库表加上锁,保证数据的完整性。
--lock-all-tables:请求锁定所有表
实例:mysqldump --databases testdb --lock-all-tables >/tmp/testdb.sql  
--single-transaction:单事务,能够对innodb存储引擎做热备
--events:备份事件调度器代码    --routines:备份存储过程和存储函数    --triggers:备份触发器  


备份时请求锁之后滚动日志:--flush-logs
复制时同步位置标记:--master-data=[0|1|2]  


注意:恢复时需关闭二进制文件,恢复成功后则开启
关闭二进制日志:set session sql_log_bin=0
开启二进制日志:set session sql_log_bin=1


锁表备份步骤:
1)锁表并且给只读权限
flush tables with read lock;
2)滚动日志
flush logs;
3)查看二进制日志信息
show master status;
4)使用mysqldump进行数据备份
mysqldump --databases testdb >/tmp/testdb.sql
5)备份完成之后则需解锁
unlock tables;  


命令行备份实例如下:
mysqldump -p --databases testdb --lock-all-tables --flush-logs >/tmp/testdb2.sql
mysqldump -p --databases testdb --single-trasaction --flush-logs >/tmp/testdb3.sql
mysqldump -p --databases testdb --lock-all-tables --flush-logs --master-data=2 >/tmp/testdb4.sql


图示:


锁表并在此实行备份,备份完后解锁

wKiom1f8S2OBF-NvAAAkQmCh4mo358.jpg
wKioL1f8S2ThhkydAABrEdLlN5M190.jpg










   





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-285015-1-1.html 上篇帖子: Mysql-mmm兼Keepalived高可用性mysql底层架构 下篇帖子: mysql几个参数(编码,预编译,批处理) 二进制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表