在线
客服

在线客服
尊敬的客户,我们24小时竭诚为您服务 公司总机: 0755-83312037 (32条线)

客服
热线

0755-83312037 (32条线)
7*24小时客服服务热线

?

关注
微信

关注官方微信

返回
顶部

18

2020-05
静态网站制作基础知识(3)

入门 现在能够单独创建出一个简单的页面,页面可以包含各样文本,并且对其进行排列,使用水平线和换行达到像文章一样的效果。 仅仅只是文本文档而已,没有超链接,图片等,也只有单一-的阅读功能,并且,可能不会适配移动设备。 开始学习一些实用性标签,拥有这些,才能称之为一个网站。 图像标签 链接一张图片到网页上,可以对网页进行一些简要性的说明,或是网站Logo,也可以是某些演示图片,这些都并非是文字可用于描述 的,视觉往往比说的有用。 那么如何链接一-张图片呢? 采用图像标签即可,其用法很简单,常用属性只有五个,我建议全部进行使用,因为可以很好的约束图片, 并且也遵守规范。 为什么要在标签内定义宽高而不是使用CSS呢? 原因是,这关于浏览器的渲染机制,如果定义在标签内,将得到更好的速度,因为浏览器的渲染顺序如下: 标签内的属性--> CSS样式-->图片原有大小。 <img src="图像地址" alt= "替代文本" title="鼠标悬浮提示文本" width= "图片宽度" hight="图片高度" /> 注意:在XHTML中,图像标签(img) 必须被正确的结束,在HTML中,它是一个单标签,无需结束。 XHTML示例: <img属性="值" ...</..> 如果你不想使用五个属性,可以根据需要进行删减,但必要的两个属性: src、 alt不能被删除。 进行实践。 注:图像地址可以是本机的绝对路径或是相对路径,例如: D:/图片.png,当然根据规范,图片的命名建议使用英文。 图片宽度或是高度采用的单位最好为像素,示例: width= " 500px" height= "500px" 同样,图像地址可引|用网络中的图片,例如: https://ss3.bdstatic.com/70cFv8Sh_ Q1 YnxGkpoWK1HF6hhy/it/u= 3615363367 ,3948742828&fm=27&gp=0.jpg W3CSchool参考: http://www.w3school.com.cn/tags/tag_ img.asp 超链接标签 超链接指的是,当鼠标单击该标签时,会跳转到指定的界面,或是跳转到某个锚点(具体参照HTML总结“锚链接(未写)“)。 超链接标签也称之为a标签,它常用属性只有两种: href (被链接处)、target (目标窗口) <a href= "被链接的文档或是文件" target="目标窗口" >文本或图像</a> 其中,target属性值如下: _blank :浏览器总在新打开、未命名的窗C ]载入目标文档 _self :默认值,除非与<base>标签中的target属性一起进行使用, 否则笔无意义。 _parent: 此目标使文档载入父框架而非在当前窗口载入新的文档 _top :在窗口主体中载入被链接文档 franename:在指定框架载入目标文档 其余标签的使用后续将会不断完善。 在此之前,可以到此文永久更新地址进行查看: https://docs.q.com/doc/BpDiY30AEVnV2E5MEE4Eg8jQ0hi4zgOUUtYT1

Read more+

18

2020-05
静态网站制作基础知识(2)

主体:主要的展示平台 <body>标签的作用正是展示信息的平台。 各式各样的标签都能在其中大放异彩,标题标签,段落标签,图片标签,标签..... 每一个标签都需要成对出现,当然也有意外,因为它们天生如此。在后面介绍。 在此之前,我们先学习如何给文档进行注释,以此,我们在以后看到这些代码的时候,也能够知道当时我们的想法是怎样的。 注释标签 <!--注释内容--> 浏览器不会解析注释内容,因为对浏览器没有用处,相反,注释能给带给开发者帮助。 下面开始介绍各式标签,所有的网页都基于此搭建而成,一个完整的网站会存在样式表,它们能够美化网站,当然,样式表会在以后介 绍。 标题标签 <h1>-级标题</h1> 共六级,数值越大则标题大小越小,-个网页标准的做法是只出现-次- -级标签 ,它们是整个网页所需展示的重要摘要。 此标签不多做介绍,进行尝试,于<body>标签内。而非网页的头部标题,是不-样的。 段落标签 <p>总结起初写于2017年9月12号,是学习的经验,知识分享,当然其中也不乏有错,希望看这篇文章的道友能够多多指点,修改错误 的内容。</p> 段落标签用于载入一段文字,或是一篇文章, <p>标签会在前后创建一些空白以突出内容, 可以使用样式表美化它,当然,几乎所有的 标签都可以使用样式表进行美化。 值得注意的是,在源代码中,如果有换行符,浏览器会采用空格来替代它们,因此需要换行的话,需要在源代码的文章进行更改,采用 换行标签来替代源代码中的换行。 进行尝试,于<body>标签内。 字体样式标签 在前面我们学习了两种标签,分别是标题标签和段落标签,如果你没看到,可以看看之前的介绍以及内容。 字体样式标签可以对字体产生影响,从而达到突出字体,让其更为明显,可以很直观的看到。 主要的,且使用次数较多的样式标签如下: <em> <strong> <dfn> <code> <samp> <kbd> <cite> 实际上,这些标签都用于区分内容,以达到显要的,强调开发者所要表达的事物,比如某些关键字,引用的文章内容,或是重要的信 息。 作为简短的介绍,我在知名HTML教学网站上看到了这些标签的简介,因此,在此不多做标签介绍。 以上字体样式标签的简介网址: http://www.w3school.com.cn/tags/tag_ phrase_ elements.asp 特殊符号 有些符号作为HTML的语法符号,在网页实际中并不可见,因此,只能使用特定的转义符来显示它们。 在这里,我将写一-些常用的转 义符以达到读者可以理解其作用。 空格(&nbsp;) 大于号(&gt;) 小号(&lt;) 引号(&quot;) 版权符号(&copy;) 网页支持的转义符网址: http://www.w3school.com.cn/tags/html_ ref_ symbols.html 换行与水平线标签 一个标签可以使用样式表进行美化与设置,有时候当没有引用样式表的时候,可以使用这些实用性标签进行美化,这里就先介绍换行与 水平线标签。 你发现了没有呢?标题标签单独占用了一行,而有些标签则一个紧挨着一个。 实,标签分为两类,分别为:块级标签和行内标签(在CSS中,称之为块级元素以及行内元素)。 块级标签对于目前我们所学习的这些,并没有能力改变它.们.... .但我们能够改变行内标签。 <br />标签,该标签可以使行内标签进行换行,如果在行内标签前后各输入此标签,则该行内标签将成为伪块级标签,在用户看来,它 单独的占据了一行。 换行标签仅仅只是简单的开始新的一行,因此此标签是一个空标签, 并无需成对出现。 有时候我们需要区分上下文内容,但若使用换行标签会显得有些突出,过于猛烈了。因此,可以使用分隔线来区分它们。 <hr />标签,该标签可以在上下文中,产生一条水平线,以此来分隔、区分内容,例如标题和文章内容。其含义实际上是单词的缩写: 水平分隔线(horizontal rule) ; 实践 现在你掌握的知识其实已经能给制作一-些很简单的网页,且拥有可浏览性。 开始进行实践,来制作你的第二个网页。 网页源码: 实际上也可以在<p>标签内嵌套换行标签达到换行的目的,但也可以在在所需换行的时候,创建一个新的<p> 标签以展示内容。 第二个实践项目很简单吧?其实,前端并非我们所想象的那样复杂,只是我们在灌输式教育前丢失了小时的创意....

Read more+

18

2020-05
静态网站制作基础知识(1)

工具 不建议新手使用任何自动完成功能的编辑器作为新初使用,因为最终你会产生依赖性,离开工具就无法创作出所需要的网页效果了。 我在百度云盘分享了一款工具,针对于新手使用的,代码高亮显示 工欲善其事,必先利其器,先下载你的工具来开始验证在此文章所讨论的知识点以及部分总结。 链接: https://pan.baidu.com/s/ 1dFMWP5v密码: xbad 其实,工具只是帮助我们达到目的而已,你也可以使用记事本进行开发。 实用的学习参考网站在某种意义上来说,其实也算是一种工具。 W3CSchool : http://www.w3school.com.cn/index.html 这篇文章有很多资源将引|用W3CSchool的教程,并且该网站的学习资源也很优秀。 开始 你已经下载工具了吗? 那么开始吧。 HTML是互联网组成的必不可少的一种标记性语言,我们所浏览的网页大都基 于HTML所提供。任何人都可以学习HTML技术,这其实属 于前端的技术范畴。 HTML称为超文本标记语言,具体可以 上网进行搜索。 打开工具,或者在桌面上新建一个文件, 将其命名为index.html * .html其后辍名指的是HTML文件,可以使用任何浏览器打开此文件,这些浏览器会发挥文件的最大作用,而不是简简单单的文本文 档。 那么,如何编写HTML文件呢? 打开任一网站,点按键盘上的F12键,就可以看到其网站的源代码,观看代码并学习其实也是成长的一部分。 HTML5主要分为三部分(包括XHTML) 声明部分、头部(head)、主体 (body),其中,容器(html) 包裹着头部和主体。 XHTML有些版本区分大小写,并且XHTML可能会在未来的某一个时候被HTML 5所替代,所以本文章主要精力放在HTML 5的知识点上。 实践: 我们来逐步分析_上面的实践代码。 此行是网页声明,用于告诉浏览器该如何解析此文档时所使用的HTML或XHTML规范,通常HTML 5的声明格式一 般如此。而XHTML 的声明格式很繁杂,它有三种声明格式,我只写松散(Loose) 声明,其余使用搜索引擎进行完善。 transitional.dtd " > 其余部分在之前已经讲过,但head标签之内的那些是什么呢? 标签用于描述网页的摘要信息,包括文档内容类型,编码信息,搜索关键字,网站功能等,采用键值对的方式描述信息。 这行代码指示浏览器该以怎样的编码来解析文档,有时候出现中文乱码是因为解析文档所用的格式错误 了。 我们来逐步分析上面的实践代码。 此行是网页声明,用于告诉浏览器该如何解析此文档时所使用的HTML或XHTML规范,通常HTML 5的声明格式一 般如此。而XHTML的声明格式很繁杂,它有三种声明格式,我只写松散(Loose) 声明,其余使用搜索弓|擎进行完善。 transitional.dtd " > 其余部分在之前已经讲过,但head标签之内的那些是什么呢? 标签用于描述网页的摘要信息,包括文档内容类型,编码信息,搜索关键字,网站功能等,采用键值对的方式描述信息。 这行代码指示浏览器该以怎样的编码来解析文档,有时候出现中文乱码是因为解析文档所用的格式错误 了。 此标签具体参阅: 百度百科: https://baike.baidu.com/item/meta/4265710?fr= aladdin W3CSCHOOL: http://www.w3school.com.cn/tags/tag_ meta.asp 标签定义文档的标题,浏览器会以特殊的方式展示它,将其置于标签页上,收藏夹,书签等。<br /> <div><br /> </div>主体:主要的展示平台<br /> <body>标签的作用正是展示信息的平台。<br /> 各式各样的标签都能在其中大放异彩,标题标签,段落标签,图片标签,子标签.....<br /> 每一个标签都需要成对出现,当然也有意外,因为它们天生如此。在后面介绍。<br /> 在此之前,我们先学习如何给文档进行注释,以此,我们在以后看到这些代码的时候,也能够知道当时我们的想法是怎样的。<br /> 注释标签<br /> <!--注释内容--><br /> 浏览器不会解析注释内容,因为对浏览器没有用处,相反,注释能给带给开发者帮助。<br /> <p>下面开始介绍各式标签,所有的网页都基于此措建而成,-个完整的网站会存在样式表,它们能够美化网站,当然,样式表会在以后介绍。</p><p>标题标签<br /> <h1>-级标题</h1><br /> 共六级,数值越大则标题大小越小,-个网页标准的做法是只出现-次- -级标签 ,它们是整个网页所需展示的重要摘要。<br /> 此标签不多做介绍,进行尝试,于<body>标签内。而非网页的头部标题,不-样的。<br /> 段落标签<br /> <p>总结起初写于2017年9月12号,是学习的经验,知识分享,当然其中也不乏有错,希望看这篇文章的道友能够多多指点,修改错误<br /> 的内容。</p><br /> 段落标签用于载入一-段文字,或是一_篇文章,<p>标签会在前后创建一些空白以突出内容, 可以使用样式表美化它,当然,几乎所有的<br /> 标签都可以使用样式表进行美化。<br /> 值得注意的是,在源代码中,如果有换行符,浏览器会采用空格来替代它们,因此需要换行的话,需要在源代码的文章进行更改,采用<br /> 换行标签来替代源代码中的换行。<br /> 进行尝试,于<body>标签内。<br /> <div><br /> </div>字体样式标签<br /> 在前面我们学习了两种标签,分别是标题标签和段落标签,如果你没看到,可以看看之前的介绍以及内容。<br /> 字体样式标签可以对字体产生影响,从而达到突出字体,让其更为明显,可以很直观的看到。<br /> 主要的,且使用次数较多的样式标签如下:<br /> <em> <strong> <dfn> <code> <samp> <kbd> <cite><br /> 实际上,这些标签都用于区分内容,以达到显要的,强调开发者所要表达的事物,比如某些关键字,引用的文章内容,或是重要的信<br /> 息。<br /> 作为简短的介绍,我在知名HTML教学网站上看到了这些标签的简介,因此,在此不多做标签介绍。<br /> 以上字体样式标签的简介网址: http://www.w3school.com.cn/tags/tag_ phrase_ elements.asp<br /> <div><br /> </div>换行与水平线标签<br /> 一个标签可以使用样式表进行美化与设置,有时候当没有引用样式表的时候,可以使用这些实用性标签进行美化,这里就先介绍换行与<br /> 水平线标签。<br /> 你发现了没有呢?标题标签单独占用了一行,而有些标签则一个紧挨着一个。<br /> 其实,标签分为两类,分别为:块级标签和行内标签(在CSS中, 称之为块级元素以及行内元素)。<br /> 块级标签对于目前我们所学习的这些,并没有能力改变.们....但我们能够改变行内标签。<br /> <br />标签,该标签可以使行内标签进行换行,如果在行内标签前后各输入此标签,则该行内标签将成为伪块级标签,在用户看来,它<br /> 单独的占据了一行。<br /> 换行标签仅仅只是简单的开始新的一行,因此此标签是一个空标签, 并无需成对出现。<br /> 有时候我们需要区分上下文内容,但若使用换行标签会显得有些突出,过于猛烈了。因此,可以使用分隔线来区分它们。<br /> <hr />标签,该标签可以在上下文中,产生一条水平线, 以此来分隔、区分内容,例如标题和文章内容。其含义实际上是单词的缩写:<br /> 水平分隔线(horizontal rule) ;<br /> <div><br /> </div></p></p>

Read more+

11

2020-05
MySQL 同步复制及高可用方案总结

<p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">1.前言mysql作为应用程序的数据存储服务,要实现mysql数据库的高可用。必然要使用的技术就是数据库的复制,如果主节点出现故障可以手动的切换应用到从节点,这点相信运维同学都是知道,并且可以实现的。但是这种情况只是手动的切换,对可用性有要求的业务需要分别实现主</font> </td> </tr></tbody></table> 1.前言 mysql作为应用程序的数据存储服务,要实现mysql数据库的高可用。必然要使用的技术就是数据库的复制,如果主节点出现故障可以手动的切换应用到从节点,这点相信运维同学都是知道,并且可以实现的。但是这种情况只是手动的切换,对可用性有要求的业务需要分别实现主库和从库的高可用,保障在数据库出现down机的情况下,可以自动实现数据库的故障转移,保障应用的可用性和用户体验。 本文将会对一些常用的数据库高可用方案进行介绍,根据你不同的场景,选择合适的高可用方案即可。 2.MMM高可用方案 2.1.Mysql-MMM介绍 MMM(Master-Master replication managerfor Mysql,Mysql主主复制管理器)是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql Master-Master复制的配置(同一时间只有一个节点是可写的)。 2.2.组件 mmm_mond:监控进程,负责所有的监控工作,决定和处理所有节点角色活动。此脚本需要在监管机上运行。 mmm_agentd:运行在每个mysql服务器上的代理进程,完成监控的探针工作和执行简单的远端服务设置。此脚本需要在被监管机上运行。 mmm_control:一个简单的脚本,提供管理mmm_mond进程的命令。 mysql-mmm的监管端会提供多个虚拟IP(VIP),包括一个可写VIP,多个可读VIP,通过监管的管理,这些IP会绑定在可用mysql之上,当某一台mysql宕机时,监管会将VIP迁移至其他mysql。 在整个监管过程中,需要在mysql中添加相关授权用户,以便让mysql可以支持监理机的维护。授权的用户包括一个mmm_monitor用户和一个mmm_agent用户,如果想使用mmm的备份工具则还要添加一个mmm_tools用户。 2.3.架构图 正常工作时: 主节点故障时: 微信图片_20191015154036.png 2.4.MMM优点 (1)高可用性,扩展性好,出现故障自动转移,对于主主同步,在同一时间只提供一台数据库写操作,保证数据的一致性。 (2)配置简单,容易操作。 2.5.MMM缺点 (1)需要一台备份服务器,浪费资源 (2)需要多个虚拟IP (3)agent可能意外终止,引起裂脑。 3.MHA介绍 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。 3.1.MHA架构介绍 该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。 在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失(配合mysql半同步复制效果更佳),但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。 注意:目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。 3.2.MHA架构图 正常工作时架构图: 微信图片_20191015154220.png 主库down机时架构: 微信图片_20191015154249.png 3.3.故障转移过程 (1)从宕机崩溃的master保存二进制日志事件(binlog events); (2)识别含有最新更新的slave; (3)应用差异的中继日志(relay log)到其他的slave; (4)应用从master保存的二进制日志事件(binlog events); (5)提升一个slave为新的master; (6)使其他的slave连接新的master进行复制; (7)在新的master启动vip地址,保证前端请求可以发送到新的master。 3.4.MHA优点 (1)不需要备份服务器 (2)不改变现有环境 (3)操作非常简单 (4)可以进行日志的差异修复 (5)可以将任意slave提升为master 3.5.MHA缺点 (1)需要全部节点做ssh秘钥 (2)MHA出现故障后配置文件会被修改,如果再次故障转移需要重新修改配置文件。 (3)自带的脚本还需要进一步补充完善,且用perl开发,二次开发困难。 4.DRBD+(heartbeat,corosync) 4.1.方案简介 本方案采用Heartbeat或者corosync双机热备软件来保证数据库的高稳定性和连续性,数据的一致性由DRBD这个工具来保证(如果可以尽量放到分布式存储上面)。默认情况下只有一台mysql在工作,当主mysql服务器出现问题后,系统将自动切换到备机上继续提供服务,当主数据库修复完毕,又将服务切回继续由主mysql提供服务。 4.2.组件 Heartbeat,corosync作为心跳检测机制,监控primary节点的状态。当主节点宕掉之后,迅速提升secondary节点为新的主节点,并切换IP; drbd负责数据同步 4.3.架构图 微信图片_20191015154253.jpg 4.4.数据同步过程 mysql进行刷盘时,会通过不同的sync方式,最终将数据写入disk; drbd收到刷盘成功的信息后,将对应的磁盘块位置,和变更动作,通过网络传递至secondary节点; secondary的drbd接收到变更信息后,将这些信息落盘; 4.5.切换过程 前提:secondary节点的mysql服务不启动; heartbeat检测到primary的mysql服务停止,则摘掉IP、umount掉数据盘、将primary切换为secondary; 在原来的secondary上,提升drbd同步为primary,挂载数据盘,启动mysql服务、绑定IP; 从库跟着IP和端口自动进行迁移; 4.6.方案优点 (1)历史悠久、安全性高、稳定性高、可用性高、出现故障自动切换。 (2)数据一致性强 4.7.方案缺点 (1)需要一台备份服务器,浪费资源 (2)不方便扩展 (3)无论drbd还是headbetart,corosync都可能发生裂脑 5.Mysql route介绍 5.1.什么是mysql route MySQL Router是处于应用client和dbserver之间的轻量级代理程序,它能检测,分析和转发查询到后端数据库实例,并把结果返回给client。是mysql-proxy的一个替代品。其架构图和功能如下。 微信图片_20191015154257.png (1)Router实现读写分离,程序不是直接连接数据库IP,而是固定连接到mysql router。MySQL Router对前端应用是透明的。应用程序把MySQL Router当作是普通的mysql实例,把查询发给MySQL Router,而MySQL Router会把查询结果返回给前端的应用程序。 (2)从数据库服务器故障,业务可以正常运行。由MySQL Router来进行自动下线不可用服务器。程序配置不需要任何修改。 (3)主数据库故障,由MySQL Router来决定主从自动切换,业务可以正常访问。程序配置不需要做任何修改。 5.2.读写分离原理 MySQL Router接受前端应用程序请求后,根据不同的端口来区分读写,把连接读写端口的所有查询发往主库,把连接只读端口的select查询以轮询方式发往多个从库,从而实现读写分离的目的。读写返回的结果会交给MySQL Router,由MySQL Router返回给客户端的应用程序。 5.3.Mysql router用途 MySQL Router的主要用途是读写分离,主主故障自动切换,负载均衡,连接池等。 5.4.Mysql router主主故障自动切换的坑 Mysql router主主故障切换功能经过测试没有问题,但是有一个比较大的坑需要注意,主库发生切换之后,从库的连接的master服务器地址不会发生改变,需要自己写脚本进行判断。 5.5.优点 (1)基于DAL层实现mysql的高可用。 (2)可以同时实现主主故障切换和读写分离。 (3)插件式架构允许用户进行额外的功能扩展。 5.6.缺点 (1)高可用功能需要进一步完善:存在主库切换之后,从库不会自动切换主库地址的坑。 (2)读写情况使用不同端口,需要修改应用程序。 6.mysql Cluster 国内用的非常少,主要因为一下三点: (1)需要更改存储引擎 (2)付费 (3)国内几乎没有使用案例 优点: 高可用,可用率达99.999% 6.1.结束语 上面的高可用方案,只是我自己比较熟悉的,而且也是应用比较多的。mysql毕竟发展了有20多年了,各种高可用方案还是很多的,其他的高可用方案各位钥匙有兴趣,可以自己研究。 版权申明:作者:西门飞冰,一名90后it男,一直在北京工作,热爱运动,热爱冒险,热爱旅行。由作者原创投稿,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意,谢谢。 关注 民工哥技术之路 微信公众号对话框回复关键字:1024 可以获取一份最新整理的技术干货:包括系统运维、数据库、redis、MogoDB、电子书、Java基础课程、Java实战项目、架构师综合教程、架构师实战项目、大数据、Docker容器、ELK Stack、机器学习、BAT面试精讲视频等。

Read more+

11

2020-05
MySQL数据库基础篇之入门基础命令

<p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">在日常工作与学习中,无论是开发、运维、还是测试,对于数据库的学习是不可避免的,同时也是日常工作的必备技术之一。在互联网公司,开源产品线比较多,互联网企业所用的数据库占比较重的还是MySQL。在刚刚出炉的 2019 年3月份数据库流行度排行榜上,第一梯队的前三个数</font> </td> </tr></tbody></table> 在日常工作与学习中,无论是开发、运维、还是测试,对于<a href="http://www.webjx.com/database/"><u>数据库</u></a>的学习是不可避免的,同时也是日常工作的必备技术之一。在互联网公司,开源产品线比较多,互联网企业所用的<a href="http://www.webjx.com/database/"><u>数据库</u></a>占比较重的还是MySQL。 在刚刚出炉的 2019 年3月份<a href="http://www.webjx.com/database/"><u>数据库</u></a>流行度排行榜上,第一梯队的前三个<a href="http://www.webjx.com/database/"><u>数据库</u></a>产品都获得了显著的加分增长。 其中 Oracle 上升了15.12分,MySQL上升了30.96分,SQL Server则上升了 7.79分。以下是前20位的<a href="http://www.webjx.com/database/"><u>数据库</u></a>榜单: 所以,民工哥,将公众号所推送的MySQL<a href="http://www.webjx.com/database/"><u>数据库</u></a>的文章,统一整理做成一个学习进阶的集合,在此分享给各位读者。各位读者朋友觉得文章对你在学习MySQL<a href="http://www.webjx.com/database/"><u>数据库</u></a>的路上有所帮助,请动动小手转发分享出去。让更多的小伙伴们一起参与学习,大家共同成长,一起奔跑在技术的路上。 有需要加入民工哥组建的技术交流群的读者朋友们,可在公众号后台回复:「加群」 数据――公司的生命线,因此在大多数的互联网公司,都在使用开源的<a href="http://www.webjx.com/database/"><u>数据库</u></a>产品,MySQL也因此关注度与使用率非常的高,所以做为运维的

Read more+

11

2020-05
MySQL数据库入门多实例配置

