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

时间:2011-12-01 10:20:52 

  从过往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”内容;


标签:mysql,数据库
0
投稿

猜你喜欢

  • Python实现字符串的逆序 C++字符串逆序算法

    2022-04-10 01:35:54
  • CentOS 6、7下mysql 5.7 详细安装教程

    2024-01-24 18:00:47
  • 写一个简单的bat脚本执行php文件

    2024-03-07 09:18:12
  • Pandas创建DataFrame提示:type object 'object' has no attribute 'dtype'解决方案

    2022-08-06 16:33:18
  • 微信小程序开发之tabbar图标和颜色的实现

    2024-06-20 01:43:02
  • 用Python实现批量生成法务函代码

    2022-05-27 15:05:28
  • Python配置文件yaml的用法详解

    2023-07-04 21:02:56
  • Django自定义过滤器定义与用法示例

    2022-07-24 13:09:00
  • php网络安全中命令执行漏洞的产生及本质探究

    2023-05-30 05:34:31
  • 用Python逐行分析文件方法

    2022-07-10 10:17:49
  • Pandas缺失值填充 df.fillna()的实现

    2023-11-24 00:01:41
  • Matlab实现新冠病毒传播模拟效果

    2022-01-23 00:01:28
  • 网易首页的新闻代码

    2022-02-24 16:01:15
  • Div的浮动+循环(描述的不清楚,请看图)

    2008-09-22 20:21:00
  • Oracle数据库中表空间的基本管理操作小结

    2024-01-26 23:18:26
  • ORACLE应用经验(1)

    2010-07-31 12:53:00
  • EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页

    2011-04-08 10:40:00
  • python 数据提取及拆分的实现代码

    2023-11-13 09:13:12
  • getdata table表格数据join mysql方法

    2024-01-25 17:55:08
  • Python编程编写完善的命令行工具

    2023-08-02 11:22:56
  • asp之家 网络编程 m.aspxhome.com