MySQL数据库生产环境的维护工作总结的经验

 从过往MySQL数据库生产环境的维护工作中,总结的一些小经验和知识,未必有多深奥,但是对我们消除隐患,确保MySQL数据库生产环境四个9的作用非常有效之一的手段,运维人员要非常注意细节,尽量减低故障发生的概率。

  (一) DML语句书写建议

  (1). DML语句不允许出现@number方式替代字段名称

  不合理的写法:

  UPDATE table_name SET @1=NOW() WHERE @2=1;

  正确的写法:

  UPDATE table_name SET column_name1=NOW() WHERE column_name2=1;

  (2). UPDATE OR DELETE 禁用LIMIT子句

  不合理的写法:

  UPDATE table_name SET column_name1=NOW() WHERE column_name2=1 LIMIT 1;

  正确的写法:

  UPDATE table_name SET column_name1=NOW() WHERE column_name2=1;

  (3). INSERT语句需要写清楚值和字段对应关系

  不合理的写法:

  INSERT INTO table_name VALUES(NOW(),DATE_ADD(NOW(),INTERVAL +1 DAY));

  正确的写法:

  INSERT INTO table_name(gmt_create,gmt_modify) VALUES(NOW(),DATE_ADD(NOW(),INTERVAL +1 DAY));

  (4). DML语句少用不确定性函数

  常见被大家使用的不确定性函数:UUID()、RAND()、SYSDATE()等函数,若无特殊用处之外,请以确定性函数替代之。

  推荐阅读的技术文章:曾用于内部培训的PPT内容:MySQL开发规范与实用技术交流

  (二) 大数据量的DELETE OR UPDATE

  可能出于某些原因和运营目的,需要对数据库中的数据进行大量的清理或更改某字段的值,分别举 二个示例:

  ① 网络专项整治的时期,需要删除大量含某些关键词的内容;

  ② 给符合某一条件(例如:等级,在线时长)的游戏玩家,赠送100~1000不等数量的游戏币;

  给出的2个数据修改需求示例,若是直接根据相关要求去做,一个是需要用到模糊查询,另一个数据更新条件也没有合理索引可用,为此可能造成表对象表级锁被长时间锁住,而且阻塞其他更改类型数据操作服务,所以我们不得不采用更合理的办法,建议如下步骤实施:

  ① 设计并创建一张表tmp_pk_data ,用于记录将要被修改记录的主键,及需要的相关信息;

  ② 优先考虑在备库上跑一条SQL命令或存储过程的方式,把主键及相关数据写到表tmp_pk_data中;

  ③ 编写一个存储过程,使用游标循环控制获得tmp_pd_data的信息,根据主键更新或删除目标表的数据,且建议此操作在备库上完成(注释:必须是双主复制模式,才可在备库上执行);

  (三) 定期规律性清理数据的DELETE

  定期规律性数据的清理,优先对目标表的数据操纵方式进行分类:

  ① 若是日志类型的数据,则完全可以改为借助分区表的方式,比如按日期删除数据的条件,则可以用日期作为数据分区条件,然后增删分区的方式实现数据的清理工作;

  ② 若是数据的UPDATE/DELETE/SELECT操纵条件,与定期清理数据的规则一致或被其包含,则可以考虑使用分区表,然后借助删除分区方式达到数据清理的目标;

  ③ 若不能使用分区表解决的,则可以考虑参考上章节介绍的“大数据量的DELETE OR UPDATE”内容;

  (四) M-M架构的大数据量DML技巧

  定期规律性数据的清理,优先对目标表的数据操纵方式进行分类:

  ① 若是日志类型的数据,则完全可以改为借助分区表的方式,比如按日期删除数据的条件,则可以用日期作为数据分区条件,然后增删分区的方式实现数据的清理工作;

  ② 若是数据的UPDATE/DELETE/SELECT操纵条件,与定期清理数据的规则一致或被其包含,则可以考虑使用分区表,然后借助删除分区方式达到数据清理的目标;

  ③ 若不能使用分区表解决的,则可以考虑参考上章节介绍的“大数据量的DELETE OR UPDATE”内容;

时间: 2024-09-27 01:51:00

MySQL数据库生产环境的维护工作总结的经验的相关文章

sql server数据导到mysql数据库的环境配置

  前段时间 尝试进行sqlserver数据库移植到mysql数据库 方案是 perl语言读取sqlserver 作相应的类型转换数据处理后 写入mysql 两个执行端和一个接收端 最终达到的速度是一千万级条数的表 大概5分钟内导入完毕 其中解决了乱码等问题 3G大小的数据库耗时半个小时 15G的耗时5个小时 整个流程如下: 首先是环境的配置和插件的安装. 首先是接收端 在一台linux系统的机子中 安装mysql 如果有地理坐标字段geo的话 mysql要用5.5以上的版本才行 CentOS6

CentOS+Nginx+PHP+MySQL标准生产环境配置方法_Linux

