暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的学习-my.cnf以及binlog等

原创 张伟垚 2020-07-28
2389

my.cnf里面的各种参数就是启动数据库后生效的参数,如果需要指定参数文件的路径则加上一个–defaults-file。
image.gif

image.gif

innodb_buff_pool是InnoDB引擎用于缓存常用数据的,包括表和索引(这里我对等理解为Oracle的buffer pool)
MySQL5.7版本以后支持在线修改innodb_buffer_pool的大小–innodb_buffer_pool_size,MySQL5.7版本以后支持在线修改innodb_buffer_pool的大小
–innodb_buffer_pool_instances,该参数的默认值时1,MySQL5.6.6之后可以调整为多个区域,意思是将buffer_pool分割为多个区域,提高高并发性,但是必须在buffer_pool_size大于1GB才生效。

| innodb_buffer_pool_load_at_startup | ON |
| innodb_buffer_pool_dump_at_shutdown | ON |
设置将buffer pool的热数据快速加载回来.
原理:实例关闭的时候,将热数据的元数据dump到ib_buffer_pool中
| innodb_buffer_pool_filename | ib_buffer_pool |

image.gif

image.gif
| innodb_data_file_path | ibdata1:12M:autoextend | 指定系统表空间的大小,自动扩展。
| innodb_temp_data_file_path | ibtmp1:12M:autoextend |指定临时表空间的大小,自动扩展。

MySQL中有两种参数类型:
动态参数
MySQL运行过程中,可以不停机进行修改的参数,通过set global全局退出会话后仍生效或者set session会话级别退出会话后失效的方式进行修改。

静态参数
MySQL运行过程中,必须停机重启进行修改的参数,将需要修改的参数在my.cnf中进行添加或者修改,关闭数据库后重启生效。

binlog的相关

二进制日志binlog的作用:
1、完成主从复制,主数据库上所有修改数据的操作记录在bin-log中,通过网络传输给从库,从而应用到备库中,保存主从一致。
2、可进行恢复操作,使用mysqlbinlog命令,实现基于时间点和位置的恢复操作。
image.gif
image.gif

MySQL双1模式

在学习这个之前先捋一下redo log和binlog的写入模式:

redo log buffer写入到redo log file里的方式是以下参数决定

通过innodb_flush_log_at_trx_commit参数控制刷新

innodb_flush_log_at_trx_commit=0
1、每1s刷新redo log buffer到redo log file
2、同时刷新脏数据到磁盘
3、不保证每次commit触发redo log thread 写入到redo log
可能丢失1s的数据。

innodb_flush_log_at_trx_commit=1
每次commit时触发redo log thread将redo log buffer到redo log file,并且刷脏到磁盘。不丢数据。

innodb_flush_log_at_trx_commit=2
每次commit时触发redo log thread将redo log buffer到redo logfile,但不刷脏到磁盘。

binlog的sync_binlog也是决定binlog cache如何写入到binlog file里的
sync_binlog–有N个值可以设定

sync_binlog=0时,每次commit时,MySQL不做fsnc类的磁盘同步指令刷新binlog_cache到磁盘,而是让firesystem自行决定(决定的算法是?)什么时候做同步,或者binlog_cache满了同步到磁盘中。

sync_binlog=N时,每N次commit时,MySQL进行一次fsync类的磁盘同步将binlog_cache内容强行写入磁盘。

双一模式就是指写入两种log的方式都为1.
innodb_flush_log_at_trx_commit=1
sync_binlog=1

redo log和binlog的区别

记录的内容不同:
binlog逻辑日志,记录所有数据的变化信息
redo log物理日志,记录InnoDB表数据的变化

记录内容的时间不同:
binlog记录commit完后的DML和DDL SQL
redo log记录事务发起之后DML和DDL SQL

文件使用方式的不同:
binlog写满后不会循环写,会再次生成一个,实例重启后也会生产新的
redo log是循环使用

作用不同:
binlog可以恢复数据,主从复制搭建(我这里理解为MySQL的归档日志,由于redo log不会被归档,所以使用redo log是不足以恢复数据的,需要使用一个记录时间长,范围广的日志,这里对应的就是binlog)
redo log作为异常宕机或者介质故障后的数据恢复(crash recovery)

PS:以上均为个人学习之后的理解,如有错误,恳请指正。
学习资料:《Mysql官方文档5.7版》、《MySQL王者晋级之路》等

最后修改时间:2020-07-28 15:34:29
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论