数据库管理规范

合集下载

数据库管理规范

数据库管理规范

数据库管理规范一、概述数据库管理规范是为了保证数据库系统的高效、安全、可靠运行而制定的一系列规范和标准。

本文将从数据库设计、权限管理、备份与恢复、性能优化等方面详细介绍数据库管理规范的要求和操作流程。

二、数据库设计规范1. 数据库命名规范- 数据库名应简洁明了,能够准确描述其所存储的数据内容。

- 数据库名使用小写字母,可以使用下划线作为分隔符。

- 避免使用数据库系统保留的关键字作为数据库名。

2. 表设计规范- 表名应具有描述性,能够清晰表达其所存储数据的含义。

- 表名使用小写字母,可以使用下划线作为分隔符。

- 表名避免使用数据库系统保留的关键字作为表名。

- 表中的字段名应具有描述性,能够清晰表达字段所存储数据的含义。

- 字段名使用小写字母,可以使用下划线作为分隔符。

- 字段名避免使用数据库系统保留的关键字作为字段名。

3. 数据类型选择- 根据数据的实际需求,选择合适的数据类型,避免浪费存储空间和性能。

- 避免使用过长的数据类型,例如使用INT代替BIGINT等。

4. 索引规范- 根据查询需求和数据量,合理选择索引类型和字段。

- 避免过多的索引,以免影响插入和更新操作的性能。

- 定期检查和优化索引,确保其有效性和性能。

三、权限管理规范1. 用户权限管理- 为每个用户分配最小权限原则,避免用户拥有不必要的权限。

- 定期审查和更新用户权限,确保权限的合理性和安全性。

- 禁止使用默认或弱密码,要求用户使用强密码并定期更换。

2. 角色权限管理- 根据用户的职责和权限需求,设定不同的角色。

- 角色应具有清晰的权限范围和权限等级,避免权限冲突和滥用。

- 定期审查和更新角色权限,确保权限的合理性和安全性。

3. 数据库审计- 启用数据库审计功能,记录用户的操作和访问日志。

- 定期审查和分析审计日志,发现异常操作和安全风险。

四、备份与恢复规范1. 定期备份- 根据业务需求和数据变更频率,制定合理的备份策略。

- 定期对数据库进行全量备份和增量备份,确保数据的完整性和可恢复性。

数据库管理规范

数据库管理规范

数据库管理规范一、概述数据库管理规范是为了确保数据库的安全、高效和可靠运行而制定的一系列规定和标准。

本文将详细介绍数据库管理规范的内容,包括数据库的命名规范、备份和恢复策略、权限管理、性能优化等。

二、数据库命名规范1. 数据库的命名应具有可读性和易于理解性,采用故意义的名称,避免使用简单的缩写或者无意义的字符组合。

2. 数据库的命名应该使用小写字母,单词之间可以使用下划线或者驼峰命名法进行分隔。

3. 数据库的命名应该避免使用特殊字符和空格。

三、备份和恢复策略1. 定期备份数据库是保证数据安全的重要措施。

建议每天进行全量备份,并根据需求进行增量备份。

2. 备份文件应存储在不同的物理设备上,以防止硬件故障导致数据丢失。

3. 定期测试数据库的备份和恢复过程,确保备份文件的完整性和可用性。

4. 对于重要的数据库,可以考虑使用灾备方案,将备份数据存储在远程地点,以防止灾难性故障。

四、权限管理1. 严格控制数据库的访问权限,只授权给需要访问数据库的用户。

2. 为每一个用户分配最小权限原则,避免过高的权限赋予造成安全风险。

3. 定期审查和更新用户权限,及时删除再也不需要访问数据库的用户账号。

4. 对于敏感数据,可以采用加密措施,确保数据的机密性。

五、性能优化1. 定期监控数据库的性能,包括查询响应时间、数据库连接数、磁盘空间使用等指标。

2. 根据监控结果进行性能优化,如索引优化、查询优化等。

3. 避免频繁的长事务和大事务,以减少数据库锁定和资源竞争。

4. 定期清理无用的数据和日志,以减少数据库的存储空间占用。

六、安全措施1. 定期更新数据库软件和补丁,确保数据库的安全性。

2. 启用防火墙和访问控制列表,限制数据库的访问来源。

3. 对数据库进行加密,保护数据的机密性。

4. 定期进行安全审计,发现并修复数据库的安全漏洞。

七、容灾和恢复1. 建立容灾计划,包括备份和恢复策略、灾难恢复测试等。

2. 定期进行灾难恢复演练,确保在灾难事件发生时能够快速恢复数据库。

数据库管理规范

数据库管理规范

数据库管理规范引言概述:数据库管理规范是指在数据库设计、创建、维护和使用过程中应遵循的一系列规则和标准。

遵循数据库管理规范能够提高数据库的性能、安全性和可靠性,确保数据库的有效管理和使用。

本文将从数据库设计、备份与恢复、安全性、性能优化和维护五个方面详细阐述数据库管理规范的内容。

一、数据库设计1.1 数据库结构设计- 确定数据库的实体和关系,进行概念模型设计。

- 设计合理的表结构,避免冗余和重复数据。

- 设计适当的主键和外键,确保数据完整性和一致性。

1.2 数据库字段设计- 根据实际需求选择合适的数据类型和长度,避免浪费存储空间。

- 设置字段约束,限制数据的取值范围和格式。

- 为字段添加注释,提高代码的可读性和维护性。

1.3 数据库索引设计- 根据查询需求设计合理的索引,提高查询性能。

- 避免过多的索引,减少数据库的存储空间和维护成本。

- 定期对索引进行优化和重建,保持索引的有效性和性能。

二、备份与恢复2.1 定期备份数据库- 制定合理的备份策略,包括全量备份和增量备份。

- 选择合适的备份工具和存储介质,确保备份的可靠性和安全性。

- 定期测试备份的完整性和可恢复性,保证备份的有效性。

2.2 灾难恢复计划- 制定灾难恢复计划,包括备份数据的恢复流程和步骤。

- 定期演练灾难恢复计划,确保在紧急情况下能够快速恢复数据。

- 存储备份数据的地点要与数据库服务器分离,防止同时遭受灾难。

2.3 监控与报警- 监控数据库备份的执行情况,及时发现备份失败或者异常情况。

- 设置合理的报警机制,及时通知管理员备份异常情况。

- 定期检查备份日志,确保备份的完整性和可靠性。

三、安全性3.1 用户权限管理- 为每一个用户分配合适的权限,避免数据泄露和非法操作。

- 定期审查和更新用户权限,确保权限的合理性和安全性。

- 禁止共享账号和密码,每一个用户使用独立的账号进行操作。

3.2 数据加密- 对重要的敏感数据进行加密存储,保护数据的机密性。

数据库管理规范

数据库管理规范

数据库管理规范引言概述:数据库管理规范是指在进行数据库设计、建立和维护过程中,遵循一定的标准和规范,以保证数据库的高效性、可靠性和安全性。

本文将从六个大点阐述数据库管理规范的重要性和具体内容。

正文内容:1. 数据库设计规范1.1 数据库结构设计- 合理划分表和字段,避免冗余和过度设计。

- 设计适当的主键和外键,确保数据的完整性和一致性。

- 使用规范的命名规则,方便维护和理解。

1.2 数据类型和长度选择- 根据实际需要选择合适的数据类型和长度,减少存储空间的浪费。

- 避免使用过长或过短的数据类型,提高查询效率。

1.3 索引设计- 根据查询需求合理创建索引,加快查询速度。

- 避免创建过多的索引,降低写操作的性能。

2. 数据库建立规范2.1 安全设置- 给数据库和表设置合适的权限,限制用户的访问和操作范围。

- 设置合适的密码策略,防止未授权访问。

2.2 数据备份和恢复- 定期进行数据备份,确保数据的安全性和可靠性。

- 测试备份的恢复过程,以防止意外情况下的数据丢失。

2.3 数据库性能调优- 监控数据库的性能指标,及时发现和解决性能问题。

- 优化查询语句和索引,提高数据库的响应速度。

3. 数据库维护规范3.1 定期清理无用数据- 删除过期数据和无效数据,减少数据库的存储空间。

- 清理日志文件和临时文件,提高数据库的性能。

3.2 定期更新和升级- 及时安装数据库的补丁和更新,修复已知的安全漏洞。

- 考虑升级数据库版本,以获得更好的性能和功能。

3.3 监控和预警- 设置合适的监控工具,实时监控数据库的运行状况。

- 配置预警机制,及时发现并解决潜在的问题。

总结:数据库管理规范是确保数据库高效、可靠和安全运行的重要保证。

通过合理的数据库设计、建立和维护,可以提高数据库的性能和可靠性,减少数据丢失和安全风险。

同时,定期的备份和维护工作可以保证数据库的持续可用性。

因此,遵循数据库管理规范是数据库管理人员必须要重视和遵守的。

数据库安全管理规范

数据库安全管理规范

数据库安全管理规范数据库是现代信息系统的重要组成部分,它存储并管理着各种重要的数据信息。

为了保护这些数据的机密性、完整性和可用性,数据库安全管理显得至关重要。

本文将介绍一些数据库安全管理规范,以确保数据在存储和使用过程中的安全性。

一、访问控制1. 用户权限管理为了限制数据库的访问权,应该对用户进行统一管理并分配相应的权限。

管理员应该根据用户的职责和需要,为其赋予最小化权限,减少潜在的风险。

同时,每个用户的权限应在必要时进行审查和更新。

2. 角色管理通过角色的方式进行权限管理是一种高效的方法。

管理员可以根据用户的职责、部门等设置相应的角色,并将权限分配到角色上,而不是直接分配给个人用户。

这样可以简化权限管理,降低出错率。

3. 口令策略对于数据库的登录口令,应要求用户使用复杂且不易被猜测的密码。

口令应定期更换,并且不允许使用过于简单的口令。

此外,还可以采用多因素身份验证方式,提高账户的安全性。

二、数据加密1. 数据传输加密在数据传输过程中,特别是通过网络进行传输时,应采用加密协议,如SSL/TLS协议等。

这样可以保证数据传输的机密性,防止数据被恶意窃取或篡改。

2. 数据存储加密对于数据库中重要的敏感数据,可以采用加密算法进行存储加密。

加密后的数据即使在被非法获取的情况下,也无法直接读取其内容。

同时,对于数据库备份等操作,也需要采用相应的加密方式保护数据的安全。

三、漏洞管理1. 定期更新与补丁管理数据库厂商会不定期发布各种漏洞修复补丁,管理员应及时关注并进行修复。

同时,还要定期对数据库进行版本升级,以利用最新的安全技术和措施。

2. 审计日志管理数据库应开启审计日志功能,对用户的操作进行记录和审计。

通过审计日志,可以及时发现并追踪异常操作,保障数据库的安全。

3. 异常检测与防护管理员需要配置合适的安全策略和防火墙等设备,对数据库进行异常检测与防护。

当发现异常操作或攻击事件时,应及时发出警报并采取相应的措施。

数据库安全管理规范

数据库安全管理规范

数据库安全管理规范数据安全至关重要,现在的人们越来越依赖数据库管理系统(DBMS)来存储其业务数据。

保护数据的安全性,不仅是个人或机构的责任,也是确保公众信任和遵守法律法规的必要条件。

为此,数据库管理系统需要遵循一定的规范,以确保数据的安全性,本文将探讨数据库安全管理规范。

一、访问权限管理数据库的访问权限管理应严谨,仅授予有必要权限的用户,限制访问来自未经授权的用户。

访问权限管理的基本要求包括:1.为每个用户设置唯一的用户名和密码。

各用户的用户名和密码不得重复或共享。

2.限制未通过身份验证的用户的访问。

身份验证应该包括至少一种安全措施,例如口令、指纹识别或虹膜扫描等。

3. 允许设置访问权限级别。

需要管控访问的数据和功能,确定哪些用户拥有访问数据的权力和数据的操作权限。

4.根据角色授权访问。

用户以某种组织形式组成,应设置不同用户角色,如普通用户、管理员等,以便按用户角色区分使用权限。

5.监控和日志记录用户访问。

对用户的访问进行监控及日志记录,能够帮助快速追溯数据泄露的责任人。

二、密码策略规范采用正确的密码策略可有效提高数据库安全性。

密码策略规范的关键点包括:1. 密码复杂度。

密码必须包括大小写字母、数字、以及其它特殊字符,以避免轻易猜到。

2. 密码变更周期。

密码定期更改,建议周期为90天。

3. 密码历史记录。

记录曾用过的密码以防止用户重复使用历史密码。

4. 账户锁定。

设置用户账户登录失败次数的尝试次数上限,并且达到最大次数之后账户会被锁定。

此外,可以设定一个自动解锁时间,以及若锁定则必须管理员进行解锁。

三、数据备份和恢复数据备份和恢复的规范开发和执行计划是管理员保护敏感数据的必要控制措施。

如下图所示,对于数据库的备份和恢复,需遵循以下几点:1. 详细记录数据备份和恢复的时间和位置。

注意备份和恢复的过程都需要被记录,以便审计控制。

2.有多节点同步备份。

在多节点的情况下,建议选择两个或以上的节点进行同步备份以便高可用性和容错性。

数据库安全权限管理规范

数据库安全权限管理规范

数据库安全权限管理规范一、引言数据库作为企业重要的信息资产之一,安全权限管理是保障其安全性和完整性的关键环节。

本文将详细介绍数据库安全权限管理规范,以确保数据库的合规性和可靠性。

二、背景随着企业信息化程度的提高,数据库存储了大量敏感信息,包括客户数据、财务数据等。

如果未进行合理的权限管理,数据库面临潜在的风险和威胁,如数据泄露、篡改等。

因此,数据库安全权限管理变得尤为重要。

三、1. 系统管理员权限管理a) 系统管理员应有唯一的账号,并配置强密码和定期更换密码。

b) 禁止将系统管理员账号授权给其他人员,并及时清除无效账号。

c) 限制系统管理员的物理访问权限,只有必要时才能进入服务器房间。

d) 定期审计系统管理员的操作记录,以发现潜在的安全风险。

2. 数据库管理员权限管理a) 数据库管理员账号应使用强密码,并定期更换密码。

b) 禁止将数据库管理员账号授权给非管理员人员。

c) 限制数据库管理员的操作权限,只授予其需要的最小权限。

d) 定期审计数据库管理员的操作记录,及时发现操作异常情况。

3. 用户权限管理a) 按照用户职责和需求,进行权限分级,并及时调整权限。

b) 禁止使用通用账号,用户应拥有唯一账号,并使用强密码。

c) 限制用户的物理访问权限,仅授权必要的人员可以进入服务器房间。

d) 禁止用户通过网络连接数据库,只能通过内部网络访问。

4. 数据备份和恢复a) 定期进行数据库备份,并将备份数据存储在安全的地方。

b) 验证备份数据的完整性和可用性,并定期进行恢复测试。

c) 制定灾难恢复计划,确保在系统宕机或数据丢失时能够迅速恢复。

5. 审计和监控a) 配置数据库审计功能,记录用户访问和操作的详细信息。

b) 监控数据库性能和异常事件,并及时采取相应措施。

c) 定期进行安全审计,评估数据库的整体安全性和合规性。

6. 安全策略和培训a) 制定数据库安全策略,规范人员行为和操作流程。

b) 提供定期的培训和教育,加强员工的安全意识和知识。

数据库管理规范

数据库管理规范

数据库管理规范一、引言数据库管理规范旨在确保数据库的安全性、稳定性和高效性。

本文档将详细介绍数据库管理的各个方面,包括数据库的命名规范、备份与恢复、权限管理、性能优化等内容。

二、数据库命名规范1. 数据库名称应具有描述性,能够清晰地反映其所存储的数据内容。

2. 数据库名称应使用小写字母,单词之间使用下划线分隔。

3. 数据库名称不应超过30个字符。

三、备份与恢复1. 定期备份数据库,确保数据的安全性。

2. 备份数据应存储在不同的位置,以防止单点故障。

3. 定期测试数据库备份的可用性,确保备份数据的完整性和可恢复性。

4. 定期进行数据库恢复测试,以验证数据库恢复的可行性。

四、权限管理1. 为每一个用户分配适当的权限,确保数据的安全性和隐私性。

2. 根据用户的职责和需求,限制其对数据库的访问权限。

3. 定期审计用户权限,及时发现并修复权限问题。

五、性能优化1. 定期监控数据库的性能,包括CPU利用率、内存使用率、磁盘IO等指标。

2. 根据监控结果,进行性能优化,如优化查询语句、索引优化等。

3. 定期清理无用的数据和索引,以提高数据库的性能。

六、安全性管理1. 使用强密码保护数据库账户,定期更新密码。

2. 定期更新数据库软件和补丁,确保数据库的安全性。

3. 限制数据库的物理访问权限,确保数据库服务器的安全性。

七、容灾与高可用1. 配置数据库的冗余备份,确保在主数据库故障时能够快速切换到备份数据库。

2. 配置数据库的集群,提供高可用性和负载均衡能力。

3. 定期进行容灾演练,验证容灾方案的可行性。

八、日志管理1. 启用数据库的日志功能,记录数据库的操作和变更。

2. 定期备份和归档数据库日志,以便于故障恢复和审计。

九、数据安全性1. 使用加密技术保护敏感数据,如用户密码、信用卡信息等。

2. 定期进行数据备份和恢复测试,确保数据的完整性和可用性。

十、版本控制1. 使用版本控制工具管理数据库的结构和脚本。

2. 定期备份数据库的结构和脚本,以便于版本回滚和代码管理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据库管理规范版本号:V1.0信息科2017年4月数据库管理规范1 规范说明 (3)2 维护管理安全规范 (3)3设计规范 (4)4. SQL编写规范 (7)5. 数据库备份与恢复策略规范 (8)6开发测试与上线安全规范 (10)7 监控 (10)8连接池使用规范 (11)9 数据库重要级别划分 (11)10 数据库安装规范 (12)11 业务上线数据库部分规范 (13)1 规范说明本规范是针对数据库使用,维护管理,设计开发等。

2 维护管理安全规范2.1数据库版本使用规范【强制】MYSQL使用5.6.39社区版本2.3数据库账户安全与管理规范2.3.1 密码安全【强制】●密码不少于8位,应包含数字,字母,字符●密码不应该和用户名一致●删除数据库默认空用户账户●必须修改root密码2.4账户安全管理【强制】●为应用程序设立独立访问账户●禁止开发工程师通过应用帐号登录生产数据库●禁止QA申请线上账号与使用账号登陆线上环境进行测试●数据库只有root用户具有最高管理权限●备份数据库用户要单独建立,并专属备份恢复操作●数据库安装后删除或锁闭不需要使用的数据库账号●数据库管理员账户可以锁定和解锁其他用户●数据库管理账户在空闲5分钟以上会自动退出●数据库管理权限账号不能超过2个2.5数据库日志管理规范【强制】windows、linux 下的日志管理●Windows系统应开启日志功能,记录系统和系统中各个进程的相关信息●linux的操作系统要开启系统日志●Mysql数据库如果使用了innodb引擎必须打开二进制日志●Mysql必须打开慢日志,并且将慢日志阀值设置为1-2秒之间●对Mysql的错误日志等要进行定期查看,定期清理和定期备份管理2.6数据库架构规范【强制】2.6.1 mysql数据库高可用●MYSQL 采用复制+第三方心跳软件或者第三方集群架构(经测试后)实现近7X24小时高可用性要求,数据库架构必须能够实现故障自动迁移,满足业务7X24小时持续服务要求3设计规范3.1命名规范【强制】3.1.1表的命名表的名称在T_后增加一个或者多个后缀,表名、字段名必须使用小写字母或数字;禁止出现数字开头,禁止两个下划线中间只出现数字。

数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。

3.1.2视图命名:V_相关表名(或者根据需要另取名字)3.1.3存储过程命名:PRO_存储过程名(用英文表达存储过程意义)3.1.4函数命名:FUN_函数名称(用英文表达函数作用)3.1.5触发器命名:TRI_触发器名称(用英文表达触发器作用)3.1.6索引命名:I_表名_字段名(如果存在多字段索引,取每字段前三个字符加下划线组合,如:在 hyid,hyname,hymobile上建立联合索引,命名:I_表名_hyi_hyn_hym,如果前三个截取字符相同,就从字段名称中不同的字符开始取三个字符加下划线组合,如:在 zhyid,zhyname,zhymobile上建立联合索引,命名:I_表_id_nam_mob)3.1.7唯一索引命名:UI_表名_字段名(如果存在多字段唯一索引,取每字段前三个字符加下划线组合,如:在 hyid,hyname,hymobile上建立唯一索引,命名:UI_表名_hyi_hyn_hym,如果前三个截取字符相同,就从字段名称中不同的字符开始取三个字符加下划线组合,如:在zhyid,zhyname,zhymobile上建立唯一索引,命名:UI_表_id_nam_mob)3.1.8主键命名:PK_表名_字段名(如果存在多字段主键,取每字段前三个字符加下划线组合,如:在 hyid,hyname,hymobile上建立主键,命名:PK_表名_hyi_hyn_hym,如果前三个截取字符相同,就从字段名称中不同的字符开始取三个字符加下划线组合,如:在zhyid,zhyname,zhymobile上建立主键,命名:PK_表_id_nam_mob)3.1.9外键命名:FK_表名_主表名_字段名3.1.10Sequence命名:SEQ_表名_列名(或者根据需要另取名字)3.2设计原则3.2.1表的设计●【强制】每个表,都必须要有主键。

主键是每行数据的唯一标识,保证主键不可随意更新修改,在不知道是否需要主键的时候,请加上主键,它会为你的程序以及将来查找数据中的错误等等,提供一定的帮助;●【强制】所有的MySQL数据库除历史原因外,都必须采用UTF8编码●【建议】一个表的某列与另一表有关联关系的时候,请在应用程序维护外键关系,如果在数据库建立外键约束请遵循以下几点:尽量少使用外键,在高并发下数据库会增加较大开销;不要以数据操作不方便为理由而不建外键。

加上外键以后,一些数据操作变得有些麻烦,但是这正是对数据一致性的保护以缺省的方式建立外键(即用delete restrict方式),以达到保护数据一致性的目的;●【强制】外键一定要建立索引。

●【建议】单表行数超过 500万行或者单表容量超过 2GB,才推荐进行分库分表3.2.2列的设计●【强制】字段命名必须用英文来定义,如果太长可用缩写;●【强制】相应类型数据存入相应类型字段(如:数字=>NUMBER,日期=>DATE,定长字符=>CHAR,变长字符=>VARCHAR2等)否则会自动进行不必要的类型转换,降低性能,破坏数据完整性●【强制】表达是与否概念的字段,必须使用 is_xxx的方式命名,数据类型是 unsigned tinyint( 1表示是,0表示否)●【强制】小数类型为 decimal,禁止使用 float和 double●【建议】varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,如果存储长度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索引效率●【建议】字段的宽度要在一定时间内足够用,但也不要过宽,占用过多的存储空间;●【建议】除非必要,否则尽量不加冗余列。

所谓冗余列,是指能通过其他列计算出来的列,或者是与某列表达同一含义的列,或者是从其他表复制过来的列等等。

冗余列需要应用程序来维护一致性,相关列的值改变的时候,冗余列也需要随之修改,而这一规则未必所有人都知道,就有可能因此发生不一致的情况。

如果是应用的特殊需要,或者是为了优化某些逻辑很复杂的查询等操作,可以加冗余列;3.2.3 索引的设计●【强制】业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引●【强制】超过三个表禁止 join。

需要 join的字段,数据类型保持绝对一致;多表关联●【强制】查询时,保证被关联的字段需要有索引●【强制】在 varchar字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,●【强制】页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决●【强制】如果有 order by的场景,请注意利用索引的有序性。

order by 最后的字段是组合索引的一部分,并且放在索引组合顺序的最后,避免出现file_sort的情况,影响查询性能。

正例:where a=? and b=? order by c; 索引:a_b_c●【强制】建组合索引的时候,区分度最高的在最左边●【建议】性能测试阶段收集90%SQL后,统一设计建立索引●【建议】根据实际文本区分度决定索引长度。

说明:索引的长度与区分度是一对矛盾体,一般对字符串类型数据,长度为20的索引,区分度会高达90%以上,可以使用count(distinctleft(列名, 索引长度))/count(*)的区分度来确定。

4. SQL编写规范●【强制】禁止开发人员在SQL中添加Hint,Hint只能由DBA审核后添加。

●【强制】禁止使用悲观锁定,即读锁select …for update。

●【强制】禁止在开发代码中使用DDL语句,比如truncate,alter table …等。

●【强制】禁止使用与系统环境相关的mysql inside 函数,列如UUID(),USER(),sysdate()这些函数,这样可能会导致主从同步不一致。

●【强制】禁止在充当读角色的mysqld上执行写操作(写操作指update,delete,insert),因为可能导致同步中断或者数据不一致。

●【强制】不要使用count(列名)或count(常量)来替代count(),count()就是SQL92定义的标准统计行数的语法,跟数据库无关,跟NULL和非NULL无关。

●【强制】说明:count(*)会统计值为NULL的行,而count(列名)不会统计此列为NULL值的行●【强制】使用ISNULL()来判断是否为NULL值。

注意:NULL与任何值的直接比较都为NULL●【强制】禁止使用存储过程,存储过程难以调试和扩展,更没有移植性●【强制】在表查询中,一律不要使用* 作为查询的字段列表,需要哪些字段必须明确写明●【强制】表连接操作中,作为连接条件的字段的数据类型严格一致。

●【强制】如果表连接字段数据类型不一致,在SQL中用显示用类型转换,具体情况咨询DBA。

示例正确用法1:select col1, col2 from tbl1, tbl2where tbl1.col3 = tbl2.col4;其中“tbl1.col3”与“tbl2.col4”数据类型严格一致。

●【建议】必须正确开启事务并且显式关闭事务●【建议】使用域名连接数据库。

禁止线上应用使用IP地址连接数据库。

●【建议】in操作能避免则避免,若实在避免不了,需要仔细评估in后边的集合元素数量,控制在1000个之内。

●【建议】禁止DML语句的where条件中包含恒真条件(如:1=1)5. 数据库备份与恢复策略规范5.1 备份策略●数据库备份需要在本地,从库,存储至少三个地方保留,确保备份不丢失●数据库备份周期根据业务需求,默认采取每日备份,保留7天,每周周一备份,保留30天,每月一号备份,保留100天三个维度进行●数据库备份方式采取mysqldump方式进行每日备份或根据需要进行INNODB增量备份●数据库备份采取每天业务负载低峰时段的凌晨3-5点进行备份●数据库备份用户使用专有备份用户,权限仅仅为可以进行备份和恢复●数据库备份必须保留两个以上存储点,避免因误操作或磁盘损坏丢失备份文件●数据备份设置保留周期,周期以外的数据库备份文件视其需要进行刻盘归档处理●数据库备份采取每月定期验证备份文件有效性的验证测试备份脚本如下:#!/bin/bash#This is a ShellScript For Auto DB BackupDBName=xgw-global-10-BackupPath=/data/mysqlbak/daybakLogFile=/data/mysqlbak/daybak/db.logcd /data/mysqlbak/daybakNewFile=$DBName$(date +%Y%m%d-%H-%M).tar.gzDumpFile=$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 ]; thenmkdir $BackupPathfiecho "-------------------------------------------" >> $LogFileecho $(date +"%y-%m-%d %H:%M:%S") >> $LogFileecho "--------------------------" >> $LogFile#Delete Old Fileif [ -f $OldFile ]; thenrm -f $OldFile >> $LogFile 2>&1echo "[$OldFile]Delete Old File Success!" >> $LogFileelseecho "[$OldFile]No Old Backup File!" >> $LogFilefi# Create NewFileif [ -f $NewFile ]; thenecho "[$NewFile] The Backup File is exists,Can't Backup! "else/usr/local/mysql/bin/mysqldump --single-transaction -A --master-data=2 --opt --all-databases > $DumpFiletar czvf $NewFile $DumpFile >> $LogFile 2>&1echo "[$NewFile]Backup Success!" >> $LogFilerm -rf $DumpFilefiecho "-------------------------------------------" >> $LogFilecp /data/mysqlbak/daybak/$NewFile /data/dbbak/sitebak/ >> $LogFile 2>&1find /data/dbbak/sitebak/* -mtime +7 -exec rm -rf {} \;find /data/mysqlbak/daybak/* -mtime +7 -exec rm -rf {} \;5.2 恢复策略●数据库恢复采取专有数据库恢复账号进行●数据库恢复要先制定失败回退计划并保证其可行●数据库如果是对已有业务数据库换进行时,必须先对现有数据库环境进行备份●数据库恢复必须进行测试验证●数据库恢复后要进行全面的数据和业务验证●数据库恢复成功后,必须立即及逆行那个一次全面的数据库备份6开发测试与上线安全规范●开发测试期间,数据库由DBA维护,所有开发账号由DBA统一建立,开发人员拥有数据库的增删改查以及库结构表结构变更权限●测试完毕正式上线前,由DBA统一进行数据库结构及数据上线部署,所有数据库权限统一收回并按照实际需求进行授权部署●生产数据库中应用程序账号只赋予最小增删改查权限,不赋予变更数据库设置库结构以及表结构权限,只有DBA具有最高权限●生产数据库任何库结构表结构索引结构以及数据库对象建立删除修改都需要经过DBA操作7 监控●【强制】所有生产库必须加入监控系统,不加入监控系统不得上线生产●【强制】MYSQL监控项有CPU,内存,I/O,MYSQL进程,MYSQL复制状态,MYSQL复制延迟,MYSQL端口,MYSQL锁等待●【强制】MONGODB监控项有CPU,内存,I/O,MONGODB进程,MYSQL复制集状态,MONGODB端口8连接池使用规范●建议在性能测试阶段进行连接池最优设置●连接池必须开启autoconnect设置●最小连接数设置为50-100●最大连接数设置为500-1000●连接池idletime设置为10000-200009 数据库重要级别划分●目前根据数据库存储数据的安全重要程度暂时将数据库从高到低划分为三个级别(A级,B级,C级)10 数据库安装规范数据库安装一律采用解压安装方式,具体步骤如下:mkdir -p /data/mysql/datamkdir -p /data/mysql/logsgroupadd mysqluseradd -g mysql mysqlchown -R mysql:mysql /data/mysqlcd /usr/localtar -zxvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gzln -s mysql-5.6.36-linux-glibc2.5-x86_64 mysqlcd mysqlscripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data chown -R root .chown -R mysql datachgrp -R mysql .cp support-files/mysql.server /etc/rc.d/init.d/mysqldcp bin/mysql /usr/bin/chkconfig --add mysqld/etc/rc.d/init.d/mysqld start/usr/local/mysql/bin/safe_mysqld --skip-grant-tables &use mysqldelete from user where user='';use mysqlupdate er set password=password("root") where user="root";flush privileges;11 业务上线数据库部分规范●业务上线如果涉及数据库操作,需要提前半天邮件通知DBA有数据库操作,并且将升级的脚本发给DBA,由DBA进行审查●DBA审核后,如无问题先在预发布环境进行数据库升级,升级完通知业务部门进行预发布测试●业务部门测试没有问题后,由DBA在晚上升级时间点进行生产数据库升级。

相关文档
最新文档