Mysql基础4——系统变量

1 binlog 相关

  • sync_binlog:控制了事务提交时,binlog刷盘策略
    • sync_binlog=0 的时候,表示每次提交事务,都只写到文件系统的 page cache,不 fsync,并没有把数据持久化到磁盘
    • sync_binlog=1 的时候,表示每次提交事务都会执行 fsync,都会持久化到磁盘;
    • sync_binlog=N(N>1) 的时候,表示每次提交事务都 写到文件系统的 page cache,但累积 N 个事务后才 fsync。
  • binlog_format: 控制binlog格式;
  • binlog_row_image: 控制binlog在row格式下,每行数据的在binlog中记录的信息类型;
    • full:记录更的行的所有的列值信息,默认值。
    • minimal:仅仅记录被更改的以及能够唯一识别数据行的列值;
    • noblob:记录所有的列值,但是BLOB 与 TEXT列除外(如未更改)。

2 redo log

  • innodb_flush_log_at_trx_commit: 控制redo log刷盘策略
    • 0: 表示每次事务提交时都只是把 redo log 留在 redo log buffer 中 ;
    • 1: 表示每次事务提交时都将 redo log 直接持久化到磁盘;
    • 2: 表示每次事务提交时都只是把 redo log 写到 page cache。

3 锁相关

  • innodb_lock_wait_timeout:锁等待时间
  • innodb_deadlock_detect:死锁检测策略
    on: 默认值,开启死锁检测
    off:关闭死锁检测

4 timeout相关参数

image.png
  • connect_timeout:连接过程中握手超时时间
  • interactive_timeout & wait_timeout: 连接在不活跃状态时的超时时间,在wait_timeout时间内没有进行任何操作,那么再次操作的时候就会提示超时,这是mysql client会重新连接。
    • 如果通过交互的形式连接server, 那么wait_timeout会被设置成interactive_timeout;
  • innodb_lock_wait_timeout & innodb_rollback_on_timeout: innodb中行锁的等待超时时间,如果超时,则当前语句会回滚。如果设置了innodb_rollback_on_timeout,则会回滚整个事务,否则,只回滚事务等待行锁的这个语句。
  • lock_wait_timeout:元数据锁等待超时时间

5 复制相关

其他

  • lower_case_file_system:表示当前系统文件是否大小写敏感,只读参数,无法修改。
    ON 大小写不敏感
    OFF 大小写敏感

  • lower_case_table_names
    表示表名是否大小写敏感,可以修改。
    lower_case_table_names = 0时,mysql会根据表名直接操作,大小写敏感。
    lower_case_table_names = 1时,mysql会先把表名转为小写,再执行操作,大小写不敏感;

  • lower_case_table_names在binlog中的表现:
    lower_case_table_names = 1时:

    • ddl: 如果ddl含有的表名是大写的, ddl中sql依然是大写的;小写是小写;
    • dml: 都是小写的;
ddl:
### use `test_22`/*!*/;
### SET TIMESTAMP=1638277376/*!*/;
 create table T_UPER(id int(11) primary key)

dml:
### INSERT INTO `test_22`.`t_uper`
### SET
###   @1=1 /* INT meta=0 nullable=0 is_null=0 */

lower_case_table_names = 0(大小写敏感)时:

  • ddl: 如果ddl含有的表名是大写的, ddl中sql依然是大写的;小写是小写;
  • dml: 如果dml含有的表名是大写的, dml中sql依然是大写的;小写是小写;
ddl:
#211130 21:40:35 server id 761461042  end_log_pos 116532        Query   thread_id=556   exec_time=0     error_code=0
use `gene`/*!*/;
SET TIMESTAMP=1638279635/*!*/;
create table T_UPPER(id int(10) primary key)

dml:
### INSERT INTO `gene`.`T_UPPER`
### SET
###   @1=1 /* INT meta=0 nullable=0 is_null=0 */
# at 129322
#211130 21:41:00 server id 761461042  end_log_pos 129349        Xid = 8034
COMMIT/*!*/;
  • innodb_file_per_table
    ON:每个 InnoDB 表数据存储在一个以 .ibd 为后缀的文件中。
    OFF:表的数据放在系统共享表空间,也就是跟数据字典放在一起;
    mysql5.6.6之后,默认是ON

-query_cache_type:查询缓存设置
未完待续...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容