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


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 |


| 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命令,实现基于时间点和位置的恢复操作。


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王者晋级之路》等




