版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、技术 l 类别1 数据库管理规范数据库管理规范 版本号:版本号:V1.0V1.0 信息科信息科 20172017 年年 4 4 月月 技术 l 类别2 数据库管理规范数据库管理规范 1 规范说明规范说明 .2 2 维护管理安全规范维护管理安全规范 .2 3 设计规范设计规范 .3 4. SQL 编写规范编写规范 .6 5. 数据库备份与恢复策略规范数据库备份与恢复策略规范 .7 6 开发测试与上线安全规范开发测试与上线安全规范 .9 7 监控监控 .10 8 连接池使用规范连接池使用规范 .10 9 数据库重要级别划分数据库重要级别划分 .10 10 数据库安装规范数据库安装规范 .11 11
2、 业务上线数据库部分规范业务上线数据库部分规范 .12 技术 l 类别3 1 规范说明规范说明 本规范是针对数据库使用,维护管理,设计开发等。 2 维护管理安全规范维护管理安全规范 2.1 数据库版本使用规范数据库版本使用规范【强制】 MYSQL 使用 5.6.39 社区版本 2.3 数据库账户安全与管理规范数据库账户安全与管理规范 2.3.1 密码安全密码安全【强制】 密码不少于 8 位,应包含数字,字母,字符 密码不应该和用户名一致 删除数据库默认空用户账户 必须修改 root 密码 2.4 账户安全账户安全管理管理【强制】 为应用程序设立独立访问账户 禁止开发工程师通过应用帐号登录生产数
3、据库 禁止 QA 申请线上账号与使用账号登陆线上环境进行测试 数据库只有 root 用户具有最高管理权限 备份数据库用户要单独建立,并专属备份恢复操作 数据库安装后删除或锁闭不需要使用的数据库账号 数据库管理员账户可以锁定和解锁其他用户 数据库管理账户在空闲 5 分钟以上会自动退出 数据库管理权限账号不能超过 2 个 技术 l 类别4 2.5 数据库日志管理规范数据库日志管理规范【强制】 windows、linux 下的日志管理 Windows 系统应开启日志功能,记录系统和系统中各个进程的相关信息 linux 的操作系统要开启系统日志 Mysql 数据库如果使用了 innodb 引擎必须打开
4、二进制日志 Mysql 必须打开慢日志,并且将慢日志阀值设置为 1-2 秒之间 对 Mysql 的错误日志等要进行定期查看,定期清理和定期备份管理 2.6 数据库架构规范数据库架构规范【强制】 2.6.1 mysql 数据库高可用数据库高可用 MYSQL 采用复制+第三方心跳软件或者第三方集群架构(经测试后)实现近 7X24 小时高 可用性要求,数据库架构必须能够实现故障自动迁移,满足业务 7X24 小时持续服务要 求 3 设计规范设计规范 3.13.1 命名规范命名规范【强制】 3.1.13.1.1表的命名表的命名 表的名称在 T_后增加一个或者多个后缀,表名、字段名必须使用小写字母或数字;
5、禁 止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为 无法进行预发布,所以字段名称需要慎重考虑。 3.1.23.1.2 视图命名视图命名:V_相关表名(或者根据需要另取名字) 3.1.33.1.3 存储过程命名存储过程命名:PRO_存储过程名(用英文表达存储过程意义) 3.1.43.1.4 函数命名函数命名:FUN_函数名称(用英文表达函数作用) 3.1.53.1.5 触发器命名触发器命名:TRI_触发器名称(用英文表达触发器作用) 3.1.63.1.6 索引命名索引命名:I_表名_字段名(如果存在多字段索引,取每字段前三个字符加下划 技术 l 类别5 线组合,如
6、:在 hyid,hyname,hymobile 上建立联合索引,命名:I_表名_hyi_hyn_hym,如 果前三个截取字符相同,就从字段名称中不同的字符开始取三个字符加下划线组合,如: 在 zhyid,zhyname,zhymobile 上建立联合索引,命名:I_表_id_nam_mob) 3.1.73.1.7 唯一索引命名唯一索引命名:UI_表名_字段名(如果存在多字段唯一索引,取每字段前三个字 符加下划线组合,如:在 hyid,hyname,hymobile 上建立唯一索引,命名:UI_表名 _hyi_hyn_hym,如果前三个截取字符相同,就从字段名称中不同的字符开始取三个字符加下 划
7、线组合,如:在 zhyid,zhyname,zhymobile 上建立唯一索引,命名:UI_表 _id_nam_mob) 3.1.83.1.8 主键命名主键命名:PK_表名_字段名(如果存在多字段主键,取每字段前三个字符加下划 线组合,如:在 hyid,hyname,hymobile 上建立主键,命名:PK_表名_hyi_hyn_hym,如果 前三个截取字符相同,就从字段名称中不同的字符开始取三个字符加下划线组合,如:在 zhyid,zhyname,zhymobile 上建立主键,命名:PK_表_id_nam_mob) 3.1.93.1.9 外键命名外键命名:FK_表名_主表名_字段名 3.1
8、.103.1.10 SequenceSequence 命名命名:SEQ_表名_列名(或者根据需要另取名字) 3.23.2 设计原则设计原则 3.2.13.2.1 表的设计表的设计 【强制】每个表,都必须要有主键。主键是每行数据的唯一标识,保证主键不可随意 更新修改,在不知道是否需要主键的时候,请加上主键,它会为你的程序以及将来查 找数据中的错误等等,提供一定的帮助; 【强制】所有的 MySQL 数据库除历史原因外,都必须采用 UTF8 编码 【建议】一个表的某列与另一表有关联关系的时候, 请在应用程序维护外键关系,如 果在数据库建立外键约束请遵循以下几点: 尽量少使用外键,在高并发下数据库会增
9、加较大开销; 不要以数据操作不方便为理由而不建外键。加上外键以后,一些数据操作变得有些麻 烦,但是这正是对数据一致性的保护 以缺省的方式建立外键(即用 delete restrict 方式) ,以达到保护数据一致性的目的; 【强制】外键一定要建立索引。 技术 l 类别6 【建议】单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表 3.2.23.2.2 列的设计列的设计 【强制】字段命名必须用英文来定义,如果太长可用缩写; 【强制】相应类型数据存入相应类型字段(如:数字=NUMBER,日期 =DATE,定长字符=CHAR,变长字符=VARCHAR2 等)否则会自动进行不 必要
10、的类型转换,降低性能,破坏数据完整性 【强制】表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据 类型是 unsigned tinyint( 1 表示是,0 表示否) 【强制】小数类型为 decimal,禁止使用 float 和 double 【建议】varchar 是可变长字符串,不预先分配存储空间,长度不要超 过 5000,如果存储长度大于此值,定义字段类型为 text,独立出来一 张表,用主键来对应,避免影响其它字段索引效率 【建议】字段的宽度要在一定时间内足够用,但也不要过宽,占用过多 的存储空间; 【建议】除非必要,否则尽量不加冗余列。所谓冗余列,是指能通过其 他列计算出
11、来的列,或者是与某列表达同一含义的列,或者是从其他表 复制过来的列等等。冗余列需要应用程序来维护一致性,相关列的值改 变的时候,冗余列也需要随之修改,而这一规则未必所有人都知道,就 有可能因此发生不一致的情况。如果是应用的特殊需要,或者是为了优 化某些逻辑很复杂的查询等操作,可以加冗余列; 3.2.33.2.3 索引的设计索引的设计 【强制】业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索 引 【强制】超过三个表禁止 join。需要 join 的字段,数据类型保持绝对一致; 技术 l 类别7 多表关联 【强制】查询时,保证被关联的字段需要有索引 【强制】在 varchar 字段上建立
12、索引时,必须指定索引长度,没必要对全字 段建立索引, 【强制】页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决 【强制】如果有 order by 的场景,请注意利用索引的有序性。order by 最 后的字段是组合索引的一部分,并且放在索引组合顺序的最后,避免出现 file_sort 的情况,影响查询性能。 正例:where a=? and b=? order by c; 索引:a_b_c 【强制】建组合索引的时候,区分度最高的在最左边 【建议】性能测试阶段收集 90%SQL 后,统一设计建立索引 【建议】根据实际文本区分度决定索引长度。 说明:索引的长度与区分度是一对矛盾体,一般对字
13、符串类型数据,长度 为 20 的索引,区分度会高达 90%以上,可以使用 count(distinct left(列名, 索引长度)/count(*)的区分度来确定。 4. SQL 编写规范编写规范 【强制】禁止开发人员在 SQL 中添加 Hint,Hint 只能由 DBA 审核后添加。 【强制】禁止使用悲观锁定,即读锁 select for update。 【强制】禁止在开发代码中使用 DDL 语句,比如 truncate,alter table 等。 【强制】禁止使用与系统环境相关的 mysql inside 函数,列如 UUID(),USER(), sysdate()这些函数,这样可能会
14、导致主从同步不一致。 【强制】禁止在充当读角色的 mysqld 上执行写操作(写操作指 update,delete,insert),因 技术 l 类别8 为可能导致同步中断或者数据不一致。 【强制】不要使用 count(列名)或 count(常量)来替代 count(),count()就是 SQL92 定 义的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。 【强制】说明:count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行 【强制】使用 ISNULL()来判断是否为 NULL 值。注意:NULL 与任何值的直接比较都为 NU
15、LL 【强制】禁止使用存储过程,存储过程难以调试和扩展,更没有移植性 【强制】在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确 写明 【强制】表连接操作中,作为连接条件的字段的数据类型严格一致。 【强制】如果表连接字段数据类型不一致,在 SQL 中用显示用类型转换,具体情况咨 询 DBA。 示例 正确用法 1:select col1, col2 from tbl1, tbl2 where tbl1.col3 = tbl2.col4; 其中“tbl1.col3”与“tbl2.col4”数据类型严格一致。 【建议】必须正确开启事务并且显式关闭事务 【建议】使用域名连接数据库。
16、 禁止线上应用使用 IP 地址连接数据库。 【建议】in 操作能避免则避免,若实在避免不了,需要仔细评估 in 后边的集合元素数 量,控制在 1000 个之内。 【建议】禁止 DML 语句的 where 条件中包含恒真条件(如:1=1) 技术 l 类别9 5. 数据库备份与恢复策略规范数据库备份与恢复策略规范 5.1 备份策略备份策略 数据库备份需要在本地,从库,存储至少三个地方保留,确保备份不丢失 数据库备份周期根据业务需求,默认采取每日备份,保留 7 天,每周周一备份,保留 30 天,每月一号备份,保留 100 天三个维度进行 数据库备份方式采取 mysqldump 方式进行每日备份或根据
17、需要进行 INNODB 增量备份 数据库备份采取每天业务负载低峰时段的凌晨 3-5 点进行备份 数据库备份用户使用专有备份用户,权限仅仅为可以进行备份和恢复 数据库备份必须保留两个以上存储点,避免因误操作或磁盘损坏丢失备份文件 数据备份设置保留周期,周期以外的数据库备份文件视其需要进行刻盘归档处理 数据库备份采取每月定期验证备份文件有效性的验证测试 备份脚本如下: #!/bin/bash #This is a ShellScript For Auto DB Backup DBName=xgw-global-10- BackupPath=/data/mysqlbak/daybak LogFile
18、=/data/mysqlbak/daybak/db.log cd /data/mysqlbak/daybak NewFile=$DBName$(date +%Y%m%d-%H-%M).tar.gz DumpFile=$DBName$(date +%Y%m%d-%H-%M).sql #OldFile=$DBName$(date +%Y%m%d-%H-%M -date=7 days ago).tar.gz # if ! -d $BackupPath ; then mkdir $BackupPath fi echo - $LogFile echo $(date +%y-%m-%d %H:%M:%S)
19、 $LogFile echo - $LogFile #Delete Old File if -f $OldFile ; then rm -f $OldFile $LogFile 2 then echo $NewFile The Backup File is exists,Cant Backup! else /usr/local/mysql/bin/mysqldump -single-transaction -A -master-data=2 -opt -all- databases $DumpFile tar czvf $NewFile $DumpFile $LogFile 2 find /d
20、ata/mysqlbak/daybak/* -mtime +7 -exec rm -rf ; 5.2 恢复恢复策略策略 数据库恢复采取专有数据库恢复账号进行 数据库恢复要先制定失败回退计划并保证其可行 数据库如果是对已有业务数据库换进行时,必须先对现有数据库环境进行备份 数据库恢复必须进行测试验证 数据库恢复后要进行全面的数据和业务验证 数据库恢复成功后,必须立即及逆行那个一次全面的数据库备份 6 开发测试与上线安全规范开发测试与上线安全规范 开发测试期间,数据库由 DBA 维护,所有开发账号由 DBA 统一建立,开发人员拥有数 据库的增删改查以及库结构表结构变更权限 测试完毕正式上线前,由
21、DBA 统一进行数据库结构及数据上线部署,所有数据库权限 统一收回并按照实际需求进行授权部署 技术 l 类别11 生产数据库中应用程序账号只赋予最小增删改查权限,不赋予变更数据库设置库结构 以及表结构权限,只有 DBA 具有最高权限 生产数据库任何库结构表结构索引结构以及数据库对象建立删除修改都需要经过 DBA 操作 7 监控监控 【强制】所有生产库必须加入监控系统,不加入监控系统不得上线生产 【强制】MYSQL 监控项有 CPU,内存,I/O,MYSQL 进程,MYSQL 复制状态,MYSQL 复 制延迟,MYSQL 端口,MYSQL 锁等待 【强制】MONGODB 监控项有 CPU,内存,
22、I/O,MONGODB 进程,MYSQL 复制集状态, MONGODB 端口 8 连接池使用规范连接池使用规范 建议在性能测试阶段进行连接池最优设置 连接池必须开启 autoconnect 设置 最小连接数设置为 50-100 最大连接数设置为 500-1000 连接池 idletime 设置为 10000-20000 9 数据库重要级别划分数据库重要级别划分 目前根据数据库存储数据的安全重要程度暂时将数据库从高到低划分为三个级别(A 级, B 级,C 级) A 级数据库B 级数据库C 级数据库 备份恢复增量备份,数据库 恢复要求达到任意 指定时间点恢复, 备份至少保留本地 和异地两份 增量备
23、份或全库逻 辑备份,备份至少 保留本地和异地两 份 全库逻辑备份,备 份至少保留本地和 异地两份 高可用7X24 小时高可用7X24 小时高可用非 7X24 小时高可用, 技术 l 类别12 允许服务一小时以 内中断 审计重要数据增删改查 需要审计 不需要不需要 数据存储每表空间独立数据 文件,数据与索引 独立存储 每表空间独立数据 文件,数据与索引 独立存储 不要求 备份恢复测试间隔每月每季度半年 各级别数据类型指 导 财务交易类数据运营类数据日志记录类数据 10 数据库安装规范数据库安装规范 数据库安装一律采用解压安装方式,具体步骤如下: mkdir -p /data/mysql/data mkdir -p /data/mysql/logs groupadd mysql
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度木饰面原材料进口与分销合同3篇
- 2025年亲子遗赠协议草案
- 2025年代理商代理加盟采购合资合作协议
- 2025年合资合作收益分配协议
- 2025年企业外包劳务协议
- 2025年智慧城市物业管理服务标准合同范本6篇
- 漫谈加强物资管理提高企业经济效益-图文
- 《皮质醇增多征荆》课件
- 2025年度医院病理科诊断服务承包合同4篇
- 2025年度汽车转让及二手车交易税费减免合同
- 废旧物资买卖合同极简版
- 2024年正定县国资产控股运营集团限公司面向社会公开招聘工作人员高频考题难、易错点模拟试题(共500题)附带答案详解
- 智能衣服方案
- 李克勤红日标准粤语注音歌词
- 教科版六年级下册科学第一单元《小小工程师》教材分析及全部教案(定稿;共7课时)
- 中药材产地加工技术规程 第1部分:黄草乌
- 危险化学品经营单位安全生产考试题库
- 案例分析:美国纽约高楼防火设计课件
- 老客户维护方案
- 移动商务内容运营(吴洪贵)任务一 用户定位与选题
- 工作证明模板下载免费
评论
0/150
提交评论