MySQL 运维之36计
程序员文章站
2022-05-28 16:17:47
...
第1计、重要事情说三遍:备份、备份、备份,定期全备+增备/差异备份,并且开启binlog 第2计、如果写成Mysql、mySQL、MySql 的人,我看MySQL 不适合您,改用其他的吧 第3计、如果还坚持认为MyISAM 比InnoDB 表好的话,也请别再使用MySQL 第4计、光做好备份还不够,还要做恢复测试,并且检查数据有效性 第5计、数据库密码要合规,弱密码等于没密码,没密码就等着被勒索吧 第6计、管理用户和业务用户区分不同权限角色,业务用户切记不可授权过高 第7计、SLAVE 备库谨记关闭写入权限(read_only=1) 第8计、存储过程、触发器、表分区想用就用,用好就行,有性能瓶颈优化就是 第9计、绝不监听公网IP,并用防火墙挡住非外部连接,降低被入侵风险 第10计、InnoDB 表一定要用自增列或呈递增属性的列做主键(该列最好无业务意义),可有效提高InnoDB 表性能、避免主从数据复制延迟 第11计、总是创建合适的索引,否则InnoDB 的行锁会升级成为类似表级锁 第12计、基数低的列,强烈不建议单独创建索引(可以放在联合索引中) 第13计、联合索引中,基数高的列放在前面,基数低的列放在后面 第14计、想保证宕机时数据不丢失, 烧香拜佛不管用, 设置双1 才靠谱(innodb_flush_log_at_trx_commit=1 & sync_binlog=1) 第15计、命令行下写SQL 时,先写好WHERE 条件,或先全部写好确认再三后才提交执行 第16计、EXPLAIN 结果中重点关注type=All/Index,或者Extra 中出现Using temporary、Using filesort 的情况并进行优化 第17计、性能、压力测试时,测试机客户机一定要和Server 端分开 第18计、连接数爆满时更应该调低最大连接数,而非调高,并且尽快用上thread pool 第19计、SHOW PROCESSLIST 结果重点关注频繁出现的Sending data、Sorting result、Copying to tmp table、Copying to tmp table on disk、Creating sort index、Waiting for xx lock 第20计、不想MySQL 死得快,就赶紧关闭鸡肋的Query Cache(query_cache_type=0) 第21计、默认开启autocommit;需一次性写入大量数据时,则应关闭autocommit,最后手工提交 第22计、监控InnoDB 表空间碎片率:ibd 文件实际大小/(Data_length+Index_length),并决定是否需要重整表空间 第23计、环境初始化之一:开启CPU 最大性能模式 第24计、环境初始化之二:关闭NUMA 第25计、环境初始化之三:使用xfs/ext4 文件系统,以及deadline/noop io scheduler 第26计、mysqld 进程占用CPU %user 突然飙高,99.99%是因为索引不当导致 第27计、优先解决频次最高的Slow Query,其次核心业务高峰时段的Slow Query 第28计、每个表都增加create_time、update_time 字段,对DB 运维帮助非常大 第29计、每个SQL 条件都加上引号,并对用户输入强制类型转换,避免SQL 注入及类型隐式转换风险 第30计、只SELECT 必要字段,不要总是SELECT *,避免额外I/O 读 第31计、设置innodb_buffer_pool_size 为物理内存的50%~70%为宜 第32计、疑似SQL 注入一般都会调用SLEEP()函数,或访问information_schema 下的视图,每见必杀 第33计、不要直接删除数据表,而是先RENAME;删除大表用硬链接方式更高效 第34计、要特别注意监控是否有内存泄露问题,尽早排除风险 第35计、优化的核心目标是提高I/O 效率,无论是增加内存,还是换高性能I/O 设备,亦或提高CPU 性能、增加索引等 第36计、少用TEXT/BLOB 等大对象列,每行长度字节数尽量不超过innodb_data_page_size的一半
[url]http://www.ywadmin.com [/url]
上一篇: 同步/异步,阻塞/非阻塞,并行/串行
下一篇: 糖浆蜂蜜结晶到底是怎么回事