PHP 5.3.1 MySQL 5.0.89 Nginx 0.8.33 或 0.7.65 (可选) 这个可比网上流传的什么一键安装包要好得多,强烈推荐此法安装,适合所有菜鸟和高手.我服务器上全用的源代码编译安装,也好不到哪去,还很费劲.我这个装完已经包含 php 的一些常用扩展, PDO,eaccelerator,memcache,tidy等等. CentOS 最小化安装,然后先新建一个 repo # vi /etc/yum.repos.d/centos.21andy.com.repo 放入如下

京东MySQL数据库Docker化最佳实践(附PPT)

讲师介绍  刘风才 京东资深数据库专家     2012年加入京东,担任MySQL DBA一职,负责数据库架构设计.数据库性能优化等日常运维工作,参与过分布式数据库项目.多中心交易项目等. 2013~2016连续4年作为MySQL数据库618.11.11项目DBA负责人,负责相应备战工作,为大促平稳护航.   演讲大纲: 京东Docker技术发展历程 MySQL数据库为何要Docker化 MySQL数据库Docker化前准备工作 遇到的问题与解决方案 总结与展望   京东MySQL数据库Dock

生产环境中的容器之工作流

本文讲的是生产环境中的容器之工作流,[编者的话]很多公司已经在生产环境里大规模使用容器.前一篇文章里介绍了Spotify,DramaFever,Built.io和IIIEPE如何以及为什么使用容器.本文继续深入讨论这几个公司的工作流. 构建应用程序以及管理pull请求 在生产环境使用容器的一大吸引人之处是创建无缝的开发到生产环境的能力,最先代码在开发人员的笔记本上,然后能够整体移动到测试环境,并且随后直接部署,而不会因为底层基础架构环境的改动而导致问题. IIIEPE怎么做 Luis Elizo

MySQL数据库学习笔记(四)----MySQL聚合函数、控制流程函数(含navicat软件的介绍)

[正文] 一.navicat的引入:(第三方可视化的客户端,方便MySQL数据库的管理和维护) NavicatTM是一套快速.可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设.它的设计符合数据库管理员.开发人员及中小企业的需要.Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建.组织.访问并共用信息. Navicat 是闻名世界.广受全球各大企业.政府机构.教育机构所信赖,更是各界从业员每天必备的工作伙伴,被公认为全球最受欢迎的MySQL前

生产环境使用 pt-table-checksum 检查MySQL数据一致性

公司数据中心从托管机房迁移到阿里云,需要对mysql迁移(Replication)后的数据一致性进行校验,但又不能对生产环境使用造成影响,pt-table-checksum 成为了绝佳也是唯一的检查工具. pt-table-checksum 是 Percona-Toolkit 的组件之一,用于检测MySQL主.从库的数据是否一致.其原理是在主库执行基于statement的sql语句来生成主库数据块的checksum,把相同的sql语句传递到从库执行,并在从库上计算相同数据块的checksum,最

《DBA修炼之道:数据库管理员的第一本书》——1.11节生产环境与测试环境

1.11 生产环境与测试环境合格的数据库部署至少要创建并支持两种独立的环境:生产环境和测试环境(或开发环境).在测试环境进行新的开发和维护工作,而在生产环境运行真正的业务运作应用程序.将测试环境与生产环境完全分开很有必要,这样可以确保业务操作的完整性和性能.如果这两者没有分开,将会导致开发工作对企业的日常业务产生影响.最终你可能要因为开发初期的错误程序代码而访问或修改生产数据.测试却访问了生产数据会导致生产性能问题.当然了,修改了生产数据的测试程序会创建无效数据.将测试与生产环境分开以确保业务操

线上mysql数据库不停机的环境下如何添加新的从机

  在工作中,主从环境搭的多了,但是,基本上都是在DB SERVER停机(游戏公司)的情况下搭建的,今天突然被一技术官问,如何在线添加主从,回答的大概思路,但是没有实践过,下面,我就测试一下.各位也可以先想想自己的思路:mysql 5.1版本,二进制日志文件(时间长了,有些二进制日志定期清除了),pos号 注:在mysql 5.6版本中,已经有基于GTID的主从复制(即:不需要知道日志文件和position号),只需还原最新的备份就可实现,这里只讨论mysql 5.1 一.目前的基本环境: 主D

就是刚出来工作 经理今天安排了个任务 大致就是用NHibernate技术把从页面获得的数据保存到MYSQL数据库

问题描述 就是刚出来工作经理今天安排了个任务大致就是用NHibernate技术把从页面获得的数据保存到MYSQL数据库,给了时限半个月,有没有好心的大神帮帮我啊,这个技术一无所知,谢谢了 解决方案 解决方案二:我们从来瞧不上NHibernate,累赘得会死人的.要访问MySQL,读写一堆.net对象,直接写sql语句与之交互就行了.不用学习半个月,最多2天半就行了.解决方案三:建议你先把数据写到MySQL数据库中(创建1.2个数据表来保存你的数据),然后再开始考虑NHibernate.解决方案四