MySQL 运维之36计

阅读更多

第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]

你可能感兴趣的:(MySQL 运维之36计)