| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 关于MySQL二进制日志的实质意义 -> 正文阅读 |
|
[大数据]关于MySQL二进制日志的实质意义 |
MySQL数据库中,二进制日志和其他日志差别很大,二进制日志的实际功能在于备份,在日常生产中备份非常重要,因为二进制日志里记录的是数据库的增删改的操作,它会把数据库除查询以外所有的增删改都记录在日志中,所以可以把二进制日志理解成数据备份,而不是仅仅当成一个日志,它的记录形式分三种,一种是基于语句型的记录,MariaDB10.2.3之前的版本默认都是语句型记录格式,这种形式只记录执行的命令的本身,优势是空间占用较小,记录的日志量比较少,但是由于生成的日志数量过于精简,不能够用于将来数据的还原,所以不太推荐使用这种日志格式,还有一种是混合型记录格式,MariaDB10.2.4版本以上默认的记录格式,介于前两者之间,有时会以语句格式记录,有时会以行格式记录,记录形式的选择是数据库默认判断的,所以也不太推荐,工作中更建议使用行的记录格式,行的记录格式指的是记录你修改过哪些字段哪些行和修改过程,相对语句型记录要更详细一些,所以真正可以作为备份手段的,安全的日志格式应该是行记录。 二进制日志并不是日志的角色,是备份角色,既然是备份角色,在日常生产中建议独立存放,不要和数据库放在一起,如果数据库数据丢了,二进制文件也就丢了,那么它的备份效果也就没有什么实质意义了,独立存放的话,将来二进制日志只要不丢,数据库的数据丢了,用二进制日志是可以还原数据的,可以通过log_bin来定义二进制日志的路径,完整的格式是文件夹和文件前缀,如不约定文件前缀,数据库可能启动异常,注意修改完之后给mysql帐号设定所有者所属组权限,执行命令systemctl restart mysqld重启数据库生效 log_bin=/PATH/BIN_LOG_FILE(指定文件存放位置,MySQL8.0默认开启,MariaDB未开启) MySQL8.0版本二进制日志是默认开启的,如未开启,需修改二进制日志相关的服务器变量, sql_log_bin=on(MySQL和MariaDB默认开启) ? 两种方式都可以开启二进制日志,如开启需都开启才可以,缺一不可,不同之处在于,变量可以动态修改,随时选择开启或者关闭,指定文件路径这种形式是read only,不可以修改,需要写配置文件,定义二进制日志的存放位置,二进制日志不指定存放位置默认路径是放在/var/lib/mysql下,定义之后会生成二进制日志及索引文件,二进制日志是很有意义的,日常生产中如果版本默认不开启,一定要记得开启。 下列是一些关于二进制日志的相关命令及备份详解: 执行命令show master logs 查看二进制日志文件列表及每个二进制日志文件的大小(数据增删改操作的位置),每个二进制日志文件记录的就是对数据的增删改操作,用于将来恢复数据,二进制日志不是文本文件,使用cat命令式无法查看的,查看二进制日志有两种方式,一种是在mysql数据库中执行命令show binlog events来查看,另一种方式是执行命令mysqlbinlog以文本的方式查看,但是sql语句会以base64编码的形式展示,加-v即可显示执行操作的全过程 二进制日志的文件将来用来数据还原时是可以通过重定向导出到新的文件里,如果数据库异常了,可以通过这些二进制日志文件来恢复数据,先把之前的备份恢复之后,再把新导出的二进制日志文件导入到数据库即可 二进制日志还可以通过增删改操作的位置来查看区间段的数据更新 执行命令mysqlbinlog –v file –start position=# --stop position=# -v 从远程主机同步二进制日志到当前目录,(相当于远程copy)需要远程连接帐号并赋予权限 远程同步二进制日志的目的是作为二进制日志的备份用,因为放在本机如果服务器出问题了,二进制日志及数据库都会丢失,将来可以通过这个远程备份来恢复数据,当然rsnyc也是远程同步的一个手段,但是相对于rsnyc远程同步来说此方法更安全可靠 例:create user root@‘10.0.0.%’ identified by ‘123456’; grant all on *.* to root@‘10.0.0.%’; mysql -uroot -p123456 –h10.0.0.# Mysqlbinlog -R ?--host=10.0.0.# ?--user=root --password=123456 –raw --stop-never file 刷新二进制日志执行命令(一般用于做备份时) flush logs;或者mysqladmin fiush-logs 二进制日志文件也需要定期清理,做完备份之后之前的二进制日志就没有价值了,因为二进制日志记录的是整个数据库的增删改操作,如果不做控制的话,会占用较大磁盘空间,我们可以执行expire_logs_day=N定义一下二进制日志的清理时间,或执行purge binary logs to ‘file’手动清理,清理的是此文件编号之前的二进制日志文件,同时也更新了mysql的index文件,清理完之后执行reset master刷新文件编号,那么再生成的二进制文件编号就又会从1开始排列 注意:只依赖二进制日志来恢复数据是不行的,数据之所以能恢复,首先得确定有之前数据库的备份,二进制日志只是恢复数据时其中的一个步骤,记录的是最新发生的增删改操作,它能保证最新的数据尽可能不丢失,但是旧的数据是解决不了的,所以在日常生产中我们要定时做备份,养成良好习惯,工作才能顺利进行。 |
|
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 5:48:14- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |