MySQL核心之双一原则
mysql 核心 原则
2023-09-11 14:18:55 时间
所谓的双一就是指:
sync_binlog=1; innodb_flush_log_at_trx_commit=1
innodb_flush_log_at_trx_commit和sync_binlog这两个参数是控制MySQL磁盘写入策略以及数据安全性的关键参数。
innodb_flush_log_at_trx_commit表示log buffer写入log file以及刷新到磁盘的过程,
sync_binlog表示事务写入binary log并使用fdatasync()函数同步到磁盘的过程。
1、对于innodb_flush_log_at_trx_commit来说
取值为0:log buffer每秒写入日志文件log file并刷新flush到磁盘。这种情况下,MySQL的日志刷写操作和事务提交操作没有关系。因此MySQL的性能是最好的时刻。不过不安全
取值为1:每次事务提交时,log buffer会被写入到日志文件并且还要刷写到磁盘上。由于每次事务都要提交到I/O设备,因此会慢一点,不过是最安全的。
取值为2:0和1的中间效果,即每次的事务提交会写入log buffer,而刷写到磁盘则是一秒进行一次。性能属于一般。
2、对于sync_binlog来说:
取值为0:MySQL自己不主动同步,依赖操作系统本身不定期把文件内容刷新到磁盘。性能最佳
取值为1:每次事务提交后将binlog_cache中的数据强制写入磁盘bin log日志中,是最慢的,但是最安全
取值 >1:当进行n次事务提交后,MySQL将binlog_cache中的数据强制写入磁盘中。
当两个参数都设为1,这适用于那些数据安全要求比较高的场合,同时要求磁盘等也比较好才行。
对于重做日志redo log和二进制bin log的区别是什么,我们有必要说一下:
1)二进制日志会记录所有与mysql有关的日志记录,包括InnoDB等其他存储引擎的日志,而InnoDB存储引擎的重做日志只记录有关其本身的事务日志, 2)记录的内容不容,不管你将二进制日志文件记录的格式设为哪一种,其记录的都是关于一个事务的具体操作内容,而InnoDB存储引擎的重做日志文件记录的关于每个页的更改的物理情况; 3)写入的时间也不同,二进制日志文件是在事务提交前进行记录的,而在事务进行的过程中,不断有重做日志条目被写入重做日志文件中。
相关文章
- Mysql授权允许远程访问解决Navicat for MySQL连接mysql提示客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端
- 【MySql】mysql 慢日志查询工具之mysqldumpslow
- XtraBackup出现 Can't connect to local MySQL server through socket '/tmp/mysql.sock'
- PDO连接mysql和pgsql数据库
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
- 【原创】MySQL Proxy - query注入动作中的脚本序列
- MySql把手机号中间四位替换为星号
- Mysql:Error Code 1235,This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决
- MySQL--执行mysql脚本及其脚本编写
- MYSQL避免全表扫描__如何查看sql查询是否用到索引(mysql)
- MYsql 数据库密码忘记(Window)-2(mysql 5.7)
- MySQLWorkbench链接MySQL数据库
- ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘
- Mysql跨表更新 多表update sql语句总结
- Mysql的mysqldump详解 mysql数据库备份和导入
- MYSQL运算符操作
- MYSQL提权之反弹SHELL——数据库提权属于webshell到管理员的纵向提权,本质还是利用udf提权,无非是在mysql自定义函数中使用了反弹shell而已
- MySQL数据库篇之mysql的快速启动和停止
- MySQL 配置, 避坑 sqlyog连接mysql错误码2058
- MySQL-第十三章-核心参数优化(详解)