数据库运维原则

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:    一、数据库运维工作总原则 1、能不给数据库做的事情不要给数据库,数据库只做数据容器。
 

 一、数据库运维工作总原则
1、能不给数据库做的事情不要给数据库,数据库只做数据容器。
2、对于数据库的变更必须有记录,可以回滚。
二、权限相关

总原则,以最低粒度控制权限。
SELECT权限:所有开发人员均可拥有自己业务范围内的表权限。
INSERT/UPDATE/DELETE权限:所有项目经理可以拥有自己业务范围内的表权限。
Structure权限:数据库管理员可以拥有。
Administration权限:系统管理员和数据库管理员可以拥有。
程序访问权限:根据IP和系统名建立用户名,只拥有必须表的访问权限。
全部权限:技术总监掌管,MySQL系统表mysql表权限除技术总监任何人不得拥有。
权限粒度:开发人员权限粒度到表一级,数据库管理员和系统管理员权限粒度到库一级。
访问限制:除DBA和系统管理员需要24小时保证可以操作数据库外,其他人均需要绑定IP。

密码强度:必须根据目标/来源/用户等信息设置密码,保证不用用户在不同主机从不同来源的密码不一样,每隔一段时间需要集中更换密码。
三、改表相关

总原则,以最少的开销按需记录数据,所有变更要有记录。

  •  表结构修改流程:开发人员提交建/改/删表的SQL(必须有注释)给DBA,并且说明建/改/删表原因,DBA审查,与开发人员交流修正,由DBA执行SQL操作,并记录。
          表结构改动注意:(越靠前优先级越高)
          按需建立字段,不得采用远大于需求的类型。
          尽量采用无符号型数据类型。
          尽量采用固定长度类型。
           尽量避免TEXT类型。
          尽量用数字来代替字符。
          可以用ENUM枚举数量不多的字符。
           如果必须采用TEXT类型,如无特殊情况,必须拆表单独存放TEXT列。
           存在必须用函数计算才能做条件的列,新建一存放函数计算结构,对新列进行索引,采用触发器自动更新。
           记录修改时间尽量采用时间戳,不要采用时间类型列然后手动设置。
           分离表中常用和不常用数据,分开存储。
           历史数据要及时分离,按一定规则命名表或存放到数据仓库。
          类似标记字段设计要合理,尽量避免在SQL中出现<>,尽量使用>/</=来完成条件查找。
          类型选择细则参考已发的类型选择文档。

四、索引相关

  • 总原则,以高并发SQL为核心建立索引,尽量复用索引。
    除非某个字段经常单独作为查询字段,并且不会作为其他组合索引的第一个列,才为本字段建立单独的索引。
    尽可能建组合索引,综合考量涉及的SQL,遵循尽量复用的原则建立索引。
    优先处理高并发SQL的索引,很少使用的SQL或者只在闲时使用的SQL可以不为其索引。
    小表可以不建立索引(如果参与关联需要为关联字段索引)。
    索引后结果集仍较大可以增加排序字段进索引,若执行计划不使用,则删除。
    关联字段除特殊情况都需要建索引。
  • 要及时根据SQL的使用情况调整索引。

五、架构相关

  • 总原则,尽可能在内存中完成大部分操作。
    内存足够选择InnoDB(高并发数据与内存大小相当),内存不足用MyISAM,归档用Archive,事务相关用InnoDB,临时高并发数据用Memory。
    Master-Slave架构,适合明显读大于写的情况。
    Master-Master架构,无比使两个Master产生不同的主键,例如一台产生奇数主键,一台产生偶数主键,
    单机事务用InnoDB,集群事务用LVS+NDB,切不可直接用NDB,效率极低。
    分布式事务尽量避免,如果必须,则采用XA事务,分段提交,或者直接采用NDB集群引擎。
    原则上历史数据和生产数据不要放在同一数据库,如历史数据极少使用,则建立新库将历史数据保持表名不变存入,只要USE改变数据库就可以查询历史数据,比较常用的历史数据采用表名+日期来存放相应的历史数据,通过表明和日期拼接来做历史查询。
    主库写压力较大时采取级联复制,读库压力更大时采用一对多复制,以平衡压力为目标。
  • 历史数据拆分由DBA与开发人员商议拆分时间,每次拆分时间由DBA与开发人员确认则删除或转移至数据仓库。