<p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">前面介绍了相关的基础命令操作:MySQL数据库基础篇之入门基础命令所有的操作都是基于单实例的,mysql多实例在实际生产环境也是非常实用的,因为必须要掌握。1、什么是多实例多实例就是一台服务器上开启多个不同的服务端口(默认3306),运行多个mysql的服务进程,这此服</font> </td> </tr></tbody></table> 前面介绍了相关的基础命令操作:MySQL<a href="http://www.webjx.com/database/"><u>数据库</u></a>基础篇之入门基础命令 所有的操作都是基于单实例的,mysql多实例在实际生产环境也是非常实用的,因为必须要掌握。 1、什么是多实例 多实例就是一台服务器上开启多个不同的服务端口(默认3306),运行多个mysql的服务进程,这此服务进程通过不同的socket监听不同的服务端口来提供各在的服务,所有实例之间共同使用一套MYSQL的安装程序,但各自使用不同的配置文件、启动程序、数据文件,在逻辑上是相对独立的。 多实例主要作用是:充分利用现有的服务器硬件资源,为不同的服务提供数据服务,但是如果某个实例并发比较高的,同样是会影响到其它实例的性能 2、安装多实例环境准备 安装前需要先安装mysql,但是只需将安装过程进行到make install即可(编译安装),如果使用免安装程序,只需解压软件包即可,今天的环境是通过免安装包来安装mysql主程序(其它的安装可以参考前面的安装过程自行测试) 系统环境 [root@centos6 ~]# cat /etc/redhat-release CentOS release 6.5 (Final) [root@centos6 ~]# uname -r 2.6.32-431.el6.x86_64 安装程序 mysql-5.5.52-linux2.6-x86_64.tar.gz 首先将软件下载到本地 wget http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.52-linux2.6-x86_64.tar.gz 创建安装用户 [root@centos6 ~]#groupadd mysql [root@centos6 ~]#useradd mysql -s /sbin/nologin -g mysql -M [root@centos6 ~]#tail -1 /etc/passwd mysql:x:500:500::/home/mysql:/sbin/nologin 创建多实例的数据目录 [root@centos6 tools]# mkdir -p /data/{3306,3307} [root@centos6 tools]# tree /data/ /data/ +-- 3306 +-- 3307 2 directories, 0 files 3、安装MYSQL多实例 接下来进行安装mysql的多实例操作 解压软件 [root@centos6 tools]# ll mysql-5.5.52-linux2.6-x86_64.tar.gz -rw-r--r--. 1 root root 185855000 Aug 26 21:38 mysql-5.5.52-linux2.6-x86_64.tar.gz [root@centos6 tools]# tar zxf mysql-5.5.52-linux2.6-x86_64.tar.gz 拷贝配置文件 [root@centos6 mysql-5.5.52-linux2.6-x86_64]# cp support-files/my-small.cnf /data/3306/my.cnf [root@centos6 mysql-5.5.52-linux2.6-x86_64]# cp support-files/mysql.server /data/3306/mysql [root@centos6 mysql-5.5.52-linux2.6-x86_64]# cp support-files/my-small.cnf /data/3307/my.cnf [root@centos6 mysql-5.5.52-linux2.6-x86_64]# cp support-files/mysql.server /data/3307/mysql 为一规范安装路径,将免安装包拷贝到应用程序目录下 [root@centos6 tools]# mv mysql-5.5.52-linux2.6-x86_64 /application/mysql [root@centos6 tools]# ll /application/mysql total 72 drwxr-xr-x. 2 root root 4096 Dec 9 17:15 bin -rw-r--r--. 1 7161 31415 17987 Aug 26 19:24 COPYING drwxr-xr-x. 3 root root 4096 Dec 9 17:15 data drwxr-xr-x. 2 root root 4096 Dec 9 17:15 docs drwxr-xr-x. 3 root root 4096 Dec 9 17:15 include -rw-r--r--. 1 7161 31415 301 Aug 26 19:24 INSTALL-BINARY drwxr-xr-x. 3 root root 4096 Dec 9 17:15 lib drwxr-xr-x. 4 root root 4096 Dec 9 17:15 man drwxr-xr-x. 10 root root 4096 Dec 9 17:15 mysql-test -rw-r--r--. 1 7161 31415 2496 Aug 26 19:24 README drwxr-xr-x. 2 root root 4096 Dec 9 17:15 scripts drwxr-xr-x. 27 root root 4096 Dec 9 17:15 share drwxr-xr-x. 4 root root 4096 Dec 9 17:15 sql-bench drwxr-xr-x. 2 root root 4096 Dec 9 17:15 support-files 修改配置文件与启动文件 因为是多实例,其中参数需要修改,修改后的配置文件如下:配置文件my.cnf [client] port = 3307 socket = /data/3307/mysql.sock [mysql] no-auto-rehash [mysqld] user = mysql port = 3307 socket = /data/3307/mysql.sock basedir = /application/mysql datadir = /data/3307/data #log_long_format #log-error = /data/3307/error.log #log-slow-queries = /data/3307/slow.log pid-file = /data/3307/mysql.pid server-id = 3 [mysqld_safe] log-error=/data/3307/mysql3307.err pid-file=/data/3307/mysqld.pid 启动程序文件mysql [root@backup 3307]# cat mysql #!/bin/sh init port=3307 mysql_user="root" mysql_pwd="migongge" CmdPath="/application/mysql/bin" mysql_sock="/data/${port}/mysql.sock" #startup function_start_mysql() { if [ ! -e "$mysql_sock" ];then printf "Starting MySQL...\n" /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2&gt;&amp;1 &gt; /dev/null &amp; else printf "MySQL is running...\n" exit fi } #stop function function_stop_mysql() { if [ ! -e "$mysql_sock" ];then printf "MySQL is stopped...\n" exit else printf "Stoping MySQL...\n" ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown fi } #restart function function_restart_mysql() { printf "Restarting MySQL...\n" function_stop_mysql sleep 2 function_start_mysql } case $1 in start) function_start_mysql ;; stop) function_stop_mysql ;; restart) function_restart_mysql ;; *) printf "Usage: /data/${port}/mysql {start|stop|restart}\n" esac 其它的配置可参考配置文件进行修改即可 多实例初始化操作 [root@centos6 3306]# /application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/data/3306/data --user=mysql Installing MySQL system tables... 161209 18:02:17 [Warning] 'THREAD_CONCURRENCY' is deprecated and will be removed in a future release. 161209 18:02:17 [Note] /application/mysql/bin/mysqld (mysqld 5.5.52-log) starting as process 3336 ... OK Filling help tables... 161209 18:02:17 [Warning] 'THREAD_CONCURRENCY' is deprecated and will be removed in a future release. 161209 18:02:17 [Note] /application/mysql/bin/mysqld (mysqld 5.5.52-log) starting as process 3343 ... OK To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: /application/mysql/bin/mysqladmin -u root password 'new-password' /application/mysql/bin/mysqladmin -u root -h centos6 password 'new-password' Alternatively you can run: /application/mysql/bin/mysql_secure_installation which will also give you the option of removing the test databases and anonymous user created by default. This is strongly recommended for production servers. See the manual for more instructions. You can start the MySQL daemon with: cd /application/mysql ; /application/mysql/bin/mysqld_safe &amp; You can test the MySQL daemon with mysql-test-run.pl cd /application/mysql/mysql-test ; perl mysql-test-run.pl Please report any problems at http://bugs.mysql.com/ 初始化成功后,会在数据目录下产生一个数据目录data和一些文件 [root@centos6 3306]# ll /data/3306/data/ total 1136 drwx------. 2 mysql root 4096 Dec 9 18:02 mysql -rw-rw----. 1 mysql mysql 27693 Dec 9 18:02 mysql-bin.000001 -rw-rw----. 1 mysql mysql 1114546 Dec 9 18:02 mysql-bin.000002 -rw-rw----. 1 mysql mysql 38 Dec 9 18:02 mysql-bin.index drwx------. 2 mysql mysql 4096 Dec 9 18:02 performance_schema drwx------. 2 mysql root 4096 Dec 9 18:02 test 另一个实例的初始化请参考上述操作进行,操作过程不再一一介绍 [root@centos6 3307]# ll /data/3307/data/ total 1136 drwx------. 2 mysql root 4096 Dec 9 18:40 mysql -rw-rw----. 1 mysql mysql 27693 Dec 9 18:40 mysql-bin.000001 -rw-rw----. 1 mysql mysql 1114546 Dec 9 18:40 mysql-bin.000002 -rw-rw----. 1 mysql mysql 38 Dec 9 18:40 mysql-bin.index drwx------. 2 mysql mysql 4096 Dec 9 18:40 performance_schema drwx------. 2 mysql root 4096 Dec 9 18:40 test 4 、启动多实例并登录 启动服务 [root@backup 3307]# /data/3306/mysql start Starting MySQL... [root@backup 3307]# lsof -i :3306 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 19986 mysql 10u IPv4 90967 0t0 TCP *:mysql (LISTEN) [root@backup 3307]# /data/3307/mysql start Starting MySQL... [root@backup 3307]# lsof -i :3307 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 21648 mysql 11u IPv4 92899 0t0 TCP *:opsession-prxy (LISTEN) 检查端口 [root@backup 3307]# netstat -lntup|grep mysql tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 21648/mysqld tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 19986/mysqld 登陆多实例<a href="http://www.webjx.com/database/"><u>数据库</u></a> [root@backup ~]# mysql -S /data/3306/mysql.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.51-log Source distribution Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql&gt; create database data3306; Query OK, 1 row affected (0.00 sec) mysql&gt; show databases; +--------------------+ | Database | +--------------------+ | information_schema | | data3306 | | mysql | | performance_schema | | test | +--------------------+ 5 rows in set (0.00 sec) mysql&gt; quit Bye [root@backup ~]# mysql -S /data/3307/mysql.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.51 Source distribution Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql&gt; show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.05 sec) 成功登陆,并在3306实例中创建<a href="http://www.webjx.com/database/"><u>数据库</u></a>,但是3307实例上查看并没有创建过的数据,说明两个实例是独立的 注:如果再需要新增一个实例,基本的配置步骤同上述一样,只需要相应修改配置文件与启动程序文件中的端口号与数据目录的路径即可,最后可以将多实例<a href="http://www.webjx.com/database/"><u>数据库</u></a>启动命令加入开机自启动。 更多关于Mysql相关技术文章,请持续关注民工哥技术之路。如需要关注更多其它技术方向的文章,也可以关注民工哥的个人微信公众号:民工哥技术之路,关注 民工哥技术之路 微信公众号对话框回复关键字:1024 可以获取一份最新整理的技术干货:包括系统运维、<a href="http://www.webjx.com/database/"><u>数据库</u></a>、redis、MogoDB、电子书、Java基础课程、Java实战项目、架构师综合教程、架构师实战项目、大数据、Docker容器、ELK Stack、机器学习、BAT面试精讲视频等。

Read more+

13

2019-04
Mysql数据库名和表名在不同系统下的大小写敏感问题

<p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">Mysql数据库名和表名的大小写敏感性问题.</font> </td> </tr></tbody></table> <p>在 MySQL 中,数据库和表对应于那些目录下的目录和文件。因而,操作系统的敏感性决定数据库和表命名的大小写敏感。这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix 系统中是大小写敏感的。一个特例是 Mac OS X,当缺省的 HFS+ 文件系统使用时。然而 Mac OS X 还支持 UFS 卷,那些在 Mac OS X 是大小写敏感的就如他们在任一 Unix 上一样。查看章节 1.8.3 MySQL 对 ANSI SQL92 的扩展。 </p> <p>注意:尽管在 Windows 中数据库与表名是忽略大小写的,你不应该在同一个查询中使用不同的大小写来引用一个给定的数据库和表。下面的查询将不能工作,因为它以 my_table 和 MY_TABLE 引用一个表: </p> <p>mysql&gt; SELECT * FROM my_table WHERE MY_TABLE.col=1; </p> <p>列名与列的别名在所有的情况下均是忽略大小写的。 </p> <p>表的别名是区分大小写的。下面的查询将不能工作,因为它用 a 和 A 引用别名: </p> <p>mysql&gt; SELECT col_name FROM tbl_name AS a WHERE a.col_name = 1 OR A.col_name = 2; </p> <p>如果记忆数据库和表名的字母大小写有困难,建议采用一个一致一约定,例如总是以小写字母创建数据库和表。 </p> <p>避免这个问题的另一个办法就是以 -O lower_case_table_names=1 参数启动 mysqld。缺省地在 Windows 中这个选项为 1 ,在 Unix 中为 0。 </p> <p>如果 lower_case_table_names 为 1 ,MySQL 将在存储与查找时将所有的表名转换为小写字线。(从 MySQL 4.0.2 开始,这个选项同样适用于数据库名。) 注意,当你更改这个选项时,你必须在启动 mysqld 前首先将老的表名转换为小写字母。 </p> <p>$ pwd </p> <p>/data1/etl/aiinsight/ScheduleServer/mysql/support-files </p> <p>$ ./mysql.server stop </p> <p>$ pwd </p> <p>/data1/etl/aiinsight/ScheduleServer/mysql/bin </p> <p>./mysqld_safe --lower_case_table_names </p> <p>方法2:修改my.cnf配置文件 </p> <p>在[mysqld]节下加入 </p> <p>lower_case_table_names=1 </p>

Read more+

13

2019-04
mysql全文搜索:sql的写法

<p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">MySQL数据库对dvbbs.php全文搜索的完全分析.</font> </td> </tr></tbody></table> <p>首先,大家先去下载一份dvbbs.php beta1的代码,解压后先抛开php代码,找出你的mysql手册,如果没有手册那么就直接看下面的实例操作吧! </p> <p>mysql全文搜索,sql的写法: </p> <p>MATCH (col1,col2,…) AGAINST (expr [IN BOOLEAN MODE | WITH QUERY EXPANSION]) </p> <p>比如: </p> <p>SELECT * FROM articles WHERE MATCH (title,body) AGAINST (’database’); </p> <p>MATCH()函数对于一个字符串执行资料库内的自然语言搜索。一个资料库就是1套1个或2个包含在FULLTEXT内的列。搜索字符串作为对 AGAINST()的参数而被给定。对于表中的每一行, MATCH() 返回一个相关值,即, 搜索字符串和 MATCH()表中指定列中该行文字之间的一个相似性度量。 </p> <p>下面的例子则更加复杂。询问返回相关值,同时对行按照相关性渐弱的顺序进行排序。为实现这个结果,你应该两次指定 MATCH(): 一次在 SELECT 列表中而另一次在 WHERE子句中。这不会引起额外的内务操作,原因是MySQL 优化程序注意到两个MATCH()调用是相同的,从而只会激活一次全文搜索代码。 </p> <p> </p> <table style="BORDER-BOTTOM: #0099cc 1px solid; BORDER-LEFT: #0099cc 1px solid; TABLE-LAYOUT: fixed; BORDER-TOP: #0099cc 1px solid; BORDER-RIGHT: #0099cc 1px solid" border="0" cellspacing="0" cellpadding="6" width="95%" align="center"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#ddedfb"> <p><font color="#ff0000">以下为引用的内容:</font></p> <p>mysql&gt; SELECT id, body, MATCH <br>(title,body) AGAINST<br>-&gt; (’Security implications of <br>running MySQL as root’) AS score<br>-&gt; FROM articles WHERE MATCH <br>(title,body) AGAINST<br>-&gt; (’Security implications of <br>running MySQL as root’);</p> </td> </tr></tbody></table> <p>所以,到这里你应该会mysql 英文全文搜索了. </p> <p>请注意一个问题. </p> <p>一些词在全文搜索中会被忽略: </p> <p>* 任何过于短的词都会被忽略。 全文搜索所能找到的词的默认最小长度为 4个字符。 </p> <p>* 停止字中的词会被忽略。 </p> <p>mysql还自带查询扩展功能.这里不做过多讨论. </p> <p>下面进行php中文全文搜索的分析 </p> <p>曾经有一个版本的mysql支持中文全文搜索(海量 mysql chinese+,说是GPL但是最终没有开源) </p> <p>中文全文搜索的关键是在分词上.mysql本身不支持cjk的分词(cjk:chinese,japanese,korean), </p> <p>所以 </p> <p>!!!!****如何用php模拟分词是mysql全文索引的关键****!!!! </p> <p>中文分词是语言分词中最困难的.现在也没有人能够彻底完美的解决(虽然这些搜索引擎做的都还不错.) </p> <p> </p> <table style="BORDER-BOTTOM: #0099cc 1px solid; BORDER-LEFT: #0099cc 1px solid; TABLE-LAYOUT: fixed; BORDER-TOP: #0099cc 1px solid; BORDER-RIGHT: #0099cc 1px solid" border="0" cellspacing="0" cellpadding="6" width="95%" align="center"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#ddedfb"> <p><font color="#ff0000">以下为引用的内容:</font></p> <p>//fcicq:下面给大家看看这里php的分词是怎么做的.<br>function &amp;DV_ChineseWordSegment($str,$encodingName=’gbk’){</p> <p>static $objEnc = null;</p> <p>if( $objEnc === null ){</p> <p>if( !class_exists(’DV_Encoding’) ){</p> <p>require_once ROOT_PATH.’inc/DV_Encoding.class.php’;</p> <p>}</p> <p>$objEnc =&amp; DV_Encoding::GetEncoding($encodingName);</p> <p>}</p> <p>$strLen = $objEnc-&gt;StrLength($str);</p> <p>$returnVal = array();</p> <p>if( $strLen &lt; = 1 ){</p> <p>return $str;</p> <p>}</p> <p>$arrStopWords =&amp; DV_GetStopWordList();</p> <p>//print_r($arrStopWords);</p> <p>//过滤所有HTML标签</p> <p>$str = preg_replace('#&lt;[a-zA-Z]+?.*?&gt;|#is’, ”, $str);</p> <p>//过滤所有stopword</p> <p>$str = str_replace($arrStopWords[’StrRepl’],’ ‘,$str);</p> <p>$str = preg_replace($arrStopWords[’PregRepl’],’ ‘,$str);</p> <p>//echo “$str:{$str}<br>“;</p> <p>$arr = explode(’ ‘,$str);</p> <p>//fcicq:好了,这下面的才是php分词关键 *************<br>foreach( $arr as $tmpStr ){</p> <p>if ( preg_match(”/^[x00-x7f]+$/i”,$tmpStr) === 1 ) <br>{ //fcicq:全是E文,没关系,mysql可以认识的</p> <p>$returnVal[] = ‘ ‘.$tmpStr;</p> <p>} else{ //fcicq:中英混合…</p> <p>preg_match_all(”/([a-zA-Z]+)/i”, $tmpStr, $matches);</p> <p>if( !empty($matches) ){ //fcicq:英语部分</p> <p>foreach( $matches[0] as $matche ){</p> <p>$returnVal[] = $matche;</p> <p>}</p> <p>}</p> <p>//过滤ASCII字符</p> <p>$tmpStr = preg_replace(”/([x00-x7f]+)/i”, ”<br>, $tmpStr); //fcicq:你看,剩下的不就全是中文了?</p> <p>$strLen = $objEnc-&gt;StrLength($tmpStr)-1;</p> <p>for( $i = 0 ; $i &lt; $strLen ; $i++ ){</p> <p>$returnVal[] = $objEnc-&gt;SubString($tmpStr,$i,2)<br>; //fcicq:注意这里的substr,不是手册上的.<br>//fcicq:你仔细看,所有的词都是分成两个.<br>//比如”数据库的应用”,会被分成数据 据库 库的 的应 应用…<br>//全文搜索: 全文 文搜 搜索<br>//这分词自然是不怎么样的<br>//但是,搜索的时候同样这么做.<br>//比如搜索数据库,就相当于搜索了数据 据库.<br>//这是一种相当传统的全文搜索分词方法.</p> <p>}</p> <p>}</p> <p>}</p> <p>return $returnVal;</p> <p>}//end function DV_ChineseWordSegment</p> <p>//fcicq:这就是传说中的substr.偶相信许多人写出来的php代码都比这个好.<br>function &amp;SubString(&amp;$str,$start,$length=null){</p> <p>if( !is_numeric($start) ){</p> <p>return false;</p> <p>}</p> <p>$strLen = strlen($str);</p> <p>if( $strLen &lt; = 0 ){</p> <p>return false;</p> <p>}</p> <p>if( $start &lt; 0 || $length &lt; 0 ){</p> <p>$mbStrLen = $this-&gt;StrLength($str);</p> <p>} else{</p> <p>$mbStrLen = $strLen;</p> <p>}</p> <p>if( !is_numeric($length) ){</p> <p>$length = $mbStrLen;</p> <p>} elseif( $length &lt; 0 ){</p> <p>$length = $mbStrLen + $length - 1;</p> <p>}</p> <p>if( $start &lt; 0 ){</p> <p>$start = $mbStrLen + $start;</p> <p>}</p> <p>$returnVal = '';</p> <p>$mbStart = 0;</p> <p>$mbCount = 0;</p> <p>for( $i = 0 ; $i &lt; $strLen ; $i++ ){</p> <p>if( $mbCount &gt;= $length ){</p> <p>break;</p> <p>}</p> <p>$currOrd = ord($str{$i});</p> <p>if( $mbStart &gt;= $start ){</p> <p>$returnVal .= $str{$i};</p> <p>if( $currOrd &gt; 0×7f ){</p> <p>$returnVal .= $str{$i+1}.$str{$i+2};</p> <p>$i += 2;</p> <p>}</p> <p>$mbCount++;</p> <p>} elseif( $currOrd &gt; 0×7f ){</p> <p>$i += 2;</p> <p>}</p> <p>$mbStart++;</p> <p>}</p> <p>return $returnVal;</p> <p>}//end function SubString</p> <p>//插入全文搜索分词表.一共两个,一个 topic_ft,一个bbs_ft</p> <p>$arrTopicIndex =&amp; DV_ChineseWordSegment($topic);</p> <p>if( !empty($arrTopicIndex) &amp;&amp; is_array($arrTopicIndex) ){</p> <p>$topicindex = $db-&gt;escape_string(implode(’ ‘,$arrTopicIndex));</p> <p>if( $topicindex !== ” ){</p> <p>$db-&gt;query(”UPD ATE {$dv}topic_ft SET topicindex=’<br>{$topicindex}’ WHERE topicid=’{$RootID}’”);</p> <p>} else{</p> <p>$db-&gt;query(”DEL ETE FROM {$dv}topic_ft<br>&#160;WHERE topicid=’{$RootID}’”);</p> <p>}</p> <p>}<br>}</p> </td> </tr></tbody></table> <p>这就是所谓的mysql全文搜索分词,mysql不会分词,而php会。就这么简单。</p> <p>这虽然是一种比较过时的方法,但是非常实用。</p>

Read more+

13

2019-04
SQL Server表的主键设计应注意的问题

<p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">本文主要针对开发应用中遇到在MS SQL Server上进行表设计时,对表的主键设计应注意的问题以及相应的解决办法。</font> </td> </tr></tbody></table> <p>关于数据库的逻辑设计,是一个很广泛的问题。本文主要针对开发应用中遇到在MS <a href="http://www.webjx.com/database/sqlserver/"><u>SQL</u></a> Server上进行表设计时,对表的主键设计应注意的问题以及相应的解决办法。</p> <p>主键设计现状和问题</p> <p>关于数据库表的主键设计,一般而言,是根据业务需求情况,以业务逻辑为基础,形成主键。</p> <p>比如,销售时要记录销售情况,一般需要两个表,一个是销售单的概要描述,记录诸如销售单号、总金额一类的情况,另外一个表记录每种商品的数量和金额。对于第一个表(主表),通常我们以单据号为主键;对于商品销售的明细表(从表),我们就需要将主表的单据号也放入到商品的明细表中,使其关联起来形成主从关系。同时该单据号与商品的编码一起,形成明细表的联合主键。这只是一般情况,我们稍微将这个问题延伸一下:假如在明细中,我们每种商品又可能以不同的价格方式销售。有部分按折扣价格销售,有部分按正常价格销售。要记录这些情况,那么我们就需要第三个表。而这第三个表的主键就需要第一个表的单据号以及第二个表的商品号再加上自身需要的信息一起构成联合主键;又或者其他情况,在第一个主表中,本身就是以联合方式构成联合主键,那么也需要在从表中将主表的多个字段添加进来联合在一起形成自己的主键。</p> <p>数据冗余存储:随着这种主从关系的延伸,数据库中需要重复存储的数据将变得越来越庞大。或者当主表本身就是联合主键时,就必须在从表中将所有的字段重新存储一次。</p> <p><a href="http://www.webjx.com/database/sqlserver/"><u>SQL</u></a>复杂度增加:当存在多个字段的联合主键时,我们需要将主表的多个字段与子表的多个字段关联以获取满足某些条件的所有详细情况记录。</p> <p>程序复杂度增加:可能需要传递多个参数。</p> <p>效率降低:数据库系统需要判断更多的条件,<a href="http://www.webjx.com/database/sqlserver/"><u>SQL</u></a>语句长度增加。同时,联合主键自动生成联合索引</p> <p>WEB分页困难:由于是联合主键方式(对于多数的子表),那么在WEB页面上要进行分页处理时,在自关联时,难于处理。</p> <p>解决方案</p> <p>从上面,我们已经看到现有结构存在着相当多的弊端,主要是导致程序复杂、效率降低并且不利于分页。</p> <p>为解决上述问题,本文提出:当应用系统后台数据库表间存在主从关系时,数据库表额外增加一非业务字段作为主键,该字段为数值型;或者当该表需要在应用中进行分页查询时,也应考虑如此设计。一般地,我们也可以几乎为任何表增加一个与业务逻辑无关的字段作为该表的主键字段。</p> <p>由于该字段要作为表的主键,那么其首要条件是要保证在该表中要具有唯一性。同时,结合<a href="http://www.webjx.com/database/sqlserver/"><u>SQL</u></a> Server数据库自身的特性,可以为其建立一个自增列:</p> <p> </p> <table style="BORDER-BOTTOM: #0099cc 1px solid; BORDER-LEFT: #0099cc 1px solid; TABLE-LAYOUT: fixed; BORDER-TOP: #0099cc 1px solid; BORDER-RIGHT: #0099cc 1px solid" border="0" cellspacing="0" cellpadding="6" width="95%" align="center"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#ddedfb"> <p>create TABLE T_PK_DEMO<br>(<br>U_ID  BIGINT NOT NULL IDENTITY(1,1),<br>&#8211;唯一标识记录的ID<br>COL_OTHER VARchar(20) NOT NULL ,<br>&#8211;其他列<br>CONSTRAINT PK_T_PK_DEMO PRIMARY KEY NONCLUSTERED<br>(U_ID)&#8211;定义为主键<br>)</p> </td> </tr></tbody></table> <p>但是,<a href="http://www.webjx.com/database/sqlserver/"><u>SQL</u></a> Server中的自增列却存在一个比较尴尬的事实,那就是该字段一旦定义和使用,用户无法直接干预该字段的值,完全由数据库系统自身控制:</p> <p>完全数据库系统控制,用户无法修改值</p> <p>在数据库的发布和订阅时,使用自增列会比较麻烦</p> <p>恢复部分数据时,使用自增列会比较麻烦</p> <p>该列的值必须在插入数据后才能获取</p> <p>鉴于此,建议不以自增列的方式来定义,而是参考Oracle数据库系统中序列,在<a href="http://www.webjx.com/database/sqlserver/"><u>SQL</u></a> Server系统中实现类似Oracle数据库系统序列功能。这个具体在下面的小节中介绍。我们只需要按照普通字段的定义方式修改表定义为:</p> <p> </p> <table style="BORDER-BOTTOM: #0099cc 1px solid; BORDER-LEFT: #0099cc 1px solid; TABLE-LAYOUT: fixed; BORDER-TOP: #0099cc 1px solid; BORDER-RIGHT: #0099cc 1px solid" border="0" cellspacing="0" cellpadding="6" width="95%" align="center"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#ddedfb">create TABLE T_PK_DEMO<br>(<br>U_ID  BIGINT NOT NULL ,&#8211;唯一标识记录的ID<br>COL_OTHER VARchar(20) NOT NULL ,&#8211;其他列<br>CONSTRAINT PK_T_PK_DEMO PRIMARY KEY NONCLUSTERED (U_ID)&#8211;定义为主键<br>)</td> </tr></tbody></table> <p></p>

Read more+

13

2019-04
在VB.net中连接MySql的类库

<p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">.Net编写类库直接操作MySql数据库应用实例.</font> </td> </tr></tbody></table> <p>这是在VB.net中为连接MySql中编写的一个类库。你可以使用这个类库直接操作MySql数据库。 </p> <p>在使用这个类库之前,你必须安装 </p> <p>ODBC MYSQL 3.51下载地址:http://www.mysql.com/downloads/api-myodbc-3.51.html </p> <p>Driver ODBC.NET下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyId=6CCD8427-1017-4F33-A062-D165078E32B1&amp;displaylang=en </p> <p>在这个库中有三个类: </p> <p>ManipStringForMySQL: 此类修改SGBD的字符串 </p> <p>MySQL_Requettes: 发送请求 </p> <p>MySQL_Utils : 对SGBD数据进行测试 </p> <p>下面是使用此类库操作MySql的一个例子 </p> <p>//对DataSet进行操作 </p> <p> </p> <table style="BORDER-BOTTOM: #0099cc 1px solid; BORDER-LEFT: #0099cc 1px solid; TABLE-LAYOUT: fixed; BORDER-TOP: #0099cc 1px solid; BORDER-RIGHT: #0099cc 1px solid" border="0" cellspacing="0" cellpadding="6" width="95%" align="center"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#ddedfb"> <p>  Public Shared Function MyODBCDataset(ByVal ReqSQL As String, _<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ByVal LaBase As String, ByVal Server As String, _<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ByVal Password As String, ByVal User As String, _<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ByVal NomDataSet As String) As DataSet<br>&#160;&#160;&#160; ' Connexion à un server MySQL <br>&#160;&#160;&#160; 'avec le Driver ODBC 3.51 avec requette qui renvoie un dataset<br>&#160;&#160;&#160; Dim MyConString As String = _<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; "DRIVER={MySQL ODBC 3.51 Driver};SERVER=" &amp; Server _<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &amp; ";DATABASE=" &amp; LaBase &amp; ";UID=" &amp; User _<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &amp; ";PASSWORD=" &amp; Password &amp; ";OPTION=3;"</p> <p>Dim MyODBCConnexion As New OdbcConnection(MyConString)<br>&#160;&#160;&#160; Try<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; Dim ds As New DataSet()<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; Dim cmd As OdbcDataAdapter = New <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; OdbcDataAdapter(ReqSQL, MyConString)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; Dim MyCommand As New OdbcCommand()<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; Dim MyDataReader As OdbcDataReader<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; cmd.Fill(ds, NomDataSet)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; MyODBCConnexion.Close()<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; Return ds<br>&#160;&#160;&#160; Catch MyOdbcException As OdbcException<br>&#160;&#160;&#160; ' <br>&#160;&#160;&#160;&#160;&#160; HttpContext.Current.Response.Write(MyOdbcException.ToString)<br>&#160;&#160;&#160; Catch MyException As Exception<br>&#160;&#160;&#160; ' <br>&#160;&#160;&#160;&#160;&#160; HttpContext.Current.Response.Write(MyException.ToString)<br>&#160;&#160;&#160; End Try<br>End Function</p> <p>&#160;&#160;&#160; //对函数的调用</p> <p>&#160; Dim MonDatasetTemp As DataSet = MySQL_Requettes.MyODBCDataset(<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; SQL,<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; constantes.ODBCBase, <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; constantes.ODBCServer, <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; constantes.ODBCPwd, <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; constantes.ODBCUser, <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "MonDataset")</p> </td> </tr></tbody></table> <p>此程序用到的类库可在如下地址下载:http://www.codeproject.com/dotnet/MySQLConnexion/MySQLConnexion.zip</p>

Read more+