20

《叶问》第2期

 5 years ago
source link: http://www.10tiao.com/html/672/201807/2653931760/1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

关 于 叶 问


《叶问》是知数堂新设计的互动栏目,不定期给大家提供技术知识小贴士,形式不限,或提问、或讨论均可,并在当天发布答案,让大家轻轻松松利用碎片时间就可以学到最实用的知识点。


2018年6月20日,周三

为什么说pt-osc可能会引起主从延迟,有什么好办法解决或规避吗?


  • 若复制中binlog使用row格式,对大表使用pt-osc把数据从旧表拷贝到临时表,期间会产生大量的binlog,从而导致延时

  • pt-osc在搬数据过程中insert...select是有行锁的,会降低事务并行度;且pt-osc搬数据过程中生成的binlog不是并行的,所以在slave不能并行回放

  • 可以通过设定参数 --chunk-size、--chunk-time控制每次拷贝数据大小,也可以设定--max-log、check-interval、check-slave-lag等参数控制主从复制延迟程度(但这样可能会造成pt-osc工作耗时太久,需要自行权衡)



2018年6月21日,周四

你遇到过哪些原因造成MySQL异步复制延迟?


  1. master上多为并发事务,salve上则多为单线程回放(MySQL 5.7起,支持真正的并行回放,有所缓解)

  2. 异步复制,本来就是有一定延迟的(否则也不叫做异步了,介意的话可以改成半同步复制)

  3. slave机器一般性能比master更弱(这是很常见的误区,其实slave对机 器性能要求并不低)

  4. 有时为了节省机器资源,会在slave上运行多个实例

  5. 表结构设计不合理,尤其是在MySQL 5.6之前没主键,几乎会造成所有更新都全表扫描一遍,效率非常低

  6. slave上运行大量只读低效率的SQL

  7. 大量大事务,也会造成slave无法并行回放 

  8. 业务设计缺陷,或网络延迟等导致延迟



2018年6月22日,周五

MySQL每天产生了多大容量的binlog,用SQL语句能查到吗?


首先,这是个假设性命题(又一个钓鱼题)。 
这个需求完全可以通过系统层命令,配合MySQL中的“FLUSH BINARY LOGS”快速完成。 
运行SHOW MASTER/BINARY LOGS命令能查看全部binlog列表,但没办法区别哪些是当天内生成的。



2018年6月23日,周六

用什么方法可以防止误删数据?


以下几个措施可以防止误删数据,如下: 

  1. 生产环境中,业务代码尽量不明文保存数据库连接账号密码信息

  2. 重要的DML、DDL通过平台型工具自动实施,减少人工操作

  3. 部署延迟复制从库,万一误删除时用于数据回档,且从库设置为read-only

  4. 确认备份制度及时有效

  5. 启用SQL审计功能,养成良好SQL习惯

  6. 启用 sql_safe_updates 选项,不允许没 WHERE 条件的更新/删除

  7. 将系统层的rm改为mv

  8. 线上不进行物理删除,改为逻辑删除(将row data标记为不可用)

  9. 启用堡垒机,屏蔽高危SQL

  10. 降低数据库中普通账号的权限级别

  11. 务必开启binlog





转载声明:本文转载自「知数堂」,搜索「izhishuedu」即可关注。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK