2008从入门到精通,开发进阶篇系列

  1. innodb 行锁是基于索引实现的,如果不通过索引访问数据,innodb会使用表锁。

 

数据库范式理论

范式理论是为了建立冗余较小结构合理的数据库所遵循的规则。关系数据库中的关系必须满足不同的范式。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BCNF、第四范式(4NF)、第五范式(5NF)

     http://www.cnblogs.com/MrHSR/p/9376086.html

Preface

第一范式

对象的任意属性不能被拆分,每个属性有且仅有一个值,即没有重复的行,没有重复的列。

 2. Innodb 间隙锁(Next-key)机制,以及innodb使用间隙锁的原因

 

第二范式

在第一范式的基础上,要求所有非主属性都与主属性完全相关。假设属性1和属性2为主属性,属性3为非主属性,如果属性1或者属性2能唯一确定属性3,则不符合2NF,只有(属性1 属性2)能唯一确定属性3(有助于数据库基础性操作的实现)才符合2NF

  http://www.cnblogs.com/MrHSR/p/9390350.html

    Today,I'm gonna implement a PXC,Let's see the procedure.

第三范式

在第二范式的基础上,要求除主键外其他字段不相关,不存在依赖性。比如一张表中非主属性1,2,3,属性1=属性2-属性3,则该表不满足第三范式。(不要在数据库中存储可以简单计算得出的数据)

 3.不同隔离级别下,innodb的锁机制和一致性读策略不同。

 

BCNF

在第三范式基础上,要求表中所有字段(包括主键)都互不相关,不存在依赖性。即主属性不依赖于主属性。

  

Framework

第四范式

表内不存在多对多关系。如果A和B是1:N的关系,A和C是1:N的关系,B和C互相独立,则不满足第四范式。

 4.mysql 的恢复和复制对innodb锁机制和一致性读策略也有较大影响。

 

第五范式

在第四范式的基础上,可以分解成更小的表。从最终结构重新建立原始结构。

  

Hostname IP Port OS Version MySQL Version Xtrabackup version
zlm2 192.168.1.101 3308 CentOS 7.0 PXC 5.7.22 2.4.12 Linux (x86_64)
zlm3 192.168.1.102 3308 CentOS 7.0 PXC 5.7.22 2.4.12 Linux (x86_64)
zlm4 192.168.1.103 3308 CentOS 7.0 PXC 5.7.22 2.4.12 Linux (x86_64)

Transact-SQL行构造器

例:用INSERT语句一次性插入多行数据

CREATE TABLE a(
    Column1 NVARCHAR(max),
    Column2 NVARCHAR(max)
);
Go
INSERT INTO a VALUES(‘1’,’1’),(‘2’,’2’),(‘3’,’3’);

 5.调整锁冲突和死锁策略

 

用存储过程新建登录名和用户名

创建登录名huyan1,密码111111,默认数据库test,切换到test数据库下,创建登录名huyan1在test数据库中的用户hy1

EXECUTE sp_addlogin ‘huyan1’,’111111’,’test’
USE test
EXEC sp_adduser 'huyan1','hy1'

或使用sp_grantdbaccess创建一个与登录名相同的数据库用户名。

EXEC sp_addlogin 'hy2';
GO
USE test
EXEC sp_grantdbaccess 'hy2'

注:仅创建登录名而没有创建数据库用户名,该登录名无法正常登录数据库。可以使用sql语句创建数据库用户名,或者右键登录名—属性—用户映射中勾选数据库。创建和删除数据库用户名语句必须在该数据库下执行。用户名hy1默认权限public。

删除新建的登录名:

EXECUTE sp_droplogin ‘huyan1’

删除新建的用户名:

USE test;
EXECUTE sp_dropuser ‘hy1’

         5.1 尽量使用较低的隔离级别

Procedure

用户权限

         5.2 精心设计索引,并尽量使用索引访问数据,使加锁更精确,从而减少锁冲突的机会。

 

主要语句

USE test;
GRANT SELECT,UPDATE,DELETE
ON Customers
TO huyan1

REVOKE SELECT,UPDATE,DELETE
ON Customers
TO huyan1

注: GRANT语句必须在目标数据库下执行。

         5.3 选择合理的事务大小,小事务发生锁冲突的几率也更小。

    The official website of PXC:

授予用户权限的前提

(1)创建登录名huyan1,密码111111,默认数据库test

EXCUTE sp_addlogin ‘huyan1’,’111111’,’test’

(2)在huyan1登录名的目标数据库test下创建用户hy

USE test;
CREATE USER hy FOR LOGIN huyan1 WITH DEFAULT_SCHEMA=test;

或者右键点击huyan1登录名,在属性—用户映射中勾选test数据库,系统会自动在test数据库下添加huyan1的用户

         5.4 给记录集显示加锁时,最好一次性请求足哆级别的锁。比如要修改数据的话,最好直接申请排它锁,而不是先申请共享锁,修改时再请求排它锁,这样容易死锁。

    

授予权限

USE test;
GRANT SELECT,UPDATE,DELETE
ON Customers
TO hy

注:这里的hy指的是数据库用户名而非登录名。

         5.5 不同程序访问一组表时,尽量约定以相同的顺序访问各表。

 

撤销权限

撤销用户hy在Customers表中的SELECT,UPDATE,DELETE权限

USE test;
REVOKE SELECT,UPDATE,DELETE
ON Customers
TO hy

         5.6 尽量用相等条件访问数据,这样可以避免间隙锁对并发插入的影响。

    Choose the Linux-Generic software.There're three version relevant with openssl(100,101,102),I choose the ssl102 version.

拒绝权限

拒绝用户hy在Customers表中的DELETE权限

USE test;
DENY DELETE
ON Customers
TO hy

注:REVOKE和DENY的区别在于,用户权限被DENY后无法通过其组或角色成员身份继承该权限,而权限被REVOKE后还可以通过继承和授予得到。

 

创建角色并分配给用户

在test数据库下,用存储过程创建角色p_test,该角色的所有者为hy。为p_test角色授予Customers表的所有权限。用存储过程为角色p_test分配成员用户hy。

USE test
EXEC sp_addrole ‘p_test’,’hy’;
GRANT ALL ON Customers TO p_test;
EXEC sp_addrolemember ‘p_test’,’hy’;

注:角色所有者hy并不是角色成员。用EXEC sp_addrole ‘p_test’,’hy’语句创建角色p_test并设置所有者为hy,并不代表hy是p_test的成员,拥有p_test角色的权限。

为角色p_test移除成员hy

EXEC sp_droprolemember ‘p_test’,’hy’;

Install Percona-XtraDB-Cluster software on three nodes.

服务器角色

bulkadmin:允许运行BULK INSERT语句,用于从文本中大量插入数据到数据库中
dbcreator:允许创建,修改,删除和还原任何数据库,适用于助理DBA和开发人员
diskadmin:允许管理磁盘文件,比如镜像数据库和添加备份设备,适用于助理DBA
processadmin:允许多任务化的管理,可以通过多个进程做多件事情,也可以删除进程
securityadmin:安全管理员,管理登录名及其属性
serveradmin:服务管理员,更改服务器的配置选项和关闭服务器
setupadmin:管理链接服务器,控制启动的存储过程
sysadmin:有权执行任何任务,仅适用于数据库管理员

本文由ca88手机版登录发布于亚洲城ca88手机版官网,转载请注明出处:2008从入门到精通,开发进阶篇系列

TAG标签: ca88手机版登录
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。