六、SQL相关

         总原则,最小化查询结果集,不做不必要的操作,分散压力到平时。
尽量不做全表查询,根据需要选择需要的字段需要的行。
条件尽可能详细,不要让数据库扫描不必要的行。
选择条件尽可能按照一致的顺序出现,最大化利用索引。

  • 尽量将大结果集操作拆分到多次执行,避免数据库长时间被锁。

七、工作流程

  • 通过Cacti和mysqlreport脚本查看运行状态
    通过mystat脚本监控实时状态
    通过mysqlsla脚本分析昨日慢查,可作为计划任务每天定时执行,清空旧慢查
    对每日慢查进行调优
    通过mysqlidxchx脚本对无效索引进行检查
    建表要询问哪些字段会用来查询和连接,建立索引
    改字段要问清类型和范围,设立合适的数据类型
    表结构的修改必须加注释,每个字段都要有注释,除了id
    从数据库删除数据一定要先备份再删除。
    每月末要执行历史数据清理,通过mysqldump –where来导出指定范围的数据,插入数据仓库。
  • 无用表和字段要及时清理
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 程序员 数据库
数据库建表原则
【8月更文挑战第24天】数据库设计中的关键概念和技术,包括原始单据与实体间的关系、主键与外键的作用、基本表的特点、范式标准的应用等。详细解释了一对一、一对多及多对多关系,并通过实例说明如何处理多对多关系。讨论了主键与外键的设计原则,以及如何根据第三范式优化表结构。介绍了基本表的四大特征,并强调了理解这些特征的重要性。阐述了范式标准在设计中的作用,并提出了通过增加冗余提高运行效率的方法。
43 9
|
4月前
|
SQL 运维 关系型数据库
MySQL数据库运维第一篇(日志与主从复制)
MySQL数据库运维第一篇(日志与主从复制)
|
2月前
|
存储 运维 监控
数据库服务器运维最佳实践
【8月更文挑战第22天】
53 2
数据库服务器运维最佳实践
|
2月前
|
存储 程序员 数据库
数据库建表原则
【8月更文挑战第30天】原始单据与实体间存在一对一、一对多或多对多的关系,明确这点有助于设计录入界面。实体需具备主键或外键,在E-R图中,叶子节点实体可无主键但必有外键。基本表具原子性、原始性、演绎性和稳定性,区别于中间表和临时表。范式标准方面,基本表应尽量满足第三范式,但在实际设计中,适度冗余可提升效率。此外,处理多对多关系需引入第三个实体,主键设计建议采用无物理意义的数字串。视图技术用于数据综合处理和保密,而中间表和临时表则分别用于统计数据和临时记录。数据库设计中,完整性约束涉及域、参照及用户定义完整性,遵循“三少原则”可避免打补丁式设计,提高系统性能。
20 4
|
2月前
|
存储 程序员 数据库
数据库建表原则
【8月更文挑战第29天】数据库建表原则
22 1
|
2月前
|
缓存 运维 监控
打造稳定高效的数据引擎:数据库服务器运维最佳实践全解析
打造稳定高效的数据引擎:数据库服务器运维最佳实践全解析
|
2月前
|
运维 前端开发 Serverless
中后台前端开发问题之降低数据库使用门槛和运维成本如何解决
中后台前端开发问题之降低数据库使用门槛和运维成本如何解决
25 0
|
2月前
|
运维 关系型数据库 MySQL
在Linux中,MySQL数据库日常运维中涉及哪些关键任务?
在Linux中,MySQL数据库日常运维中涉及哪些关键任务?
|
2月前
|
运维 关系型数据库 MySQL
"MySQL运维精髓:深入解析数据库及表的高效创建、管理、优化与备份恢复策略"
【8月更文挑战第9天】MySQL是最流行的开源数据库之一,其运维对数据安全与性能至关重要。本文通过最佳实践介绍数据库及表的创建、管理与优化,包括示例代码。涵盖创建/删除数据库、表结构定义/调整、索引优化和查询分析,以及数据备份与恢复等关键操作,助您高效管理MySQL,确保数据完整性和系统稳定运行。
171 0
|
3月前
|
测试技术 数据库 容器
开发与运维测试问题之操作数据库进行DAO层测试如何解决
开发与运维测试问题之操作数据库进行DAO层测试如何解决