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


猜你喜欢
- js 中判断某个元素是否存在于某个 js 数组中,相当于 php 语言中的 in_array 函数。Array.prototype.S=St
- 在一测试服务器(CentOS Linux release 7.2.1511)上安装MySQL 5.6(5.6.19 MySQL Commun
- 1. 背景:最近写了一篇CSDN博客需要上传gif图,发现大小超过了5M,无法上传。文件大小:本想自己找个免费的压缩工具,结果下载下来的工具
- 处理json中不带双引号key问题在解析网页json数据的时候,我发现python标准库json模块无法加载数据。如下面数据import j
- 我们日常生活中经常会使用浏览器访问Web站点这个过程中到底发生了什么吗?为什么我们在浏览器地址栏上面输入要访问的URL后就可以访问到Web页
- Qt Designer的介绍在PyQt中编写UI界面可以直接通过代码来实现,也可以通过Qt Designer来完成。Qt Designer的
- 请求的ajax路径传递的参数(data)会到action中被一个同样名字的变量(附带set get方法)接收,返回的data是一个JQuer
- 英文原文:http://www.usabilitypost.com/2009/04/15/8-characteristics-of-succ
- mysql设置字段长度1.关于char和varcharchar是定长字符,varchar是变长字符。在mysql4.0版本之前,char和v
- Django是用python写的web开发框架,其特点是:1.重量级框架,内部封装了很多的功能组件,使开发变的简便快速,2.MVT模式:前后
- 说明写了一段时间的java之后,特别不习惯PHP本身的弱类型方式,在写代码的时候总觉得不怎么放心,特别本身PHP又是弱类型的语言,所以在编码
- IT行业,技术要比学历、年龄、从业经验更为重要,技术水平直接决定就业薪资,想要学好python,首先要先了解精通Python语言基础、Pyt
- python安装完毕后,提示找不到ssl模块:[www@pythontab.com ~]$ pythonPython 2.7.15 (def
- 源码下载:http://xiazai.aspxhome.com/201509/yuanma/drag_sort1(aspxhome.com)
- kelon 问:格式如下:s="地,在要,大,奇功,不知,但是,不示"我想把它split分出來,变成数组來循环,但是不知
- 前言:在fastapi中,我们定义的查询参数是可以设置成:必选参数 or 可选参数。可选查询参数只要给查询参数的默认值设置为None,表示该
- 本文实例为大家分享了vue+Element实现登录随机验证码的具体代码,供大家参考,具体内容如下验证码验证只是前端,无需后台交互首先,创建一
- 一、先来看备份mysql数据库的命令mysqldump -u root --password=root --database abcData
- 用6N±1法求素数任何一个自然数,总可以表示成为如下的形式之一:6N,6N+1,6N+2,6N+3,6N+4,6N+5 (N=0,1,2,…
- 死锁(Deadlock)所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进