| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> mysql保证数据的安全性 -> 正文阅读 |
|
[大数据]mysql保证数据的安全性 |
mysql 是日志先行的原则,在操作一条数据的时候,就会把旧数据插入undolog 在事务提交的时候,会把最新的数据保存在redolog表中 如下为:logbuffer刷盘的机制 ?在事务提交之后,如果开启了binlog,则会把sql或者数据的前后变化保存在binlog中 undo.log和redo.log保证了数据的一致性,保证了数据库的安全 持久性:持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,耐得住任何数据库系统故障。持久性通过数据库备份和恢复来保证。 mysql中innodb_flush_log_at_trx_commit默认设置的是1,即最安全的设置 当设置为0的时候,mysql宕机会丢失前一秒的数据 当设置为1的时候,操作系统宕机,会丢失掉缓冲区的数据 ?再来看另外一个参数sync_binlog?: sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。 sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。 mysql 8.0已经默认是1了, 当mysql宕机了,此时正好有一个事务没有提交,但是此时最新数据已经刷到redo表了,还没及时把sql信息刷到binlog日志,可能会造成短暂的binlog日志和表数据不一致的情况,当重启启动数据回滚之后,变成正常了 所以:innodb_flush_log_at_trx_commit =1 和sync_binlog = 1是数据库最安全的设置,当然业务数据库主要还是要保证数据的一致性,如果准求性能的话,可以把innodb_flush_log_at_trx_commit =2 和sync_binlog = 500/1000 ,但是这样风险挺大的 当innodb_flush_log_at_trx_commit =1 和sync_binlog = 1设置的时候,三个日志插入的顺序 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 5:05:34- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |