读《MySQL性能调优与架构设计》笔记之MySQL 数据库锁定机制

读《MySQL性能调优与架构设计》笔记之MySQL 数据库锁定机制
读《MySQL性能调优与架构设计》笔记之MySQL 数据库锁定机制

1.MySQL锁定机制简介

MySQL 各存储引擎使用了三种类型(级别)的锁定机制:行级锁定,页级锁定和表级锁定。下面我们先分析一下MySQL 这三种锁定的特点和各自的优劣所在。

●行级锁定(row-level)

行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的。由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小,能够给予应用程序尽可能大的并发处理能力而提高一些需要高并发应用系统的整体性能。

虽然能够在并发处理能力上面有较大的优势,但是行级锁定也因此带来了不少弊端。由于锁定资源的颗粒度很小,所以每次获取锁和释放锁需要做的事情也更多,带来的消耗自然也就更大了。此外,行级锁定也最容易发生死锁。

●表级锁定(table-level)

和行级锁定相反,表级别的锁定是MySQL 各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现逻辑非常简单,带来的系统负面影响最小。所以获取锁和释放锁的速度很快。由于表级锁一次会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。

当然,锁定颗粒度大所带来最大的负面影响就是出现锁定资源争用的概率也会最高,致使并大度大打折扣。

●页级锁定(page-level)

页级锁定是MySQL 中比较独特的一种锁定级别,在其他数据库管理软件中

也并不是太常见。页级锁定的特点是锁定颗粒度介于行级锁定与表级锁之间,所以获取锁定所需要的资源开销,以及所能提供的并发处理能力也同样是介于上面二者之间。另外,页级锁定和行级锁定一样,会发生死锁。

在数据库实现资源锁定的过程中,随着锁定资源颗粒度的减小,锁定相同数据量的数据所需要消耗的内存数量是越来越多的,实现算法也会越来越复杂。不过,随着锁定资源颗粒度的减小,应用程序的访问请求遇到锁等待的可能性也会随之降低,系统整体并发度也随之提升。

在MySQL 数据库中,使用表级锁定的主要是MyISAM,Memory,CSV 等一些非事务性存储引擎,而使用行级锁定的主要是Innodb 存储引擎和NDB Cluster 存储引擎,页级锁定主要是BerkeleyDB存储引擎的锁定方式。2.合理利用锁机制优化MySQL

2.1. MyISAM表锁优化建议

对于MyISAM 存储引擎,虽然使用表级锁定在锁定实现的过程中比实现行级锁定或者页级锁所带来的附加成本都要小,锁定本身所消耗的资源也是最少。但是由于锁定的颗粒度比较到,所以造成锁定资源的争用情况也会比其他的锁定级别都要多,从而在较大程度上会降低并发处理能力。

所以,在优化MyISAM 存储引擎锁定问题的时候,最关键的就是如何让其提高并发度。由于锁定级别是不可能改变的了,所以我们首先需要尽可能让锁定的时间变短,然后就是让可能并发进行的操作尽可能的并发。

1.缩短锁定时间

缩短锁定时间,短短几个字,说起来确实听容易的,但实际做起来恐怕就并不那么简单了。如何让锁定时间尽可能的短呢?唯一的办法就是让我们的Query 执行时间尽可能的短。

a)尽两减少大的复杂Query,将复杂Query 分拆成几个小的Query 分布进行;

b)尽可能的建立足够高效的索引,让数据检索更迅速;

c)尽量让MyISAM 存储引擎的表只存放必要的信息,控制字段类型;

d)利用合适的机会优化MyISAM 表数据文件;

2.分离能并行的操作

说到MyISAM 的表锁,而且是读写互相阻塞的表锁,可能有些人会认为在MyISAM 存储引擎的表上就只能是完全的串行化,没办法再并行了。大家不要忘记了,MyISAM 的存储引擎还有一个非常有用的特性,那就是Concurrent Insert(并发插入)的特性。

MyISAM 存储引擎有一个控制是否打开Concurrent Insert 功能的参数选项:concurrent_insert,可以设置为0,1 或者2。三个值的具体说明如下:

a)concurrent_insert=2,无论MyISAM 存储引擎的表数据文件的中间部分是否存在因为删除数据而留下的空闲空间,都允许在数据文件尾部进行Concurrent Insert;

b)concurrent_insert=1,当MyISAM 存储引擎表数据文件中间不存在空闲空间的时候,可以从文件尾部进行Concurrent Insert;

c)concurrent_insert=0,无论MyISAM 存储引擎的表数据文件的中间部分是否存在因为删除数据而留下的空闲空间,都不允许Concurrent

Insert。

3.合理利用读写优先级

在本章各种锁定分析一节中我们了解到了MySQL 的表级锁定对于读和写是有不同优先级设定的,默认情况下是写优先级要大于读优先级。所以,如果我们可以根据各自系统环境的差异决定读与写的优先级。如果我们的系统是一个以读为主,而且要优先保证查询性能的话,我们可以通过设置系统参数选项

low_priority_updates=1,将写的优先级设置为比读的优先级低,即可让告诉MySQL 尽量先处理读请求。当然,如果我们的系统需要有限保证数据写入的性能的话,则可以不用设置low_priority_updates参数了。

这里我们完全可以利用这个特性,将concurrent_insert 参数设置为1,甚至如果数据被删除的可能性很小的时候,如果对暂时性的浪费少量空间并不是特别的在乎的话,将concurrent_insert 参数设置为2 都可以尝试。当然,数据文件中间留有空域空间,在浪费空间的时候,还会造成在查询的时候需要读取更多的数据,所以如果删除量不是很小的话,还是建议将

concurrent_insert 设置为1 更为合适。

从以上的赋值说明可以得出,在删除操作不是很多的情况下,可以选用concurrent_insert =2 ,这样可以增大并发速度,但是会浪费一部分数据文件的空间,因为中间删除的空隙得不到数据填充。这个浪费在删除操作较多的情况下是非常可观的,所以在删除操作较多的情况下应该选用

concurrent_insert =1,当然,假如你的对空间不是特别在乎,而且能很好的处理备份问题,选用concurrent_insert =2显然能提高你的MyISAM的并发读写能力。

2.2. Innodb 行锁优化建议

要想合理利用Innodb 的行级锁定,做到扬长避短,我们必须做好以下工作:

a)尽可能让所有的数据检索都通过索引来完成,从而避免Innodb 因为无法通过索引键加锁而升级为表级锁定;

b)合理设计索引,让Innodb 在索引键上面加锁的时候尽可能准确,尽可能的缩小锁定范围,避免造成不必要的锁定而影响其他Query 的执行;

c)尽可能减少基于范围的数据检索过滤条件,避免因为间隙锁带来的负面影响而锁定了不该锁定的记录;

d)尽量控制事务的大小,减少锁定的资源量和锁定时间长度;

e)在业务环境允许的情况下,尽量使用较低级别的事务隔离,以减少MySQL 因为实现事务隔离级别所带来的附加成本;

由于Innodb 的行级锁定和事务性,所以肯定会产生死锁,下面是一些比较常用的减少死锁产生概率的的小建议,读者朋友可以根据各自的业务特点针对性的尝试:

a)类似业务模块中,尽可能按照相同的访问顺序来访问,防止产生死锁;

b)在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率;

c)对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率;

系统锁定争用情况查询

对于两种锁定级别,MySQL 内部有两组专门的状态变量记录系统内部锁资源争用情况,我们先看看MySQL 实现的表级锁定的争用状态变量:

mysql> show status like 'table%';

这里有两个状态变量记录MySQL 内部表级锁定的情况,两个变量说明如下:

●Table_locks_immediate:产生表级锁定的次数

●Table_locks_waited:出现表级锁定争用而发生等待的次数

两个状态值都是从系统启动后开始记录,没出现一次对应的事件则数量加1。如果这里的Table_locks_waited 状态值比较高,那么说明系统中表级锁定争用现象比较严重,就需要进一步分析为什么会有较多的锁定资源争用了。

对于Innodb 所使用的行级锁定,系统中是通过另外一组更为详细的状态变量来记录的,如下:

mysql> show status like 'innodb_row_lock%';

Innodb 的行级锁定状态变量不仅记录了锁定等待次数,还记录了锁定总时长,每次平均时长,以及最大时长,此外还有一个非累积状态量显示了当前正在等待锁定的等待数量。对各个状态量的说明如下:

●Innodb_row_lock_current_waits:当前正在等待锁定的数量

●Innodb_row_lock_time:从系统启动到现在锁定总时间长度

●Innodb_row_lock_time_avg:每次等待所花平均时间

●Innodb_row_lock_time_max:从系统启动到现在等待最常的一次所

花的时间

●Innodb_row_lock_waits:系统启动后到现在总共等待的次数

对于这5 个状态变量,比较重要的主要是Innodb_row_lock_time_avg (等待平均时长),Innodb_row_lock_waits(等待总次数)以及

Innodb_row_lock_time(等待总时长)这三项。尤其是当等待次数很高,而且每次等待时长也不小的时候,我们就需要分析系统中为什么会有如此多的等待,然后根据分析结果着手指定优化计划。

此外,Innodb 出了提供这五个系统状态变量之外,还提供的其他更为丰富的即时状态信息供我们分析使用。可以通过如下方法查看:

1.通过创建Innodb Monitor 表来打开Innodb 的monitor 功能:

mysql> create table innodb_monitor(a int) engine=innodb; Query OK, 0 rows affected (0.07 sec)

2.然后通过使用“SHOW INNODB STATUS”查看细节信息(由于输出内容太多就不在此记录了);

可能会有读者朋友问为什么要先创建一个叫innodb_monitor 的表呢?因为创建该表实际上就是告诉Innodb 我们开始要监控他的细节状态了,然后Innodb 就会将比较详细的事务以及锁定信息记录进入MySQL 的error log 中,以便我们后面做进一步分析使用。

Enterprise-Architect-中文经典教程

Enterprise Architect 中文经典教程 一、Enterprise Architect简介 Enterprise Architect是一个对于软件系统开发有着极好支持的CASE软件(Computer Aided Software Engineering)。EA不同于普通的UML画图工具(如VISIO),它将支撑系统开发的全过程。在需求分析阶段,系统分析与设计阶段,系统开发及部署等方面有着强大的支持,同时加上对10种编程语言的正反向工程,项目管理,文档生成,数据建模等方面。可以让系统开发中各个角色都获得最好的开发效率。 二、创建新项目 安装好了EA汉化版后,启动软件。点击“创建新的项目”,打开创建新项目对话框。 【图1】 这里可以选择各种的初始的模板包。 【图2】

我们选择了其中几个,然后确定打开了项目浏览器。我们的项目将从这里开始了。 【图3】 三、EA软件配置 在使用软件之前,我们先来对它进行配置。打开“工具”–>“选项”。 【图4】 常规配置中,比较重要的是作者这项。因为在EA项目的团队协作中,作者是每个人的身份标识。 在代码工程中,最好把文件编码设置成UTF8或者是GB中文。 其他方面的配置,因为都是中文的,也比较容易理解。有些不明的地方,可以多琢磨。 另外对于最下面的十种编程语言,可以根据自己的需要,进行一些配置。比如PHP,可以配置PHP4或者是PHP5,那么生成的代码也是有些不同的。还可以隐藏其他没有用到的语言。 四、用例图,类图的使用

用例图(use case) 用例图是我们做系统分析的通常第一步,是非常重要的。毕竟大部分的开发流程,都将需求分析作为首要步骤,也是必要步骤。将系统需求化作图型表达出来。首先是在项目浏览器中,右键“添加”–>“新建图表”。 【图5】 然后可以加入一些角色和用例,在每次在工具箱里面拉出一个元件,都将打开这个元件的设置对话框,在对话框内填入元件的名称等信息。现在我们是表达一个用户注册和登录的场景:

完整Mysql燕十八学习笔记

Mysql 三大列类型 1. 数值型 整型 Tinyint 、Smallint、Mediumint 、Int、Bigint 小数型 Float(D,M),Decimal(D,M) 2. 字符串型 Char(M) Varchar(M) Text 文本类型 3. 日期时间类型 Date 日期 Time 时间 Datetime 时间类型 Year年类型 一.整型列的字节与存储范围 从数学上讨论tinyint ,建表时既能足够存放,又不浪费空间。 即: (1). 占据空间

(2). 存储范围

通过占用字节和所存范围分关系合理的选择类型例:Tinyint

经测试,Tinyint 的默认为有符号-128~127之间,当越界时自动取相应 的边界值。若要存 0~255无符号时: 列的可选属性: Tinyin t (M ) un sig ned zerofill. M :宽度(在0填充的时候才有意义) Un sig ned:无符号类型(非负),影响存储范围 Zerofill : 0填充(默认无符号)

1> insert into test -> (name,age3) -> ualu&s ->「赵六'/S'); u QIC, 1 row aff?et&d (0.00 soc) 箕from t&st; I id I name I age I agel I age2 I age3 I 卜--------- + ------------- + --------------- + -------------- + --------------- + ----------------- + rows in at (0.07 SEC) 列可以声明默认值,而且推荐声明默认值not null default 0; ysql> alter table test add tinyint(3j not null default 0; uery 0IC, 9 rows affected (0.13 $ec) ecords: 9 Duplicates: 0 Uarnings: O 小数型/浮点型、定点型 Float(M,D):M代表总位数,D代表小数位 (6,2)为例:-9999.99 ->9999.99 12345G789一一一一张张张张 李 张 李 王 制 L L u N i NULL L L u N L L J N I NULL NULL L L u N 三 四 三 四 五 六 6 NULL NULL I NULL I L L u N NULL | 2G0 | NULL | NULL ! NULL I 0 I NULL I NULL | NULL I NULL I 127 I NULL I y$ql> t M from 七。兮七; ------ - -------------------------- + ----- ------ I id I name I age I agel I age2 I age3 I age4 I I 25 I NULL I I 127 I NULL I I -128 I NULL I I 127 I NULL I I -100 | NULL I I NULL I 200 I I NULL I 0 I I NULL I NULL I I NULL I NULL I NULL I NULL I NULL I NULL I NULL I NULL I NULL I NULL I NULL I NULL I NULL I NULL I NULL I NULL I 127 I NULL I NULL I 00005 I NULL I 06305 I 123456T89三三三 _: 一 四 三 四 五 六 张 张 张 张 李 张 李 王 赵

传智 韩忠康 mysql 课程笔记4(吐血整理)

Order by 2013年4月19日星期五 09:39 校对规则,决定排序关系。 按照字段值进行排序 Order by 字段升序|降序(asc|desc) 默认升序,asc。 允许多字段排序, 指的是,先按照第一个字段排序,如果说不能区分,才使用第二个字段。以此类推。 注意,如果是分组,则应该使用对分组字段进行排序的groupby语法。 limit 2013年4月19日星期五 09:50 限制获得的记录数量: limit的语法: Limit offset,row_count Offset 偏移量,从0开始。可以省略,默认为0. Row_count总记录数,如果数量大于余下的记录数, 则获取所有余下的即可:

select * from teacher_class limit 3, 4; select * from teacher_class limit 5;select * from teacher_class limit 5, 100;

distinct 2013年4月19日星期五 10:17 去除重复记录: 重复的记录,指的是,字段值都相同的记录, select days from teacher_class ; select distinct days from teacher_class ; select days, begin_date from teacher_class ; select distinct days, begin_date from teacher_class ; 相对的是all,表示所有。默认就是all行为。

Union 2013年4月19日星期五 10:26 联合查询: 将多条select语句的结果,合并到一起。称之为联合操作。 获得2个班代课最多的老师: select t_name, days from teacher_class where c_name='php0115' order by days desc limit 1; select t_name, days from teacher_class where c_name='php0228' order by days desc limit 1;

非常经典的solr教程

非常经典的solr教程,照着上面做完全能成功! duogemajia Solr 3.5 入门配置应用 机器上已安装: Tomcat 6.0 jdk1.7 mysql 5.0 1 访问https://www.360docs.net/doc/372335791.html,/dyn/closer.cgi/lucene/solr , 在这个网址里选择一个路径, 下载solr 3.5 的版本 2 solr3.5 在本机解压缩以后, 把apache-solr-3.5.0\example\webapps 目录下 的solr.war 文件拷贝到Tomcat 6.0 的webapps 目录下 3 在Tomcat 6.0\webapps\solr 目录里新建一个文件夹conf 4 把solr3. 5 本机解压缩文件夹apache-solr-3.5.0\example 下的multicore 文件夹 考本到Tomcat 6.0\webapps\solr\conf 目录下 5 在Tomcat 6.0\conf\Catalina\localhost 目录下新建一个solr.xml 文件, 里面的内容如下 6 访问你的solr 项目localhost:8080/solr 会显示出两个core , solr 正常运行 7 配置分词, 使用的是mmseg4j 和搜狗词库, 下载地址: https://www.360docs.net/doc/372335791.html,/p/mmseg4j/ , https://www.360docs.net/doc/372335791.html,/p/mmseg4j/downloads/ detail?name=data.zip&can=2&q 8 把本地下载的mmseg4j 解压缩, 把里面的mmseg4j-all-1.8.5.jar 文件拷贝到Tomcat 6.0\webapps\solr\WEB-INF\lib 目录下 9 在Tomcat 6.0\webapps\solr 目录下新建一个dic 文件夹, 把新下载的词库拷贝到dic 目录下 10 在\Tomcat 6.0\webapps\solr\conf\multicore\core0\conf\schema.xml 文件的types 节点里添加如下节点:

MySQL最全整理(面试题+笔记+导图),面试大厂不再被MySql难倒!

前言 作为一名编程人员,对MySQL一定不会陌生,尤其是互联网行业,对MySQL的使用是比较多的。对于求职者来说,MySQL又是面试中一定会问到的重点,很多人拥有大厂梦,却因为MySQL败下阵来。实际上,MySQL并不难,今天这份最全的MySQL总结,助你向大厂“开炮”,面试不再被MySQL难倒。 注意:关于MySQL的内容整理,包括了面试题、学习笔记、使用文档以及Xmind思维图几个部分,需要高清完整版的请转发+关注,然后私信回复“666”获得免费领取方式 01、MySQL 面试题集合总结 1.1 MySQL 面试题(基础部分): ?drop、truncate、delete区别 ?数据库三范式是什么? ?union和union all有什么不同? ?char、varchar2、varchar有什么区别? ?合并查询有哪些? ?SQL语句执行顺序 ?null的含义 ?MySQL、SqlServer、oracle写出字符存储、字符串转时间 ?update语句可以修改结果集中的数据吗? ?B树和B+树的区别 ?你建过索引吗? 建索引的原则 ?索引的类型, 如主键索引 ?查看SQL执行计划

?有十万条数据, 写SQL语句查询其中某字段较大值的几条数据 ?子查询与关联查询的区别 ?MySQL InnoDB、Mysaim的特点? ?乐观锁和悲观锁的区别?? ?行锁和表锁的区别? ?数据库隔离级别是什么?有什么作用? ?MySQL主备同步的基本原理。 ?如何优化数据库性能(索引、分库分表、批量操作、分页算法、升级硬盘SSD、业务优化、主从部署) ?SQL什么情况下不会使用索引(不包含,不等于,函数) ?一般在什么字段上建索引(过滤数据最多的字段) ?MySQL,B+索引实现,行锁实现,SQL优化 ?如何解决高并发减库存问题 ?数据库事务的几种粒度 1.2 MySQL 面试题(实战部分): ?数据库三范式,根据秒杀场景设计数据表 ?数据库的主从复制 ?死锁怎么解决 ?mysql并发情况下怎么解决(通过事务、隔离级别、锁) ?触发器的作用? ?什么是存储过程?用什么来调用? ?存储过程的优缺点?

传智 韩忠康 mysql 课程笔记5(吐血整理)

昨天作业 2013年4月20日星期六 09:56 class as h on m.host_id =h.id left join

select 2013年4月20日星期六10:06

生成的文件格式: 默认的,采用行来区分记录,而采用制表符,来 区分字段。 为了满足某种特别的需求,会采用不同的分割方式。 支持,在导出数据时,设置记录,与字段的分割符。 通过如下的选项: fields:设置字段选项 Lines: 设置行选项(记录选项) 先看默认值: 字段:fields terminated by '\t' enclosed by '' escaped by '\\‘ 记录:lines terminated by '\n' starting by '' 可以自己设定: select * into outfile 'e:/amp/three' fields terminated by ',' lines terminated by '\n' starting by 'start:' from teacher_class where t_name = '韩信'; 字段包裹 select * into outfile 'e:/amp/four' fields terminated by '\t' enclosed by 'x' lines terminated by '\n' starting by 'start:' from teacher_class where t_name = '韩信'; 注意: 常规的,所有的记录,应该通过行来显示例外是保存二进制数据:

mysql多表操作与练习笔记

mysql多表操作与练习 数据库备份与恢复 ◆数据库备份 ◆数据库恢复 多表操作 ◆多表设计 ◆外键介绍与创建 ◆多表查询介绍 ◆多表查询-内连接 ◆多表查询-外连接 ◆多表查询-子查询 SQL练习 【内容:数据库备份与恢复】 数据库备份 数据库的备份是指将数据库转换成对应的sql文件。数据库导出sql脚本的命令如下: ●mysqldump –u用户名–p密码数据库名>生成的脚本文件路径; 以上备份数据库的命令中需要用户名和密码,即表明该命令要在用户没有登录的情况下使用数据库恢复 数据库的恢复指的是使用备份产生的sql文件恢复数据库,即将sql文件中的sql语句执行就可以恢复数据库内容。因为数据库备份只是备份了数据库内容,所以备份产生的sql文件中没有创建数据库的sql语句,在恢复数据库之前需要自己动手创建数据库。 ●在数据库外恢复 mysql -u root -p 数据库名< 文件路径 注意:要求数据库必须先创建出来. ●.在数据库内恢复 source SQL脚本路径:使用这种方式恢复数据,首先要登录数据库 【重点总结】 备份 Mysqldump –u root –p abc mydb>c:/mydb.sql 恢复 1.mysql –u root –p mydb

【内容:多表操作】 多表设计 当我们要完成一个软件系统时,需要把系统中的实体抽取出来,形成概念模型。例如部门、员工都是系统中的实体。概念模型中的实体最终会成为Java中的类、数据库中的表。今天我们需要了解的概念模型包括以下两个: ●对象模型:针对java中的实体类,例如我们之前学习的domain层中的User类等; ●关系模型:对应数据库中的表。 在java中有以下三个关系描述: ●is a:例如猫是动物,表示继承关系; ●has a:例如人有两只手,表示的是类与成员的关系; ●use a:表示类与方法之间的关系; 我们今天主要关注的是第二个关系:类与成员的关系。这种关联关系可以分为如下三种: ●一对一关联:例如身份证与人就是一对一的关系,一个人只有一个身份证,一个身份证 号只属于一个人。 ●一对多关联:例如用户与订单,一个用户可以拥有多个订单,多个订单可以属于同一个 用户,这是一个很明显的一对多关联。 ●多对多关联:例如商品与订单,一个订单中可以包含多个商品,而一个商品也可以存在 于多个订单中,这就是一个多对多关联。 概念模型在java中对应这实体类,在实体类中使用成员变量完成关联关系,而且一般都是双向关联,以下是java中实体类与成员之间的关联关系,如下所示: 一对一关联 //身份证类一的一方 public class IDCard { private Person person; //身份证关联人类一对一 } //人类一的一方 public class Person { private IDCard idcard; //人类关联身份证类一对一 } 一对多关联 //用户一的一方 public class User { private List orders; //用户可以有多个订单,在用户中关联订单} //订单多的一方 public class Order { private User user; //多个订单可以属于一个用户,在订单中关联用户} 多对多关联 // 订单多的一方 public class Order { private List products; //订单中可以包含多个商品,订单关联商品

Mysql日志管理笔记

Mysql日志管理笔记(5.7版本) wangzz 四种日志文件: 1,二进制日志:以二进制形式记录数据库的各种操作,但不记录查询语句. 2,错误日志: 该日志文件记录mysql服务器启动,关闭和运行时的出错等信息。 3,通用查询日志:记录mysql启动,关闭,及客户端的连接信息,更新数据记录sql语句和查询数据记录sql语句. 4,慢查询日志:记录执行时间超过指定时间的各种操作,通过工具分析慢查询日志可以定位性能瓶颈。 1,二进制日志 1)启动二进制日志 /etc/https://www.360docs.net/doc/372335791.html,f 文件。 [mysqld] log-bin[=dir/[filename]] server_id=100 log-bin=/export/app/log/binlog/binlog.log 重启服务就可以启动二进制日志文件,如果启动不了。看log-error日志,你会时到重启不了的原因 mysql> show variables like '%bin%'; +-----------------------------------------+-------------------------------------+ | Variable_name | Value | +-----------------------------------------+-------------------------------------+ | bind_address | * | | binlog_cache_size | 32768 | | binlog_checksum | CRC32 | | binlog_direct_non_transactional_updates | OFF | | binlog_error_action | ABORT_SERVER | | binlog_format | ROW | | binlog_group_commit_sync_delay | 0 | | binlog_group_commit_sync_no_delay_count | 0 | | binlog_gtid_simple_recovery | ON | | binlog_max_flush_queue_time | 0 | | binlog_order_commits | ON | | binlog_row_image | FULL | | binlog_rows_query_log_events | OFF | | binlog_stmt_cache_size | 32768 | | innodb_api_enable_binlog | OFF | | innodb_locks_unsafe_for_binlog | OFF | | log_bin | ON | | log_bin_basename | /export/app/log/binlog/binlog | | log_bin_index | /export/app/log/binlog/binlog.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | log_statements_unsafe_for_binlog | ON | | max_binlog_cache_size | 18446744073709547520 | | max_binlog_size | 1073741824 | | max_binlog_stmt_cache_size | 18446744073709547520 | | sql_log_bin | ON | | sync_binlog | 1 | +-----------------------------------------+-------------------------------------+ 27 rows in set (0.00 sec) 查看二进制日志文件 [root@risoserverbinlog]# mysqlbinlog binlog.000001

第五篇 创建实用的php和MySQL项目 笔记

php+mysql第五篇创建实用的php和MySQL项目 php+mysql第五篇创建实用的php和MySQL项目 (1) 1.在大型项目中使用php和mysql (4) 1.1.在web开发中应用软件工程 (4) 1.2.规划和运行web应用程序项目 (4) 1.3.重用代码 (4) 1.4.编写可维护代码 (4) 1.4.1.编码标准 (4) 1.4.1.1.定义命名惯例 (4) 1.4.1.2.对代码进行注释 (4) 1.4.1.2.1.对文件或包含文件注释 (4) 1.4.1.2.2.对函数进行注释 (4) 1.4.1.2.3.类注释 (4) 1.4.1.2.4.脚本或一大段代码 (4) 1.4.1.2.5.复杂的代码 (5) 1.4.1.3.代码缩进 (5) 1.4.2.分解代码 (5) 1.4.3.使用标准的目录结构 (5) 1.4.4.文档化和共享内部函数 (5) 1.5.实现版本控制 (5) 1.6.选择一个开发环境 (5) 1.7.项目的文档化 (5) 1.7.1.设计文档 (6) 1.7.2.技术文档/开发指南 (6) 1.7.3.数据词典(包含类文档) (6) 1.7.4.用户指南(尽管大多数web程序是自我解释的) (6) 1.8.建立原型 (6) 1.9.分离逻辑.内容和外观.php+html+css (6) 1.9.1.用包含文件保存不同部分的内容 (6) 1.9. 2. 用一个函数或者带有一组成员函数的类api将动态内容插入到静态网页模版中6 1.9.3.使用模版系统.用来解析静态模版 (6) 1.10.优化代码 (6) 1.10.1.使用简单优化 (6) 1.10.1.1.减少数据库连接 (6)

EA经典教程(实战)

EA经典教程 2009-12-07 来源:https://www.360docs.net/doc/372335791.html, 一、Enterprise Architect简介 nterprise Architect是一个对于软件系统开发有着极好支持的CASE软件(Computer Aided Software Engineering)。EA不同于普通的UML画图工具(如VISI 支撑系统开发的全过程。在需求分析阶段,系统分析与设计阶段,系统开发及部署等方面有着强大的支持,同时加上对10种编程语言的正反向工程,项文档生成,数据建模等方面。可以让系统开发中各个角色都获得最好的开发效率。 二、创建新项目 安装好了EA汉化版后,启动软件。点击“创建新的项目”,打开创建新项目对话框。 1】 这里可以选择各种的初始的模板包。 2】 我们选择了其中几个,然后确定打开了项目浏览器。我们的项目将从这里开始了。

3】 三、EA软件配置 在使用软件之前,我们先来对它进行配置。打开“工具”–>“选项”。 【图4】 常规配置中,比较重要的是作者这项。因为在EA项目的团队协作中,作者是每个人的身份标识。 在代码工程中,最好把文件编码设置成UTF8或者是GB中文。 其他方面的配置,因为都是中文的,也比较容易理解。有些不明的地方,可以多琢磨。 另外对于最下面的十种编程语言,可以根据自己的需要,进行一些配置。比如PHP,可以配置PHP4或者是PHP5,那么生成的代码也是有些不同的。还可其他没有用到的语言。 四、用例图,类图的使用 用例图(use case) 用例图是我们做系统分析的通常第一步,是非常重要的。毕竟大部分的开发流程,都将需求分析作为首要步骤,也是必要步骤。将系统需求化作图型表达出

mysql优化笔记

◆Mysql数据库的优化技术<大型网站优化技术> 对mysql优化时一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引] c: 分表技术(水平分割、垂直分割) d: 读写[写: update/delete/add]分离 e: 存储过程[模块化编程,可以提高速度] 数据库的三层结构: f: 对mysql配置优化[配置最大并发数my.ini, 调整缓存大小] g: mysql服务器硬件升级 h: 定时的去清除不需要的数据,定时进行碎片整理(MyISAM) CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ON tbl_name (index_col_name,...) ◆什么样的表才是符合3NF (范式) 表的范式,是首先符合1NF, 才能满足2NF , 进一步满足3NF 1NF: 即表的列的具有原子性,不可再分解,即列的信息,不能分解, 只有数据库是关系型数据库(mysql/oracle/db2/informix/sysbase/sql server),就自动的满足1NF ?数据库的分类 关系型数据库: mysql/oracle/db2/informix/sysbase/sql server 非关系型数据库: (特点: 面向对象或者集合) NoSql数据库: MongoDB(特点是面向文档) 2NF: 表中的记录是唯一的, 就满足2NF, 通常我们设计一个主键来实现id primary key ; 3NF: 即表中不要有冗余数据, 就是说,表的信息,如果能够被推导出来,就不应该单独的设计一个字段来存放. 比如下面的设计就是不满足3NF:显示推导处理

Mysql数据库主要系统表详细说明

Mysql数据库主要系统表说明 1. 获取所有表结构(TABLES) SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA='数据库名'; TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。各字段说明如下: 2. 获取表字段(COLUMNS) SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='数据库名' AND TABLE_NAME='表名' COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。各字段的说明信息如下:

3. 获取表键值 SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA='数据库名' AND TABLE_NAME='表名' 4. 获取表Check约束 SELECT * FROM information_schema.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA='数据库名' AND TABLE_NAME='表名' TABLE_CONSTRAINTS表:存储主键约束、外键约束、唯一约束、check约束。各字段的说明信息如下:

5. 获取表索引 SELECT * FROM information_schema.STATISTICS WHERE TABLE_SCHEMA='数据库名' AND TABLE_NAME='表名' 6. mysql有关show的用法 SHOW DATABASES列出MySQL Server上的数据库。 SHOW TABLES [FROM db_name]列出数据库中的表。 SHOW TABLE STATUS [FROM db_name]列出数据库的表信息,比较详细。 SHOW COLUMNS FROM tbl_name [FROM db_name]列出表的列信息,同SHOW FIELDS FROM tbl_name [FROM db_name],DESCRIBE tbl_name [col_name]。 SHOW FULL COLUMNS FROM tbl_name [FROM db_name]列出表的列信息,比较详细,同SHOW FULL FIELDS FROM tbl_name [FROM db_name]。 SHOW INDEX FROM tbl_name [FROM db_name]列出表的索引信息。 SHOW STATUS列出Server 的状态信息。 SHOW VARIABLES列出MySQL 系参数值 SHOW PROCESSLIST查看当前mysql查询进程 SHOW GRANTS FOR user列出用户的授权命令

数据库学习笔记

数据库学习笔记 图形化界(Navicate Premium)面操作数据库 1、工具---->命令行操作 2、选中某个表对象--->右击---->逆向表到模型---生成各表的关系模型 3、选中某个表对象-->右击-->对象信息--->DDL查看创建表的信息 Sql语言集数据定义语言,数据操纵语言,数据查询语言,数据控制语言于一体,可以完成数据库生命周期中的全部工作。 数据定义语言:完成创建,修改或删除数据库中的各种对象有create,drop,alter的命令。 数据查询语言:按各种条件查询数据库中的数据有select及其相关命令。 数据操纵语言:对已经从在的数据库对其进行数据的插入,删除和修改有insert,update,delete命令。 数据库控制语言:用于授权或收回访问数据库的某种特权,控制数据操纵事物的发生时间及效果,对数据库进行监视。有grant,revoke,commit,rollback等命令。 一、数据库操作 1、启动数据库:net start mysql 2、关闭数据库:net stop mysql 3、打开数据库:mysql -u root -p123 4、显示所有数据库:show databases;

5、创建数据库:create database mydb1; 6、删除数据库:drop database mydb1; 二、单表操作: 1、选择并使用数据库:use mydb1 2、创建表:(宠物表) 宠物表:id名字、主人、种类,性别、出生和死亡日期。create table pet( id int primary key, name varchar(20), owner varchar(20), species varchar(20), sex char(1), birth date, death date ); 3、插入数据: insert into pet values(1,’ergou’,’zx’,’dog’,’f’,’2013-09-06’ null); 4、查询所有内容 select * from pet; 5、删除一条数据: delete from pet where id=1;

MySQL笔记

03_MySQL Day01 一、数据库(DataBase DB) 1、数据库:存储数据的仓库 2、数据库分类: (1)关系型数据库:二维表存储数据(Mysql,SQLServer,Orcale,DB2等) (2)非关系型数据库(Nosql):MongDB等 3、Mysql安装 (1)window:配置文件my.ini 进入命令行开始--运行--cmd (2)Linux:配置文件:/etc/https://www.360docs.net/doc/372335791.html,f 终端 mysql -uroot -p 说明: Mysql 数据库的存储位置 /var/lib/mysql 4、Mysql登录 mysql -u用户名-p密码[-P3306] [-D数据库名称] 5、Mysql退出 quit exit \q 6、Mysql注释 -- 注释 # 注释 7、修改提示符(Prompt) (1)进入MySQL的命令 prompt 提示符名称 (2)登录MySQL写的命令 mysql -uroot -p --prompt=提示符名称 说明: a.恢复提示符prompt mysql> b.特殊符号 \h 主机名称 \D 系统时间日期 \d 选择数据库名称 8、SQL(Structured Query Language)结构化查询语句 (1)DDL(数据创建语言):创建数据库,创建表、创建视图等

CREATE(创建),DROP(删除),ALTER(修改) (2)DML(数据操作语言):对数据库的数据的增,删,改 INSERT(添加),DELETE(删除),UPDATE(改) (3)DQL(数据查询语言):对数据库的数据查询 SELECT(查询) (4)DCL(数据库控制语言):分配(GRANT)用户权限 及权限(REVOKE)撤销 9、SQL命令行规范 a.系统命令大写,名称小写 b.SQL命令行以分号结束或\g 说明:结束分隔符可以用delimiter 符号名称 c.SQL命令行支持折行,但不能在函数,名称,引号中不能折行 d.SQL命令中的名称不能用关键字和保留字,如果使用必须用反引号``括起来,例如`user` 10、创建数据库(DDL) (1)查看数据库 SHOW DATABASES; (2)创建数据库 CREATE DATABASE [IF NOT EXISTS] 数据库名称[[DEFAULT] CHARACTER SET [=] 编码]; (3)查看创建数据库命令 SHOW CREATE DATABASE 数据库名称; (4)删除数据库 DROP DATABASE [IF EXISTS] 数据库名称; (5)修改数据库的编码 ALTER DATABASE 数据库名称 [DEFAULT] CHARACTER SET [=]编码; (6)选择数据库 USE 数据库名称; (7)查看当前选择的数据库 SELECT DATABASE(); 11、创建数据库中的表 (1)查看表 SHOW TABLES; (2)创建表结构 CREATE TABLE [IF NOT EXISTS] 表名( 字段(Field)名称|列名称数据类型[字段属性|约束条件], 字段(Field)名称|列名称数据类型[字段属性|约束条件] ... )[ENGINE=InnoDB DEFAULT CHARSET=utf8]; 说明:数据库最小单位是表,一定是先有表结构 再添加数据

MySQL查询语句大全集锦(经典珍藏)

ibSQL查询语句大全集锦 MYSQL查询语句大全集锦 1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2、创建一个数据库MYSQLDATA mysql> CREATE DATABASE MYSQLDATA; 3:选择你所创建的数据库 mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!) 4:查看现在的数据库中存在什么表 mysql> SHOW TABLES; 5:创建一个数据库表 mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1)); 6:显示表的结构: mysql> DESCRIBE MYTABLE; 7:往表中加入记录 mysql> insert into MYTABLE values (”hyq”,”M”); 8:用文本方式将数据装入数据库表中(例如D:/mysql.txt) mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE MYTABLE; 9:导入.sql文件命令(例如D:/mysql.sql) mysql>use database; mysql>source d:/mysql.sql; 10:删除表 mysql>drop TABLE MYTABLE; 11:清空表 mysql>delete from MYTABLE;

12:更新表中数据 mysql>update MYTABLE set sex=”f” where name=’hyq’; 以下是无意中在网络看到的使用MySql的管理心得, 在windows中MySql以服务形式存在,在使用前应确保此服务已经启动,未启动可用net start mysql命令启动。而Linux中启动时可用“/etc/rc.d/init.d/mysqld start”命令,注意启动者应具有管理员权限。 刚安装好的MySql包含一个含空密码的root帐户和一个匿名帐户,这是很大的安全隐患,对于一些重要的应用我们应将安全性尽可能提高,在这里应把匿名帐户删除、 root帐户设置密码,可用如下命令进行: use mysql; delete from User where User=”"; update User set Password=PASSWORD(’newpassword’) where User=’root’; 如果要对用户所用的登录终端进行限制,可以更新User表中相应用户的Host字段,在进行了以上更改后应重新启动数据库服务,此时登录时可用如下类似命令: mysql -uroot -p; mysql -uroot -pnewpassword; mysql mydb -uroot -p; mysql mydb -uroot -pnewpassword; 上面命令参数是常用参数的一部分,详细情况可参考文档。此处的mydb是要登录的数据库的名称。 在进行开发和实际应用中,用户不应该只用root用户进行连接数据库,虽然使用root用户进行测试时很方便,但会给系统带来重大安全隐患,也不利于管理技术的提高。我们给一个应用中使用的用户赋予最恰当的数据库权限。如一个只进行数据插入的用户不应赋予其删除数据的权限。MySql的用户管理是通过 User表来实现的,添加新用户常用的方法有两

Mysql 自学笔记

Mysql 自学笔记 前言 综述: 磁盘搜索。需要花时间从磁盘上找到一个数据,用在现代磁盘的平均时间通常小于10ms,因此理论上我们能够每秒大约搜索1000次。 这个时间在新磁盘上提高不大并且很难为一个表进行优化。优化它的方法是将数据分布在多个磁盘上。 磁盘读/写。当磁盘放入正确位置后,我们需要从中读取数据。对于现代的磁盘,一个磁盘至少传输10-20Mb/s的吞吐。这比搜索要容易优化, 因为你能从多个磁盘并行地读。 CPU周期。我们将数据读入内存后,需要对它进行处理以获得我们需要的结果。表相对于内存较小是最常见的限制因素。但是对于小表, 速度通常不成问题。 ·内存带宽。当CPU需要的数据超出CPU缓存时,主缓存带宽就成为内存的一个瓶颈。这在大多数系统正是一个不常见的瓶颈但是你应该知道它。 一. MySQL设计局限与折衷 1. 如果向列内插入不合适的或超出范围的值,MySQL将该列设定为“最好的可能的值”,而不是报告错误。对于数字值,为0、可能的最小值或最大值。 对于字符串,为空字符串或列内可以保存的字符串。请注意当运行在严格模式或TRADITIONAL SQL模式时该行为不适用。当然这仅仅是在严格的模式下, 包括TRADITIONAL SQL 模式,必须为not null 指定默认值。 二。可移植性 如果你使用某个数据库特定的功能(例如MySQL专用的REPLACE语句),应该为SQL 服务器编码一个方法以实现同样的功能。尽管慢些, 但确允许其它服务器执行同样的任务。 用MySQL,可以使用/*! */语法把MySQL特定的关键词加到查询中。在/**/中的代码将被其它大多数SQL服务器视为注释(并被忽略)。 三。优化SELECT 查询 1.影响所有语句的一个因素是:你的许可设置得越复杂,所需要的开销越多。 执行GRANT语句时使用简单的许可,当客户执行语句时,可以使MySQL降低许可检查开销。例如,如果未授予任何表级或列级权限, 服务器不需要检查tables_priv和columns_priv表的内容。同样地,如果不对任何账户进行限制,服务器不需要对资源进行统计。 如果查询量很高,可以花一些时间使用简化的授权结构来降低许可检查开销。 2.如果你的问题是与具体MySQL表达式或函数有关,可以使用mysql客户程序所带的BENCHMARK()函数执行定时测试。 其语法为BENCHMARK(loop_count,expression)。例如:

相关文档
最新文档