搜索词>>MySQL 耗时0.0210
  • MySQL慢查询优化_MySQL慢查询排查_MySQL慢查询设置配置

    MySQL慢查询优化_MySQL慢查询排查_MySQL慢查询设置配置<h2>引言</h2> MySQL数据中有记录慢查询的一种手段。并且是MySQL自带的。可用来排查那些查询sql语句执行得慢。从而给开发者提供一个调优得依据。 <h2>MySQL慢查询使用之查看慢查询相关参数</h2> 1.查看是否开启慢查询记录功能及慢查询日志存放路径信息 <pre> <code class="language-sql">show variables like 'slow_query%';</code></pre> <pre> <code class="language-html">mysql> show variables like 'slow_query%'; +---------------------------+----------------------------------+ | Variable_name | Value | +---------------------------+----------------------------------+ | slow_query_log | OFF | | slow_query_log_file | /mysql/data/localhost-slow.log | +---------------------------+----------------------------------+ </code></pre> 2.查看设置的长时间记录阈值(超过这个时间将会被记录到上方配置的日志文件中) <pre> <code class="language-html"> mysql> show variables like 'long_query_time'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+</code></pre> <h2>MySQL慢查询使用之配置相关参数</h2> 配置慢查询日志启用/停用、日志存放路径、记录时间阈值修改<br /> 方式一:即时生效MySQL服务重启失效: <pre> <code class="language-sql">#设置日志存放路径 set global slow_query_log_file='/usr/local/mysql/data/slow.log'; #设置启用(ON)/停用日志(OFF) set global slow_query_log='ON'; #设置慢查询阈值时间;下面是超过1秒就记录 set global long_query_time=1; </code></pre> 方式二:重启MySQL服务生效: <pre> <code class="language-html">[mysqld] slow_query_log = ON slow_query_log_file = /usr/local/mysql/data/slow.log long_query_time = 1</code></pre> <br /> 测试: <pre> <code class="language-sql">select sleep(2);</code></pre> 查看慢查询日志记录: <pre> <code class="language-bash">cat /usr/local/mysql/data/slow.log</code></pre>
  • MySQL索引优化_MySQL索引类型_MySQL索引怎么用怎么创建

    MySQL索引优化,MySQL索引类型,MySQL索引怎么用MySQL索引怎么创建这里将会通过一些简单得sql进行讲解<h2>引言</h2>     本文用于MySQL数据库通过创建索引来调优的讲解。主要讲解的内容有:MySQL索引优化查询/MySQL索引类型/怎么创建MySQL的索引。<br />     通常大型网站单日就可能会产生几十万甚至几百万的数据,对于没有索引的表,单表查询可能几十万数据就是瓶颈。 <h2>一.简单的对比测试</h2>  测试表结构: <pre> <code class="language-sql">--创建一个测试用article表 CREATE TABLE article ( id bigint(20) NOT NULL AUTO_INCREMENT, title CHAR(255) NOT NULL, content LONGTEXT, TIME INT(10), PRIMARY KEY(id) )</code></pre> <p>以我去年测试的数据作为一个简单示例,20多条数据源随机生成200万条数据,平均每条数据源都重复大概10万次,表结构比较简单,仅包含一个自增ID,一个char类型,一个text类型和一个int类型,单表2G大小,使用MyIASM引擎。开始测试未添加任何索引。</p> <p>执行下面的SQL语句:</p> <pre> <code class="language-sql">mysql>SELECT id,FROM_UNIXTIME(time) FROM article a WHERE a.title='测试标题';</code></pre> 查询需要的时间非常恐怖的,如果加上联合查询和其他一些约束条件,数据库会疯狂的消耗内存,并且会影响前端程序的执行。这时给title字段添加一个BTREE索引: <pre> <code class="language-sql">mysql> ALTER TABLE article ADD INDEX index_article_tite (title);</code></pre> <h5>MySQL索引的概念</h5> <p>  索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。上述SQL语句,在没有索引的情况下,数据库会遍历全部200条数据后选择符合条件的;而有了相应的索引之后,数据库会直接在索引中查找符合条件的选项。如果我们把SQL语句换成“SELECT * FROM article WHERE id=2000000”,那么你是希望数据库按照顺序读取完200万行数据以后给你结果还是直接在索引中定位呢?(注:一般数据库默认都会为主键生成索引)。</p> <p>索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。</p> <h5>MySQL索引的类型</h5> <h3>1.普通索引</h3> <p>这是最基本的索引,它没有任何限制,比如上文中为title字段创建的索引就是一个普通索引,MyIASM中默认的BTREE类型的索引,也是我们大多数情况下用到的索引。</p> <pre> <code class="language-sql">--直接创建索引 CREATE INDEX index_article_title ON article(title(255)); ---修改表结构方式添加索引 ALTER TABLE article ADD INDEX index_article_title (title); --创建表的时候创建索引 CREATE TABLE article ( id bigint(20) NOT NULL AUTO_INCREMENT, title CHAR(255) NOT NULL, content LONGTEXT, TIME INT(10), PRIMARY KEY(id), INDEX index_article_title (title(255)) ); --删除索引 DROP INDEX index_article_title ON article; </code></pre> <h3>2.唯一索引</h3> <p>与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值(注意和主键不同)。如果是组合索引,则列值的组合必须唯一,创建方法和普通索引类似。<br />  </p> <pre> <code class="language-sql">--创建唯一索引 CREATE UNIQUE INDEX index_article_title ON article(title(255)); --修改表结构方式创建唯一索引 ALTER TABLE article ADD UNIQUE INDEX index_article_title (title(255)); --创建表的时候创建索引 CREATE TABLE article ( id bigint(20) NOT NULL AUTO_INCREMENT, title CHAR(255) NOT NULL, content LONGTEXT, TIME INT(10), PRIMARY KEY(id), UNIQUE index_article_title (title(255)) ); </code></pre>   <h3>3.全文索引(FULLTEXT)</h3> <p>    MySQL从3.23.23版开始支持全文索引和全文检索,FULLTEXT索引仅可用于 MyISAM 表;他们可以从CHAR、VARCHAR或TEXT列中作为CREATE TABLE语句的一部分被创建,或是随后使用ALTER TABLE 或CREATE INDEX被添加。////对于较大的数据集,将你的资料输入一个没有FULLTEXT索引的表中,然后创建索引,其速度比把资料输入现有FULLTEXT索引的速度更为快。不过切记对于大容量的数据表,生成全文索引是一个非常消耗时间非常消耗硬盘空间的做法。<br />  </p> <pre> <code class="language-sql">--创建表的时候创建索引 CREATE TABLE article ( id bigint(20) NOT NULL AUTO_INCREMENT, title CHAR(255) NOT NULL, content LONGTEXT, TIME INT(10), PRIMARY KEY(id), FULLTEXT (content) ); --修改表结构添加全文索引 ALTER TABLE article ADD FULLTEXT index_article_content(content); --直接创建索引 CREATE FULLTEXT INDEX index_article_content ON article(content);</code></pre> <p>4. 单列索引、多列索引</p> <p>多个单列索引与单个多列索引的查询效果不同,因为执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。</p> <p>5. 组合索引(最左前缀)</p> <p>平时用的SQL查询语句一般都有比较多的限制条件,所以为了进一步提高MySQL的效率,就要考虑建立组合索引。例如上表中针对title和time建立一个组合索引:ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10))。建立这样的组合索引,其实是相当于分别建立了下面两组组合索引:</p> <p>–title,time</p> <p>–title</p> <p>为什么没有time这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这两列的查询都会用到该组合索引,如下面的几个SQL所示:<br />  </p> <pre> <code class="language-sql">--使用到上面的索引 SELECT * FROM article WHERE title='测试' AND time=1234567890; SELECT * FROM article WHERE utitle='测试'; --不使用上面的索引 SELECT * FROM article WHERE time=123456789; </code></pre> <h2>二.MySQL索引优化</h2> <p>上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快。索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。下面是一些总结以及收藏的MySQL索引的注意事项和优化方法。</p> <h3>1. 何时使用聚集索引或非聚集索引?</h3> <table align="center" border="1" cellpadding="0" cellspacing="0" class="table table-bordered table-hover"> <tbody> <tr> <td>动作描述</td> <td>使用聚集索引</td> <td>使用非聚集索引</td> </tr> <tr> <td>列经常被分组排序</td> <td>使用</td> <td>使用</td> </tr> <tr> <td>返回某范围内的数据</td> <td>使用</td> <td>不使用</td> </tr> <tr> <td>一个或极少不同值</td> <td>不使用</td> <td>不使用</td> </tr> <tr> <td>小数目的不同值</td> <td>使用</td> <td>不使用</td> </tr> <tr> <td>大数目的不同值</td> <td>不使用</td> <td>使用</td> </tr> <tr> <td>频繁更新的列</td> <td>不使用</td> <td>使用</td> </tr> <tr> <td>外键列</td> <td>使用</td> <td>使用</td> </tr> <tr> <td>主键列</td> <td>使用</td> <td>使用</td> </tr> <tr> <td>频繁修改索引列</td> <td>不使用</td> <td>使用</td> </tr> </tbody> </table> <p>事实上,我们可以通过前面聚集索引和非聚集索引的定义的例子来理解上表。如:返回某范围内的数据一项。比如您的某个表有一个时间列,恰好您把聚合索引建立在了该列,这时您查询2004年1月1日至2004年10月1日之间的全部数据时,这个速度就将是很快的,因为您的这本字典正文是按日期进行排序的,聚类索引只需要找到要检索的所有数据中的开头和结尾数据即可;而不像非聚集索引,必须先查到目录中查到每一项数据对应的页码,然后再根据页码查到具体内容。其实这个具体用法我还不是很理解,只能等待后期的项目开发中慢慢学学了。</p> <h3>2. 索引不会包含有NULL值的列</h3> <p>只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。</p> <h3>3. 使用短索引</h3> <p>对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。</p> <h3>4. 索引列排序</h3> <p>MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。</p> <h3>5. like语句操作</h3> <p>一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。</p> <h3>6. 不要在列上进行运算</h3> <p>例如:</p> <pre> <code class="language-sql">select * from users where YEAR(adddate)<2007;</code></pre> <p><br /> 将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成:</p> <pre> <code class="language-sql">select * from users where adddate<’2007-01-01′</code></pre> <p>关于这一点可以围观:<a href="http://www.zendstudio.net/archives/single-quotes-or-no-single-quotes-in-sql-query" rel="external nofollow" target="_blank">一个单引号引发的MYSQL性能损失。</a></p> <p>最后总结一下,MySQL只对一下操作符才使用索引:<,<=,=,>,>=,between,in,以及某些时候的like(不以通配符%或_开头的情形)。而理论上每张表里面最多可创建16个索引,不过除非是数据量真的很多,否则过多的使用索引也不是那么好玩的,比如我刚才针对text类型的字段创建索引的时候,系统差点就卡死了。</p>
  • mysql数据库备份与还原命令_MySQL导出导入数据命令

    mysql数据库备份与还原命令_MySQL导出导入数据命令<p>mysql 数据库备份与还原命令</p> <p>1>导出某个数据库表结构</p> (其他说明:-u 后面的root为用户名,-p后面的password为用户密码,dbname数据库名称) <pre> <code class="language-sql">mysqldump –uroot –ppassword –d dbname > /home/test/dbfiles/dbtables.sql</code></pre> 2>导出某个数据库某张表或多张表表结构 <pre> <code class="language-sql">mysqldump –uroot –ppassword –d dbname tablename1>/home/test/dbfiles/dbtable.sql</code></pre> (多张表表名之间以空格隔开) <pre> <code class="language-sql">mysqldump –uroot –ppassword –d dbname tablename1 tablename2>/home/test/dbfiles/dbtable.sql</code></pre> 3>导出某个数据库数据以及表结构 <pre> <code>mysqldump –uroot –ppassword dbname>/home/test/dbfiles/db.sql</code></pre> 4>导出某个数据库中某个表或某几张表数据以及表结构 <pre> <code class="language-sql">mysql –uroot –ppassword dbname tablename1>/home/test/dbfiles/dbtable1.sql</code></pre> (多张表表名之间以空格隔开) <pre> <code class="language-sql">mysql –uroot –ppassword dbname tablename1 tablename2>/home/test/dbfiles/dbtables.sql</code></pre> 5>还原备份 <pre> <code class="language-sql">mysql  -u root –p password dbname < /home/test/dbfiles/db.sql</code></pre> 或者登录MySQL然后 <ol> </ol> <pre> <code class="language-sql">Mysql>/home/test/dbfiles/db.sql;</code></pre> <p><strong><span style="color:#ff0000">【注意】还原备份命令是mysql不是mysqldump</span></strong></p>
  • Centos MySql数据库找回root密码

    Centos MySql数据库找回root密码1.停止MySQL服务<br /> 2.编辑MySQL配置文件,在[mysqld]节点中添加以下内容 <pre> <code>skip-grant-tables</code></pre> 3.启动MySQL服务<br /> 4.输mysql回车进入mysql<br /> #mysql<br /> <br /> 5.切换至mysql数据库<br /> >use msyql<br /> 6.执行更新命令: <pre> <code>mysql> UPDATE user SET Password = password ( 'new-password' ) WHERE User = 'root' ; </code></pre> 7.找回密码后将/etc/my.cnf添加的内容注释掉 <pre> <code>#skip-grant-tables</code></pre> 8.重启MySQL服务<br /> service mysqld restart<br /> <br /> 密码找回完成!
  • MySQL索引使用摘录

    mysql索引的使用基础知识摘录。<p><em>互联网总结:</em></p> <h2>一.常见索引类型</h2> <ul> <li>normal 普通</li> <li>unique 唯一索引</li> <li>full text 全文索引</li> </ul> <h2>二.几种常见索引的区别</h2> <p>normal:表示普通索引</p> <p>unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique</p> <p>full text: 表示 全文搜索的索引。 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。</p> <pre> <code class="language-html">提示: 索引的类别由建立索引的字段内容特性来决定,通常normal最常见。</code></pre> <h2>三.哪些字段作为索引</h2> <h3>3.1.选择唯一性索引</h3>   唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话,可能存在同名现象,从而降低查询速度。 <h3>3.2为经常需要排序、分组和联合操作的字段建立索引</h3> 经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果为其建立索引,可以有效地避免排序操作。 <h3>3.3为常作为查询条件的字段建立索引</h3> 如果某个字段经常用来做查询条件,那么该字段的查询速度会影响整个表的查询速度。因此,为这样的字段建立索引,可以提高整个表的查询速度。 <h3>3.4限制索引的数目</h3> 索引的数目不是越多越好。每个索引都需要占用磁盘空间,索引越多,需要的磁盘空间就越大。修改表时,对索引的重构和更新很麻烦。越多的索引,会使更新表变得很浪费时间。 <h3>3.5尽量使用数据量少的索引</h3> 如果索引的值很长,那么查询的速度会受到影响。例如,对一个CHAR(100)类型的字段进行全文检索需要的时间肯定要比对CHAR(10)类型的字段需要的时间要多。 <h3>3.6尽量使用前缀来索引</h3> 如果索引字段的值很长,最好使用值的前缀来索引。例如,TEXT和BLOG类型的字段,进行全文检索会很浪费时间。如果只检索字段的前面的若干个字符,这样可以提高检索速度。 <h3>3.7删除不再使用或者很少使用的索引</h3> 表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要。数据库管理员应当定期找出这些索引,将它们删除,从而减少索引对更新操作的影响。 <div>  <pre> <code class="language-html">注意:选择索引的最终目的是为了使查询的速度变快。上面给出的原则是最基本的准则,但不能拘泥于上面的准则。读者要在以后的学习和工作中进行不断的实践。根据应用的实际情况进行分析和判断,选择最合适的索引方式。</code></pre> </div> <h2>四.其他</h2> 除了上面说的MySQL索引知识外还有很多<br /> 例如:<br /> <strong>单列索引,多列索引</strong><br /> 多个单列索引与单个多列索引的查询效果不同,因为执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。<br /> <strong>组合索引(最左前缀)</strong> <p>平时用的SQL查询语句一般都有比较多的限制条件,所以为了进一步榨取MySQL的效率,就要考虑建立组合索引。例如上表中针对title和time建立一个组合索引:ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10))。建立这样的组合索引,其实是相当于分别建立了下面两组组合索引:</p> <p>–title,time</p> <p>–title</p> <p>为什么没有time这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这两列的查询都会用到该组合索引,如下面的几个SQL所示:<br />  </p> <pre> <code class="language-sql">--使用到上面的索引 SELECT * FROM article WHREE title='测试' AND time=1234567890; SELECT * FROM article WHREE utitle='测试'; --不使用上面的索引 SELECT * FROM article WHREE time=1234567890;</code></pre> <h5><strong>MySQL索引的优化</strong></h5> <p>上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快。索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。下面是一些总结以及收藏的MySQL索引的注意事项和优化方法。</p> <h3>最左前缀原则</h3> <p>这两天看《构建高性能Web站点》这本书,感觉写的真是不错,很多实际项目中会碰到的问题都有所提及,今天看到一个最左前缀原则,以前也听说过,不过一直没搞明白,今天查了下。</p> <p> </p> <p>通过实例理解单列索引、多列索引以及最左前缀原则<br /> <br /> 实例:现在我们想查出满足以下条件的用户id:</p> <pre> <code class="language-html">mysql>SELECT `uid` FROM people WHERE lname`='Liu'  AND `fname`='Zhiqun' AND `age`=26</code></pre> <p><br /> 因为我们不想扫描整表,故考虑用索引。<br /> <br /> 单列索引:</p> <pre> <code class="language-html">ALTER TABLE people ADD INDEX lname (lname);</code></pre> <p><br /> 将lname列建索引,这样就把范围限制在lname='Liu'的结果集1上,之后扫描结果集1,产生满足fname='Zhiqun'的结果集2,再扫描结果集2,找到 age=26的结果集3,即最终结果。<br /> <br /> 由 于建立了lname列的索引,与执行表的完全扫描相比,效率提高了很多,但我们要求扫描的记录数量仍旧远远超过了实际所需 要的。虽然我们可以删除lname列上的索引,再创建fname或者age 列的索引,但是,不论在哪个列上创建索引搜索效率仍旧相似。<br /> <br /> 2.多列索引:</p> <pre> <code class="language-html">ALTER TABLE people ADD INDEX lname_fname_age (lame,fname,age);</code></pre> <p><br /> 为了提高搜索效率,我们需要考虑运用多列索引,由于索引文件以B-Tree格式保存,所以我们不用扫描任何记录,即可得到最终结果。<br /> <br /> 注:在mysql中执行查询时,只能使用一个索引,如果我们在lname,fname,age上分别建索引,执行查询时,只能使用一个索引,mysql会选择一个最严格(获得结果集记录数最少)的索引。<br /> <br /> 3.最左前缀:顾名思义,就是最左优先,上例中我们创建了lname_fname_age多列索引,相当于创建了(lname)单列索引,(lname,fname)组合索引以及(lname,fname,age)组合索引。<br /> <br /> <span style="color:#ff0000">注:在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。</span></p>
  • MySQL 安装 windows 5.6版本配置文件无效解决_MySQL安装后配置my.ini无效解决

    MySQL 安装,MySQL 安装了5.6版本,修改安装目录下的默认配置文件重启后配置无效。MySQL安装 windows 5.6版本配置文件无效解决_MySQL安装后配置my.ini无效解决MySQL安装了5.6版本,修改安装目录下的默认配置文件重启后配置无效。一.情况说明首先MySQL的安装版本是5.6,且是从MySQL官方网站下载的最新的MSI格式window的MySQL安装文件。安装成功后MySQL自动集成到windows系统的服务中名称为MySQL56.咋一看,MySQL安装已经成功。就开始了愉快的使用。啥?Java插入字符串到数据库中报错了,居然说不支持这种字符集。第一反应:哦,忘记改配置了得嘛,搜搜搜打开MySQL的安装目录。发现一枚my-default.ini配置文件。先不管啦,打开文件开始配置。在以下节点添加了字符集的配置:[client]default-character-set=utf8mb4#其他配置...[mysql]default-character-set=utf8mb4#...其他配置....[mysqld]character-set-server=utf8mb4#...其他配置....好啦,重启服务。打开MySQL工具,查询了下现在的字符集:show variables like '%char%';  无效图1看到上面的图,我就开始郁闷了,配置居然没有生效。于是乎开始百度--------------------------咦,找到一个,好像说的挺有道理的,应该把my-default.ini文件改成之前我们熟知的my.ini。文章说的他改了就成功了,于是乎我立即去复制了一份改成my.ini.重启MySQL服务.............重启完成这次应该对了吧,让我再用MySQL命令大法来看看字符集呢:show variables like '%char%';  无效图2持续懵逼中。。。看样子国内的消息不灵通啊,但是又请不动谷歌大神。好啦,只好这样啦。微软的小弟来,帮我一把吧,打开bing搜索引擎,选择国际版。搜索了一堆翻译的问题内容......咦,找到一篇英语的。这个说的好像有道理的样子。打开window的服务,找到MySQL56鼠标右键点击属性查看可执行文件路径图1图2​​​​​​​我勒个去,MySQL5.6安装版本居然默认服务指定的配置文件路径是...."C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.6\my.ini" MYSQL56突然心中有千万头羊驼在奔跑......二.解决MySQL5.6安装版配置文件设置无效问题通过上面的配置,我们不难发现,MySQL5.6新版本的配置文件默认位置居然是C:\ProgramData\MySQL\MySQL Server 5.6\my.ini已然不是指定的安装目录C:\Program Files\MySQL\MySQL Server 5.6\两个解决办法:2.1直接去修改C:\ProgramData\MySQL\MySQL Server 5.6\my.ini文件2.2修改MySQL服务指定配置文件到自己的配置文件路径如指定到安装目录"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\Program Files\MySQL\MySQL Server 5.6\my.ini" MYSQL56
  • MySQL忘记root密码找回windows系统

    windows系统MySQL忘记root密码找回,MySQLwindows系统MySQL忘记root密码找回<br /> <strong>1.停止MySQL服务</strong><br /> <img class="img-thumbnail" alt="停止MySQL服务" src="/assist/images/blog/ab73dcb8-58f5-4f13-be46-a9d15ae97849.jpg" style="height:630px; width:402px" /><br /> <img class="img-thumbnail" alt="停止MySQL服务" src="/assist/images/blog/82bfa3aa-2843-4fc5-9275-ac6993dc8bad.jpg" style="height:230px; width:467px" /><br /> <strong>2.打开两个CMD 命令框</strong><br /> ①其中一个输入: <div>mysqld -nt --skip-grant-tables</div> <img class="img-thumbnail" alt="目录切换" src="/assist/images/blog/80695fbf-ae95-44c8-8dbd-4fb400253233.jpg" style="height:442px; width:677px" /><br /> <img class="img-thumbnail" alt="mysqld -nt --skip-grant-tables" src="/assist/images/blog/c609ec90-8e6c-4e75-8948-131eb615b612.jpg" style="height:442px; width:677px" /><br /> ②在另外一个输入 <div>mysql -u root</div> 这时候进入到了mysql安全模式<br /> 修改密码: <div>mysql>update mysql.user set password=PASSWORD('new_password') where User='root';</div> 刷新权限<br />   <div>mysql>flush privileges;</div> <img class="img-thumbnail" alt="mysql -u root" src="/assist/images/blog/e2b47636-2432-4e86-af62-4962e353a3c5.jpg" style="height:603px; width:669px" /><br /> <strong>3.启动任务管理器,结束mysqld进程</strong><br /> <img class="img-thumbnail" alt="结束mysqld.exe进程" src="/assist/images/blog/f27f36f5-6810-4d8c-9f18-d207851bb8f9.jpg" style="height:447px; width:412px" /><br /> <strong>4.启动mysql服务</strong><br /> <img class="img-thumbnail" alt="启动MySQL服务" src="/assist/images/blog/7ed31dac-bb7a-4f91-b31d-4298e5994f5f.jpg" style="height:301px; width:605px" /><br /> <strong>5.用新的root密码登陆</strong><br /> <img class="img-thumbnail" alt="新密码登陆" src="/assist/images/blog/614633e9-19e9-4faf-a905-08e0dc53230a.jpg" style="height:442px; width:677px" /><br /> 恭喜成功找回root密码<br /> <strong><em>【注意:】在密码找回的整个过程中,MySQL服务是关闭的,成功找回以后再次启动MySQL服务</em></strong><br />  
  • MySQL分页_MySQL分页语句_MySQ如何使用limit分页

    MySQL分页_MySQL分页语句_MySQ如何使用limit分页,本博客将会详细讲解mysql中的分页查询。讲清楚MySQL如何编写分页查询语句。MySQL分页_MySQL分页语句_MySQ如何使用limit分页
  • MySQL5.6数据库双机主从热备配置

    MySQL5.6数据库双机主从热备配置<h2><span style="font-family:宋体">一、准备</span></h2> <p><span style="font-family:宋体">首先安装两个</span>MySQL<span style="font-family:宋体">数据库</span></p> <p>Ip<span style="font-family:宋体">地址和端口分别是</span>:</p> <p>192.168.8.202 3306</p> <p>192.168.8.203 3306</p> <p>Root<span style="font-family:宋体">用户及密码</span></p> <p>root root</p> <p><img alt="逻辑图" class="img-thumbnail" src="/assist/images/blog/87f121d199f44b569be494ca6c9226ca.png" /></p> <p><strong><span style="font-family:宋体"><span style="color:red">保证两个数据库服务器中需要同步的库内容一致</span></span></strong></p> <h2><span style="font-family:宋体">二、配置从数据库</span>Master</h2> <h3>2.1<span style="font-family:宋体">停止</span>master<span style="font-family:宋体">数据库服务</span></h3> <p><span style="font-family:宋体">命令</span>:</p> <pre> <code>#service mysqld stop</code></pre> <p>2.2<span style="font-family:宋体">修改</span>/etc/my.cnf<span style="font-family:宋体">配置文件</span></p> <p><span style="font-family:宋体">在</span>[mysqld]<span style="font-family:宋体">节点添加以下内容</span>:</p> <pre> <code>#######主从配置master信息####### #[必须]服务器唯一ID,默认是1,一般取IP最后一段 server_id=202 #[必须]启用二进制日志 log_bin=mysql-bin #需要备份的数据库名  多个库写多行 #binlog-do-db=test #binlog-do-db=test1 #binlog-do-db=test2 #忽略备份数据库名 多个库写多行 binlog-ignore-db=mysql #若涉及及同步函数或者存储过程需要配置,否则主备会产生异常不能同步 log_bin_trust_function_creators=TRUE #######主从配置master信息############</code></pre> <p> </p> <h3>2.3<span style="font-family:宋体">启动</span>MySQL<span style="font-family:宋体">数据库服务</span></h3> <p><span style="font-family:宋体">命令</span>:</p> <pre> <code>#service mysqld start</code></pre> <p>2.4<span style="font-family:宋体">添加从机过来同步数据的用户</span></p> <p><span style="font-family:宋体">首先使用</span>root<span style="font-family:宋体">用户登录</span>master<span style="font-family:宋体">数据库</span>,<span style="font-family:宋体">也就是</span>202</p> <p><span style="font-family:宋体">命令</span>:</p> <pre> <code>#mysql –uroot –proot</code></pre> <p><span style="font-family:宋体">登录数据库后执行命令</span><br />  </p> <pre> <code>mysql> grant replication slave on *.* to 'slaveuser'@'%' identified by '123456'; Query OK, 0 rows affected (0.06 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.06 sec)</code></pre> <p><strong><span style="font-family:宋体">提示</span></strong><strong>:</strong><em><span style="font-family:宋体">一般不用</span></em><em>root</em><em><span style="font-family:宋体">帐号,“</span></em><em>%</em><em><span style="font-family:宋体">”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端</span></em><em>IP</em><em><span style="font-family:宋体">代替,如</span></em><em>192.168.8.203</em><em><span style="font-family:宋体">,加强安全。</span></em></p> <p> </p> <p><span style="font-family:宋体">查看刚才创建的用户授权结果</span>:</p> <p><span style="font-family:宋体">命令</span>:</p> <p><span style="font-family:宋体">切换至</span>mysql<span style="font-family:宋体">数据库</span></p> <pre> <code>mysql> use mysql mysql>select * from user where host='%' and user='slaveuser' \G;  *************************** 1. row ***************************                   Host: %                   User: slaveuser               Password: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9            Select_priv: N            Insert_priv: N            Update_priv: N            Delete_priv: N            Create_priv: N              Drop_priv: N            Reload_priv: N          Shutdown_priv: N           Process_priv: N              File_priv: N             Grant_priv: N        References_priv: N             Index_priv: N             Alter_priv: N           Show_db_priv: N             Super_priv: N  Create_tmp_table_priv: N       Lock_tables_priv: N           Execute_priv: N        Repl_slave_priv: Y       Repl_client_priv: N       Create_view_priv: N         Show_view_priv: N    Create_routine_priv: N     Alter_routine_priv: N       Create_user_priv: N             Event_priv: N           Trigger_priv: N Create_tablespace_priv: N               ssl_type:             ssl_cipher:            x509_issuer:           x509_subject:          max_questions: 0            max_updates: 0        max_connections: 0   max_user_connections: 0                 plugin: mysql_native_password  authentication_string:       password_expired: N 1 row in set (0.00 sec) ERROR: No query specified mysql></code></pre> <p> </p> <p><img alt="2" class="img-thumbnail" src="/assist/images/blog/42cf2e46dd9449e2a2ef048dd60c3c24.png" /></p> <p> </p> <p><strong>Repl_slave_priv</strong><strong><span style="font-family:宋体">项为</span>Y</strong><strong><span style="font-family:宋体">,表示授权成功</span></strong></p> <p> </p> <h3>2.5<span style="font-family:宋体">查看</span>master<span style="font-family:宋体">数据库状态</span></h3> <p><strong><span style="font-family:宋体">注意</span>:</strong><strong><span style="font-family:宋体">查看之前做好数据库只读操作</span>,</strong><strong><span style="font-family:宋体">防止在配置过程中出现写入数据日志,导致查询的</span>master</strong><strong><span style="font-family:宋体">日志不可控</span></strong></p> <p> </p> <p><span style="font-family:宋体">查看</span>master<span style="font-family:宋体">数据库状态</span></p> <p><span style="font-family:宋体">命令</span>:</p> <pre> <code>mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000002 |     6187 |              | mysql            |                   | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.01 sec) mysql></code></pre> <p><img alt="3" class="img-thumbnail" src="/assist/images/blog/487df8f373c743aa85d47462fd11cb76.png" /></p> <p> </p> <p><span style="font-family:宋体">日志文件名</span>:<span style="font-family:宋体">称</span> <strong>mysql-bin.000002</strong></p> <p><span style="font-family:宋体">日志文件位置</span>: 6187</p> <p> </p> <h2><span style="font-family:宋体">三、配置从数据库</span>slave</h2> <p><strong><span style="font-family:宋体"><span style="color:red">如果</span></span><span style="color:red">master</span></strong><strong><span style="font-family:宋体"><span style="color:red">中需要同步的数据库已经存在且有数据</span></span><span style="color:red">,</span></strong><strong><span style="font-family:宋体"><span style="color:red">则需要将</span></span><span style="color:red">master</span></strong><strong><span style="font-family:宋体"><span style="color:red">中的数据库导出到</span></span><span style="color:red">slave</span></strong><strong><span style="font-family:宋体"><span style="color:red">保持</span></span><span style="color:red">master</span></strong><strong><span style="font-family:宋体"><span style="color:red">和</span></span><span style="color:red">slave</span></strong><strong><span style="font-family:宋体"><span style="color:red">需要同步的数据库信息一致。</span></span></strong></p> <h3>3.1<span style="font-family:宋体">停止</span>slave<span style="font-family:宋体">数据库服务</span></h3> <p><span style="font-family:宋体">命令</span>:</p> <pre> <code>#service mysqld stop</code></pre> <p>3.2<span style="font-family:宋体">修改</span>/etc/my.cnf<span style="font-family:宋体">配置文件</span></p> <p><span style="font-family:宋体">在</span>[mysqld]<span style="font-family:宋体">的节点下添加以下配置</span>:</p> <p><img alt="4" class="img-thumbnail" src="/assist/images/blog/d45976833db9461ca6985770eb53cbc0.png" /></p> <p><strong><span style="font-family:宋体">注意</span>ID</strong><strong><span style="font-family:宋体">不能重复</span></strong></p> <p> </p> <h3>3.3<span style="font-family:宋体">启动</span>slave<span style="font-family:宋体">的</span> MySQL<span style="font-family:宋体">数据库服务</span></h3> <p><span style="font-family:宋体">命令</span>:</p> <pre> <code>#service mysqld start</code></pre> <p>3.4root<span style="font-family:宋体">用户登录从库设置信息</span></p> <p><span style="font-family:宋体">登录数据库</span>:</p> <pre> <code>#mysql –uroot -proot</code></pre> <p><span style="font-family:宋体">停止</span>slave</p> <pre> <code>mysql> stop slave;</code></pre> <p><span style="font-family:宋体">配置</span>master<span style="font-family:宋体">信息</span>:</p> <pre> <code>mysql>change master to   master_host='192.168.8.202',  master_user='slaveuser',  master_password='123456',  master_log_file='mysql-bin.000002',  master_log_pos=6187;</code></pre> <p> </p> <p><em><span style="font-family:宋体">配置说明</span>:</em></p> <p><em>master_host:master</em><em><span style="font-family:宋体">的主机地址</span></em></p> <p><em>master_user:master</em><em><span style="font-family:宋体">上创建的同步数据用户</span>,</em><em><span style="font-family:宋体">之前创建的</span>slaveuser</em></p> <p><em>master_password:master</em><em><span style="font-family:宋体">创建的同步数据用户密码</span></em></p> <p><em>master_log_file:master</em><em><span style="font-family:宋体">最后一步查看的日志文件名</span></em></p> <p><em>master_log_pos:master</em><em><span style="font-family:宋体">最后一步查看的日志当前位置</span>,</em><em><span style="font-family:宋体">同步将从这个点开始</span></em></p> <p> </p> <p><span style="font-family:宋体">启动</span>slave</p> <pre> <code>mysql>start slave</code></pre> <p> </p> <h3>3.5<span style="font-family:宋体">查看从库配置状态</span></h3> <p><span style="font-family:宋体">命令</span>:</p> <pre> <code>Mysql> mysql> show slave status \G; *************************** 1. row ***************************                Slave_IO_State: Waiting for master to send event                   Master_Host: 192.168.8.202                   Master_User: slaveuser                   Master_Port: 3306                 Connect_Retry: 60               Master_Log_File: mysql-bin.000002           Read_Master_Log_Pos: 23305                Relay_Log_File: mysqld-relay-bin.000002                 Relay_Log_Pos: 283         Relay_Master_Log_File: mysql-bin.000002              Slave_IO_Running: Yes             Slave_SQL_Running: Yes               Replicate_Do_DB:           Replicate_Ignore_DB:            Replicate_Do_Table:        Replicate_Ignore_Table:       Replicate_Wild_Do_Table:   Replicate_Wild_Ignore_Table:                    Last_Errno: 0                    Last_Error:                  Skip_Counter: 0           Exec_Master_Log_Pos: 23305               Relay_Log_Space: 457               Until_Condition: None                Until_Log_File:                 Until_Log_Pos: 0            Master_SSL_Allowed: No            Master_SSL_CA_File:            Master_SSL_CA_Path:               Master_SSL_Cert:             Master_SSL_Cipher:                Master_SSL_Key:         Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No                 Last_IO_Errno: 0                 Last_IO_Error:                Last_SQL_Errno: 0                Last_SQL_Error:   Replicate_Ignore_Server_Ids:              Master_Server_Id: 202                   Master_UUID: 4aed5689-6c69-11e7-9b1f-000c290e4f3d              Master_Info_File: /var/lib/mysql/master.info                     SQL_Delay: 0           SQL_Remaining_Delay: NULL       Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it            Master_Retry_Count: 86400                   Master_Bind:       Last_IO_Error_Timestamp:      Last_SQL_Error_Timestamp:                Master_SSL_Crl:            Master_SSL_Crlpath:            Retrieved_Gtid_Set:             Executed_Gtid_Set:                 Auto_Position: 0</code></pre> <p>1 row in set (0.00 sec)<img alt="5" class="img-thumbnail" src="/assist/images/blog/9e82bbab3212434b97e01481c2239796.png" /></p> <p><span style="font-family:宋体">注意</span>,<span style="font-family:宋体">上面两个配置</span></p> <p><span style="color:red">Slave_IO_Running: Yes</span></p> <p><span style="color:red">Slave_SQL_Running: Yes</span></p> <p><span style="color:red">Yes</span><span style="font-family:宋体"><span style="color:red">标识已经成功配置</span></span></p> <p> </p> <h2><span style="font-family:宋体">四、测试</span></h2> <h3>4.1<span style="font-family:宋体">表创建同步测试</span></h3> <p><span style="font-family:宋体">测试步骤方法</span>:<span style="font-family:宋体">在</span>master<span style="font-family:宋体">的</span>test<span style="font-family:宋体">数据库中创建一个表</span>,<span style="font-family:宋体">名称为</span>t_book<span style="font-family:宋体">,然后去</span>slave<span style="font-family:宋体">中</span>test<span style="font-family:宋体">数据库查看表是否同步。</span></p> <p> </p> <p><span style="font-family:宋体">首先查看数据库中已经有的表</span>:</p> <p><span style="color:red">Master</span><span style="font-family:宋体"><span style="color:red">中</span></span><span style="color:red">:</span></p> <pre> <code>#mysql –uroot –proot Mysql>use test show tables; +----------------+ | Tables_in_test | +----------------+ | t_user         | +----------------+ 1 row in set (0.00 sec) mysql></code></pre> <p><img alt="6" class="img-thumbnail" src="/assist/images/blog/0bf994d9b7db4ed587e91dc085d0dbe2.png" /></p> <p><span style="font-family:宋体">同样查看</span>slave<span style="font-family:宋体">库中的</span>test<span style="font-family:宋体">库</span></p> <p><img alt="7" class="img-thumbnail" src="/assist/images/blog/034b5e8cf80f47298f9d4801b8cbdeb8.png" /></p> <p> </p> <p><span style="font-family:宋体">在</span>master<span style="font-family:宋体">的</span>test<span style="font-family:宋体">库中创建一个表</span>,<span style="font-family:宋体">名称为</span>t_book</p> <p><span style="font-family:宋体">首先进入</span>MySQL<span style="font-family:宋体">数据库</span></p> <p> </p> <p><span style="font-family:宋体">创建表</span>t_book</p> <pre> <code>mysql> create table t_book(id int,book_name varchar(50)); Query OK, 0 rows affected (0.09 sec) mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | t_book         | | t_user         | +----------------+ 2 rows in set (0.01 sec) mysql></code></pre> <p> </p> <p><img alt="8" class="img-thumbnail" src="/assist/images/blog/eb32f00cfba042d590533733be10f41f.png" /></p> <p> </p> <p><span style="font-family:宋体">查看</span>slave<span style="font-family:宋体">库中的</span>test</p> <p>Master<span style="font-family:宋体">已经在</span>test<span style="font-family:宋体">库中创建了一个</span>t_book<span style="font-family:宋体">的表格,现在查看</span>slave<span style="font-family:宋体">的</span>test<span style="font-family:宋体">数据库中是否已经同步</span></p> <p> </p> <p><span style="font-family:宋体">登录</span>slave</p> <pre> <code>#root –uroot –proot mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | t_book         | | t_user         | +----------------+ 2 rows in set (0.00 sec) mysql></code></pre> <p><img alt="9" class="img-thumbnail" src="/assist/images/blog/4055bd7d4c2c4b87a9db93d542141050.png" /></p> <p><span style="font-family:宋体">可以在</span>slave<span style="font-family:宋体">中看到</span>t_book<span style="font-family:宋体">已经同步过来</span>,</p> <p><img alt="10" class="img-thumbnail" src="/assist/images/blog/98b8f78e613c40f8a12a68007ef00d1e.png" /></p> <p><span style="font-family:宋体">查询数据为空</span></p> <h3>4.2<span style="font-family:宋体">表数据同步测试</span></h3> <p><span style="font-family:宋体">测试方式</span>:</p> <p><span style="font-family:宋体">向</span>Master<span style="font-family:宋体">中的</span>test<span style="font-family:宋体">数据库中的</span>t_book<span style="font-family:宋体">表插入一条测试数据</span>,<span style="font-family:宋体">然后去</span>slave<span style="font-family:宋体">的</span>test<span style="font-family:宋体">数据库查询</span>t_book<span style="font-family:宋体">表中是否存在</span></p> <p> </p> <p>Master<span style="font-family:宋体">操作</span>:</p> <p><img alt="master" class="img-thumbnail" src="/assist/images/blog/2620001766974224ba9cd69408c9cdc6.png" /></p> <p> </p> <p>Slave<span style="font-family:宋体">操作</span>:</p> <p><img alt="slave" class="img-thumbnail" src="/assist/images/blog/b14bda207a9f432aae84d581f7ad8907.png" /></p> <p> </p> <p>Slave<span style="font-family:宋体">中的数据已经同步。</span></p> <p> </p>
  • MySQL null转0

    MySQL查询中null转0本文主要讲解MySQL数据库查询中,通过ifnull函数将null替换为0,同样也可以替换为其他值。MySQL查询中null转0 SQL:select  ifnull(fieldName,0)  from table_name