mysql log_bin,mysql log-bin
目录
第一,喋喋不休。二、什么是bin日志?三。它在哪里?四。binlog的相关配置五、bin log有什么用?不及物动词超级有用的参数sql_log_bin VII。接下来几篇文章推荐阅读一、苦
算上这篇文章,Daydream的MySQL话题已经写了18次了。在之前的文章中,我已经与您分享了撤消日志和重做日志,在接下来的几篇文章中,我将与您分享bin日志。
前阵子和一个同学聊到MySQL的这些日志。那个同学觉得这些日志挺深奥的,很难理解。其实你不用这么吓自己。
比如这些日志,你有没有想过MySQL为什么要保留日志?写日志一定要有磁盘IO吗,不写就不香了?速度和性能会变得更快。其实MySQL会写日志是因为记录的日志可以赋予MySQL一定的能力。
例如,undo log赋予mysql回滚事物的能力,redo log赋予mysql从崩溃中恢复的能力,我们现在所说的bin log赋予MySQL构建集群、备份数据和恢复数据的能力。
你不能说,我不想让MySQL记录那些日志吗?当然可以!即使默认情况下,MySQL也不会主动给你记录bin日志,不过话说回来,如果你不让它写那些日志,它也不会有相应的能力给你使用。对!所以总的来说,日志还是很香的。
知道了这些,学习相关知识点是否有目的性?我之前已经和你分享过撤销日志和重做日志白日梦,那种你所知道的分享。如果你又有感觉了,请跟我来看看。
对于大多数R&D学生来说,他们一定听说过bin log。然后不一定知道binlog在哪?谁写的?如何配置binlog?还有binlog有什么用。所以在接下来的几篇文章中,我们来看看关于binlog的两三件事,让你更好的了解binlog。
二、什么是bin日志?Bin是MySQL的二进制日志文件,翻译成中文名字感觉怪怪的。所以下面直接叫他binlog吧。
我们都知道MySQL分为两部分。上层是MySQL-Server,下层是可插拔存储引擎。
Binlog由MySQL的服务器层生成。
三。它在哪里?binlog的位置由datadir参数控制。
你可以用下面的方法来检查。
知道了binlog在哪里,可以看看,如下
目录中有两种文件:mysql-bin.0000XX和mysql-bin.index
前者掌握着MySQL变化的逻辑。
而后者长这样,我估计你一看就明白了~
四。bin日志的相关配置。一般binlog的配置都写在mysql的配置文件:my.cnf中,这样在启动MySQL的时候这些配置就可以直接生效了。
为了理解,可以对binlog的配置项有所了解。
[mysqld]
# binlog相关配置
#指定binlog日志存储的位置。
datadir=/home/mysql/mysql/var
# specification binlog的名称是mysql-bin.0000XX
#如果添加这一行配置,binlog的文件名就是主机名。
log-bin=mysql-bin
#索引所有当前二进制日志
log-bin-index=mysql-bin.index
#最大尺寸
max_binlog_size=1G
# binlog的同步时序
sync-binlog=1
# binlog的格式
binlog-format=ROW
#保留binlog七天
过期日志天数=7
5.binlog有什么用?如果redolog中的记录偏向于物理级别,例如,在哪个数据页上对该记录做了哪些更改。
然后,binlog中的记录偏向于逻辑级:比如xxx表中id=yyy的行做了哪些修改,修改后的值是什么。
Binlog不会记录你的选择、显示等操作。
您可以在查询日志中找到仅用于查询的SQL,如select和show。
公共binlog有以下功能。
没有where条件的删除?不要惊慌!Binlog可以帮助你恢复数据,建立一个一主两从的MySQL集群。binlog可以帮助你完成主从之间的数据同步。审计,通过分析binlog,可以检查是否存在SQL注入攻击。但是你知道吗?
默认情况下,Binlog不打开。因为打开binlog会稍微降低mysql的性能(1%)。
但是打开binlog后,可以设置MySQL集群,检查SQL注入,恢复误删数据。所以在线MySQL集群都是开放binlog的。你认为打开binlog安全吗?它闻起来不错。
不及物动词超级有用的参数sql_log_bin分享给你一个网上真实存在的场景,你就可以知道这个参数的神奇作用了。
比如你用一个MySQL集群,一个主两个从在线,然后一个活动来了。你需要在一个图书馆在线的数据表中添加一列,这个表中的数字非常大。
添加一个列需要获取表锁,而巨大的数据量使您更改table table异常缓慢。在获取表锁的过程中,正常的DML也会被阻塞。这时候你就不得不考虑无损ddl了,比如golang的ghost(无损DDL原理怎么做?我的后门文章会写,这篇文章就不展开了)。
ghost工具的特点是,它需要预先执行一些sql,以便首先检查您的集群符号是否满足其要求。为了不影响联机,你肯定会想把这些预执行的SQL放到从库中执行。在从库上执行没问题,但是你执行的sql会生成bin log。还有新的GTIDs(后面讲MySQL集群的时候会分享给你,这里你只需要理解为一个东西的唯一标识)。更糟糕的是,主库中没有GTIDs。
当主设备和从设备都正常运行时,主设备和从设备bin日志不一致也没有关系。然而,当从机停机时,从机将重新启动并向主机发送自己的GTID集。作为GTIDs中主设备没有从从设备中出来的一部分,从设备不能再次加入集群。
其实这个问题很好解决。使用此参数sql_log_bin。
此sql_log_bin变量控制是否为当前会话启用二进制日志记录(假设二进制日志本身已启用)。默认值为开。若要为当前会话禁用或启用二进制日志记录,请将会话sql_log_bin变量设置为OFF或ON。
全局sql_log_bin变量是只读的,不能修改。
七。以后的文章本文就到此为止。它概括地讲述了binlog的各个方面,让你对binlog有一个大致的了解。
接下来的几篇文章,我会尝试对binlog中的某一点做一个问答式的叙述。如下,敬请关注,敬请期待。
binlog是什么时候写的?binlog到底长什么样?有哪些格式?各种格式的binlog的优缺点?恢复数据?
关于“构建一个一主两从的MySQL集群,binlog帮你完成主从之间的数据同步。”会穿插在MySQL集群中。
参考:
https://dev.mysql.com/doc/refman/5.7/en/binary-log.html
https://dev . MySQL . com/doc/ref man/5.7/en/replication-options-binary-log . html
https://dev.mysql.com/doc/refman/5.7/en/set-sql-log-bin.html
版权归作者所有:原创作品来自给我白日梦的博主,转载授权请联系作者,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。