<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>爱周末 &#187; mysql</title>
	<atom:link href="http://zhoumo123.cn/category/mysql/feed" rel="self" type="application/rss+xml" />
	<link>http://zhoumo123.cn</link>
	<description>知识分享，共同进步。zhoumo123.cn</description>
	<lastBuildDate>Thu, 07 Nov 2019 05:53:49 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0.1</generator>
	<item>
		<title>解决The user specified as a definer (&#8216;root&#8217;@&#8217;%&#8217;) does not exist 问题</title>
		<link>http://zhoumo123.cn/mysql/3640.html</link>
		<comments>http://zhoumo123.cn/mysql/3640.html#comments</comments>
		<pubDate>Wed, 18 Jul 2018 03:31:05 +0000</pubDate>
		<dc:creator><![CDATA[zhangc]]></dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://zhoumo123.cn/?p=3640</guid>
		<description><![CDATA[Error querying database. Cause: java.sql.SQLException: The user specified as a definer (&#8216;root&#8217;@&#8217;%&#8217;) does not exist ### Cause: java.sql.SQLException: The user specified as a definer (&#8216;root&#8217;@&#8217;%&#8217;) does not exist 遇到The user specified as a definer (&#8216;r ...  <a href="http://zhoumo123.cn/mysql/3640.html">  阅读全文 </a>]]></description>
				<content:encoded><![CDATA[<p>Error querying database. Cause: java.sql.SQLException: The user specified as a definer (&#8216;root&#8217;@&#8217;%&#8217;) does not exist<br />
### Cause: java.sql.SQLException: The user specified as a definer (&#8216;root&#8217;@&#8217;%&#8217;) does not exist</p>
<p>遇到The user specified as a definer (&#8216;root&#8217;@&#8217;%&#8217;) does not exist 问题，原因是没有权限，解决方法如下：<br />
<strong>1、添加访问权限</strong></p>
<p>执行SQL：<span style="color: #3366ff;">grant all privileges on *.* to root@&#8221;%&#8221; identified by &#8220;.&#8221;;</span></p>
<p><strong>2、更新权限</strong><br />
执行SQL： <span style="color: #3366ff;">flush privileges;</span></p>
<p><a href="http://zhoumo123.cn/wp-content/uploads/2018/07/sql.jpg"><img class="alignnone size-full wp-image-3641" src="http://zhoumo123.cn/wp-content/uploads/2018/07/sql.jpg" alt="sql" width="628" height="240" /></a></p>
<p>问题解决。</p>
]]></content:encoded>
			<wfw:commentRss>http://zhoumo123.cn/mysql/3640.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>修改my.ini导致MySQL57服务无法启动,服务没有报告任何错误 </title>
		<link>http://zhoumo123.cn/mysql/3594.html</link>
		<comments>http://zhoumo123.cn/mysql/3594.html#comments</comments>
		<pubDate>Fri, 09 Jun 2017 13:31:41 +0000</pubDate>
		<dc:creator><![CDATA[zhangc]]></dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://zhoumo123.cn/?p=3594</guid>
		<description><![CDATA[安装MySQL57数据库后，更改my.ini文件使数据库表实现区分大小写。在修改my.ini后导致MySQL57服务无法启动,服务没有报告任何错误 最后各种尝试发现是配置参数错误导致MySQL57服务无法启动。 查看了官方文档： Use lower_case_table_names=1 on all systems. The main disadvantage with this is that when you use SHOW TABLES or SHOW DATABASES, you do not see the names in their original lettercase. U ...  <a href="http://zhoumo123.cn/mysql/3594.html">  阅读全文 </a>]]></description>
				<content:encoded><![CDATA[<p>安装MySQL57数据库后，更改my.ini文件使数据库表实现区分大小写。在修改my.ini后导致MySQL57服务无法启动,服务没有报告任何错误 最后各种尝试发现是配置参数错误导致MySQL57服务无法启动。</p>
<div id="attachment_3595" style="width: 298px" class="wp-caption alignnone"><a href="http://zhoumo123.cn/wp-content/uploads/2017/06/err.jpg"><img class="wp-image-3595 size-full" title="MySQL57服务无法启动" src="http://zhoumo123.cn/wp-content/uploads/2017/06/err.jpg" alt="MySQL57服务无法启动" width="288" height="101" /></a><p class="wp-caption-text">MySQL57服务无法启动</p></div>
<p>查看了官方文档：</p>
<p>Use<span style="color: #000000;"><strong> lower_case_table_names=1 on all systems</strong>. </span>The main disadvantage with this is that when you use SHOW TABLES or SHOW DATABASES, you do not see the names in their original lettercase.</p>
<p>Use<strong><span style="color: #000000;"> lower_case_table_names=0 on Unix</span></strong> and<strong><span style="color: #000000;"> lower_case_table_names=2 on Windows.</span></strong> This preserves the lettercase of database and table names. The disadvantage of this is that you must ensure that your statements always refer to your database and table names with the correct lettercase on Windows. If you transfer your statements to Unix, where lettercase is significant, they do not work if the lettercase is incorrect.</p>
<p>在Windows下配置<strong> lower_case_table_names=2</strong>。</p>
<p><a href="http://zhoumo123.cn/wp-content/uploads/2017/06/mysql.jpg"><img class="alignnone size-full wp-image-3596" src="http://zhoumo123.cn/wp-content/uploads/2017/06/mysql.jpg" alt="mysql" width="303" height="109" /></a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://zhoumo123.cn/mysql/3594.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL数据库名和表名大写小写lower_case_table_names配置</title>
		<link>http://zhoumo123.cn/mysql/3551.html</link>
		<comments>http://zhoumo123.cn/mysql/3551.html#comments</comments>
		<pubDate>Thu, 18 Feb 2016 03:37:42 +0000</pubDate>
		<dc:creator><![CDATA[zhangc]]></dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[lower_case_table_names]]></category>

		<guid isPermaLink="false">http://zhoumo123.cn/?p=3551</guid>
		<description><![CDATA[数据库和表名在 Windows 中是大小写不敏感的 ，而在大多数类型的 Unix 系统中是大小写敏感的 Windows 版的 MySQL 默认继承 os 的大小写习惯，即使 SQL中有区分，在导入的时候都会被转为小写，如果今后再将此数据库导出就可能存在大小写的问题。my.ini 中有属性lower_case_table_names 可以更改此默认值，要严格区分大小写，将此项的置设置为2，再重启 MySQL 服务即可。 参考： [mysqld] lower_case_table_names=2 然而，该查询在Windows中是可以的。要想避免出现差别，最好采用一致的转换，例如总是用小写创建并引用 ...  <a href="http://zhoumo123.cn/mysql/3551.html">  阅读全文 </a>]]></description>
				<content:encoded><![CDATA[<p>数据库和表名在 Windows 中是大小写不敏感的 ，而在大多数类型的 Unix 系统中是大小写敏感的<br />
Windows 版的 MySQL 默认继承 os 的大小写习惯，即使 SQL中有区分，在导入的时候都会被转为小写，如果今后再将此数据库导出就可能存在大小写的问题。my.ini 中有属性lower_case_table_names 可以更改此默认值，要严格区分大小写，将此项的置设置为2，再重启 MySQL 服务即可。<br />
<strong>参考：<br />
[mysqld]<br />
lower_case_table_names=2</strong></p>
<p>然而，该查询在Windows中是可以的。要想避免出现差别，最好采用一致的转换，例如总是用小写创建并引用数据库名和表名。在大多数移植和使用中建议使用该转换。<br />
在MySQL中如何在硬盘上保存和使用表名和数据库名由lower_case_tables_name系统变量确定，可以在启动mysqld 时设置。lower_case_tables_name可以采用下面的任一值：</p>
<table style="width: 98%;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="2%">值</td>
<td width="98%">含义</td>
</tr>
<tr>
<td>0</td>
<td>使用CREATE TABLE或CREATE DATABASE语句指定的大写和小写在硬盘上保存表名和数据库名。名称比较对大小写敏感。在Unix系统中的默认设置即如此。请注意如果在大小写不敏感的文件系统上用&#8211;lower-case-table-names=0强制设为0，并且使用不同的大小写访问MyISAM表名，会导致索引破坏。</td>
</tr>
<tr>
<td>1</td>
<td>表名在硬盘上以小写保存，名称比较对大小写敏感。MySQL将所有表名转换为小写以便存储和查找。该行为也适合数据库名和表的别名。该值为Windows和Mac OS X系统中的默认值。</td>
</tr>
<tr>
<td>2</td>
<td>表名和数据库名在硬盘上使用CREATE TABLE或CREATE DATABASE语句指定的大小写进行保存，但MySQL将它们转换为小写以便查找。名称比较对大小写敏感。注释： 只 在对大小写不敏感的文件系统上适用! InnoDB表名以小写保存，例如lower_case_tables_name=1。</td>
</tr>
</tbody>
</table>
<p>http://blog.chinaunix.net/uid-26602509-id-4104999.html</p>
]]></content:encoded>
			<wfw:commentRss>http://zhoumo123.cn/mysql/3551.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL存储引擎MyISAM Archive选择</title>
		<link>http://zhoumo123.cn/mysql/3542.html</link>
		<comments>http://zhoumo123.cn/mysql/3542.html#comments</comments>
		<pubDate>Mon, 15 Feb 2016 03:28:00 +0000</pubDate>
		<dc:creator><![CDATA[zhangc]]></dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[MySQL存储引擎]]></category>

		<guid isPermaLink="false">http://zhoumo123.cn/?p=3542</guid>
		<description><![CDATA[一、MySQL的存储引擎 完整的引擎说明还是看官方文档：http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html 这里介绍一些主要的引擎 1、InnoDB存储引擎 InnoDB是MySQL的默认事务型引擎，它被设计用来处理大量的短期(short-lived)事务。除非有非常特别的原因需要使用其他的存储引擎，否则应该优先考虑InnoDB引擎。 建议使用MySQL5.5及以后的版本，因为这个版本及以后的版本的InnoDB引擎性能更好。 MySQL4.1以后的版本中，InnoDB可以将每个表的数据和索引存放在单独的文件中。这样在复制备份崩 ...  <a href="http://zhoumo123.cn/mysql/3542.html">  阅读全文 </a>]]></description>
				<content:encoded><![CDATA[<p><strong>一、MySQL的存储引擎</strong><br />
完整的引擎说明还是看官方文档：http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html<br />
这里介绍一些主要的引擎</p>
<p><strong>1、InnoDB存储引擎</strong><br />
InnoDB是MySQL的默认事务型引擎，它被设计用来处理大量的短期(short-lived)事务。除非有非常特别的原因需要使用其他的存储引擎，否则应该优先考虑InnoDB引擎。</p>
<p>建议使用MySQL5.5及以后的版本，因为这个版本及以后的版本的InnoDB引擎性能更好。<br />
MySQL4.1以后的版本中，InnoDB可以将每个表的数据和索引存放在单独的文件中。这样在复制备份崩溃恢复等操作中有明显优势。可以通过在my.cnf中增加innodb_file_per_table来开启这个功能。如下：</p>
<p><span style="color: #003366;">[mysqld]</span><br />
<span style="color: #003366;"> innodb_file_per_table</span></p>
<p>InnoDB采用MVCC来支持高并发，并且实现了四个标准的隔离级别。其默认级别是REPEATABLE READ(可重复读)，并且通过间隙锁(next-key locking)策略防止幻读的出现。(事务和事务隔离级别是另一个大题目，各自网补吧)。</p>
<p>InnoDB是基于聚簇索引建立的，聚簇索引对主键查询有很高的性能。不过它的二级索引(secondary index，非主键索引)中必须包含主键列，所以如果主键列很大的话，其他的所有索引都会很大。因此表上的索引较多的话，主键应当尽可能的小。</p>
<p>InnoDB的存储格式是平台独立的，可以将数据和索引文件从Intel平台复制到Sun SPARC平台或其他平台。</p>
<p>InnoDB通过一些机制和工具支持真正的热备份，MySQL的其他存储引擎不支持热备份。</p>
<p><strong>2、MyISAM存储引擎</strong><br />
MyISAM提供了大量的特性，包括全文索引、压缩、空间函数(GIS)等，但MyISAM不支持事务和行级锁，有一个毫无疑问的缺陷就是崩溃后无法安全恢复。</p>
<p>MyISAM会将表存储在两个文件在中：数据文件和索引文件，分别是.MYD和.MYI为扩展名。<br />
在MySQL5.0以前，只能处理4G的数据，5.0中可以处理256T的数据。</p>
<p>在数据不再进行修改操作时，可以对MyISAM表进行压缩，压缩后可以提高读能力，原因是减少了磁盘I/O。</p>
<p><strong>3、Archive引擎</strong><br />
Archive存储引擎只支持<strong><span style="color: #0000ff;">INSERT</span>和<span style="color: #0000ff;">SELECT</span></strong>操作，在MySQL5.1之前不支持索引。<br />
Archive表适合日志和数据采集类应用。<br />
Archive引擎支持行级锁和专用的缓存区，所以可以实现高并发的插入，但它不是一个事物型的引擎，而是一个针对高速插入和压缩做了优化的简单引擎。</p>
<p><strong>4、Blackhole引擎</strong><br />
Blackhole引擎没有实现任何存储机制，它会丢弃所有插入的数据，不做任何保存。但服务器会记录Blackhole表的日志，所以可以用于复制数据到备库，或者简单地记录到日志。但这种应用方式会碰到很多问题，因此并不推荐。</p>
<p><strong>5、CSV引擎</strong><br />
CSV引擎可以将普通的SCV文件作为MySQL的表来处理，但不支持索引。<br />
CSV引擎可以作为一种数据交换的机制，非常有用。</p>
<p><strong>6、Federated引擎</strong><br />
Federated引擎是访问其他MySQL服务器的一个代理，尽管该引擎看起来提供了一种很好的跨服务器的灵活性，但也经常带来问题，因此默认是禁用的。</p>
<p><strong>7、Memory引擎</strong><br />
如果需要快速地访问数据，并且这些数据不会被修改，重启以后丢失也没有关系，那么使用Memory表是非常有用。Memory表至少比MyISAM表要快一个数量级。<br />
Memory表是表级锁，因此并发写入的性能较低。它不支持BLOB或TEXT类型的列，并且每行的长度是固定的，这可能呆滞部分内存的浪费。<br />
临时表和Memory表不是一回事。临时表是指使用CREATE TEMPORARY TABLE语句创建的表，它可以使用任何存储引擎，只在单个连接中可见，当连接断开时，临时表也将不复存在。</p>
<p><strong>8、NDB集群引擎</strong><br />
MySQL服务器、NDB集群存储引擎，以及分布式的、share-nothing的、容灾的、高可用的NDB数据库的组合，被称为MySQL集群(MySQL Cluster)。</p>
<p><strong>其他第三方或社区引擎</strong><br />
XtraDB：是InnoDB的一个改进版本，可以作为InnoDB的一个完美的替代产品。<br />
TokuDB：使用了一种新的叫做分形树(Fractal Trees)的索引数据结构。<br />
Infobright：是最有名的面向列的存储引擎。<br />
Groonga：是一款全文索引引擎。<br />
OQGraph：该引擎由Open Query研发，支持图操作(比如查找两点之间的最短路径)。<br />
Q4M：该引擎在MySQL内部实现了队列操作。<br />
SphinxSE：该引擎为Sphinx全文索引搜索服务器提供了SQL接口。</p>
<p><strong>二、选择合适的引擎</strong><br />
大部分情况下，InnoDB都是正确的选择，可以简单地归纳为一句话“除非需要用到某些InnoDB不具备的特性，并且没有其他办法可以替代，否则都应该优先选择InnoDB引擎”。<br />
除非万不得已，否则建议不要混合使用多种存储引擎，否则可能带来一系列负责的问题，以及一些潜在的bug和边界问题。</p>
<p>如果应用需要不同的存储引擎，请先考虑以下几个因素：</p>
<p><strong><em>事务：</em></strong><br />
如果应用需要事务支持，那么InnoDB(或者XtraDB)是目前最稳定并且经过验证的选择。</p>
<p><em><strong>备份：</strong></em><br />
如果可以定期地关闭服务器来执行备份，那么备份的因素可以忽略。反之，如果需要在线热备份，那么选择InnoDB就是基本的要求。</p>
<p><em><strong>崩溃恢复</strong></em><br />
MyISAM崩溃后发生损坏的概率比InnoDB要高很多，而且恢复速度也要慢。</p>
<p><em><strong>特有的特性</strong></em><br />
如果一个存储引擎拥有一些关键的特性，同时却又缺乏一些必要的特性，那么有时候不得不做折中的考虑，或者在架构设计上做一些取舍。</p>
<p>有些查询SQL在不同的引擎上表现不同。比较典型的是：<br />
<span style="color: #3366ff;">SELECT COUNT(*) FROM table;</span><br />
对于MyISAM确实会很快，但其他的可能都不行。</p>
<p><strong>三、应用举例</strong></p>
<p><strong>1、日志型应用</strong><br />
MyISAM或者Archive存储引擎对这类应用比较合适，因为他们开销低，而且插入速度非常快。<br />
如果需要对记录的日志做分析报表，生成报表的SQL很可能会导致插入效率明显降低，这时候该怎么办？<br />
一种解决方法，是利用MySQL内置的复制方案将数据复制一份到备库，然后在备库上执行比较消耗时间和CPU的查询。当然也可以在系统负载较低的时候执行报表查询操作，但应用在不断变化，如果依赖这个策略可能以后会导致问题。<br />
另一种方法，在日志记录表的名字中包含年和月的信息，这样可以在已经没有插入操作的历史表上做频繁的查询操作，而不会干扰到最新的当前表上的插入操作。</p>
<p><strong>2、只读或者大部分情况下只读的表</strong><br />
有些表的数据用于编制类目或者分列清单（如工作岗位），这种应用场景是典型的读多写少的业务。如果不介意MyISAM的崩溃恢复问题，选用MyISAM引擎是合适的。（MyISAM只将数据写到内存中，然后等待操作系统定期将数据刷出到磁盘上）</p>
<p><strong>3、订单处理</strong><br />
涉及订单处理，支持事务是必要的，InnoDB是订单处理类应用的最佳选择。</p>
<p><strong>4、大数据量</strong><br />
如果数据增长到10TB以上的级别，可能需要建立数据仓库。Infobright是MySQL数据仓库最成功的方案。也有一些大数据库不适合Infobright，却可能适合TokuDB。</p>
<p>http://toplchx.iteye.com/blog/1941415</p>
]]></content:encoded>
			<wfw:commentRss>http://zhoumo123.cn/mysql/3542.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Msg] Finished &#8211; Unsuccessfully失败MySQL导入sql文件出错</title>
		<link>http://zhoumo123.cn/mysql/3537.html</link>
		<comments>http://zhoumo123.cn/mysql/3537.html#comments</comments>
		<pubDate>Fri, 29 Jan 2016 01:39:06 +0000</pubDate>
		<dc:creator><![CDATA[zhangc]]></dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[UTF-8]]></category>

		<guid isPermaLink="false">http://zhoumo123.cn/?p=3537</guid>
		<description><![CDATA[MySQL再导入sql文件时，提示 [Msg] Finished &#8211; Unsuccessfully 完成失败，导致原因为编码不正确。 解决办法： 检查SQL文件查看当前编码，将编码改为：以utf8无bom格式编码。 以下来源网络，请参考： UTF-8 不需要 BOM，尽管 Unicode 标准允许在 UTF-8 中使用 BOM。 所以不含 BOM 的 UTF-8 才是标准形式，在 UTF-8 文件中放置 BOM 主要是微软的习惯（顺便提一下：把带有 BOM 的小端序 UTF-16 称作「Unicode」而又不详细说明，这也是微软的习惯）。 BOM（byte order mark）是 ...  <a href="http://zhoumo123.cn/mysql/3537.html">  阅读全文 </a>]]></description>
				<content:encoded><![CDATA[<p>MySQL再导入sql文件时，提示 [Msg] Finished &#8211; Unsuccessfully 完成失败，导致原因为编码不正确。</p>
<p><strong>解决办法：</strong><br />
检查SQL文件查看当前编码，将编码改为：以utf8无bom格式编码。</p>
<p><a href="http://zhoumo123.cn/wp-content/uploads/2016/01/utf-8-bom.jpg"><img class="alignnone wp-image-3538 size-full" title="以utf8无bom格式编码" src="http://zhoumo123.cn/wp-content/uploads/2016/01/utf-8-bom.jpg" alt="以utf8无bom格式编码" width="305" height="262" /></a></p>
<p>以下来源网络，请参考：</p>
<p>UTF-8 不需要 BOM，尽管 Unicode 标准允许在 UTF-8 中使用 BOM。<br />
所以不含 BOM 的 UTF-8 才是标准形式，在 UTF-8 文件中放置 BOM 主要是微软的习惯（顺便提一下：把带有 BOM 的小端序 UTF-16 称作「Unicode」而又不详细说明，这也是微软的习惯）。</p>
<p>BOM（byte order mark）是为 UTF-16 和 UTF-32 准备的，用于标记字节序（byte order）。微软在 UTF-8 中使用 BOM 是因为这样可以把 UTF-8 和 ASCII 等编码明确区分开，但这样的文件在 Windows 之外的操作系统里会带来问题。</p>
<p>「UTF-8」和「带 BOM 的 UTF-8」的区别就是有没有 BOM。即文件开头有没有 U+FEFF。<br />
UTF-8 的网页代码不应使用 BOM，否则常常会出错。</p>
]]></content:encoded>
			<wfw:commentRss>http://zhoumo123.cn/mysql/3537.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mysql错误：Duplicate entry &#8216;xxx&#8217; for key &#8216;PRIMARY&#8217;的解决方法</title>
		<link>http://zhoumo123.cn/mysql/3502.html</link>
		<comments>http://zhoumo123.cn/mysql/3502.html#comments</comments>
		<pubDate>Tue, 12 Jan 2016 08:36:21 +0000</pubDate>
		<dc:creator><![CDATA[zhangc]]></dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://zhoumo123.cn/?p=3502</guid>
		<description><![CDATA[mysql 出现Duplicate entry &#8216;xxx&#8217; for key &#8216;PRIMARY&#8217;,一个自增字段达到了上限，而且继续向里面插入数据的话会出现 Failed to read auto-increment value from storage engine 的提示。但是今天遇到了另一个错误提示：Duplicate entry &#8216;xxx&#8217; for key &#8216;PRIMARY&#8217;，经过排查同样是因为自增字段达到了上限。 那为什么同一个问题会出现不同的提示呢？ 测试结果是这样的： 1、如果这个时候数据 ...  <a href="http://zhoumo123.cn/mysql/3502.html">  阅读全文 </a>]]></description>
				<content:encoded><![CDATA[<p>mysql 出现Duplicate entry &#8216;xxx&#8217; for key &#8216;PRIMARY&#8217;,一个自增字段达到了上限，而且继续向里面插入数据的话会出现 Failed to read auto-increment value from storage engine 的提示。但是今天遇到了另一个错误提示：Duplicate entry &#8216;xxx&#8217; for key &#8216;PRIMARY&#8217;，经过排查同样是因为自增字段达到了上限。</p>
<p>那为什么同一个问题会出现不同的提示呢？</p>
<p>测试结果是这样的：<br />
1、如果这个时候数据表里面没有数据，而且我们用使用 INSERT INTO VALUES 这样的语句插入，就会提示 Duplicate entry &#8216;xxx&#8217; for key &#8216;PRIMARY&#8217; 这类的字样。</p>
<p>2、如果这个时候数据表里面没有数据，而且我们使用 INSERTINTO SELECT FROM 这样的语句插入，并且存储引擎是INNODB的话，就会提示 Failed to read auto-increment value from storage engine 这样的错误.</p>
<p>3、如果这个时候数据表里面有数据，则总是会出现Duplicate entry &#8216;xxx&#8217; for key &#8216;PRIMARY&#8217; 这类的字样的错误。<br />
所以，出现Duplicate entry &#8216;xxx&#8217; for key &#8216;PRIMARY&#8217; 这个时容易理解的。而另外一个提示是因为INNODB 引擎特有的二级缓存所导致的。数据不会先插入数据表，而会先存到缓存里面，只是增加表里的自增数。所以当自增数达到极限时，InnoDB要获取自增值然后存储到缓存的时候，发现找不到更高的数字了。</p>
<p>http://blog.csdn.net/topasstem8/article/details/17893197</p>
]]></content:encoded>
			<wfw:commentRss>http://zhoumo123.cn/mysql/3502.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql查询Unknown column &#8216;xxx&#8217; in &#8216;on clause&#8217;问题解决</title>
		<link>http://zhoumo123.cn/mysql/3487.html</link>
		<comments>http://zhoumo123.cn/mysql/3487.html#comments</comments>
		<pubDate>Fri, 08 Jan 2016 08:36:26 +0000</pubDate>
		<dc:creator><![CDATA[zhangc]]></dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://zhoumo123.cn/?p=3487</guid>
		<description><![CDATA[mysql查询出现提示Unknown column &#8216;xxx&#8217; in &#8216;on clause&#8217;的问题原因为： MySQL5.0 Bug, 要把联合的表用括号包含起来才行: SELECT (c.id, a.id, b.id) FROM A a, B b LEFT JOIN C c ON c.a_id = a.a_id AND c.b_id = b.b_id 这句话执行应该是没有错误的,但是Mysql 5 下执行则会出错。 因为mysql下有这样一个BUG,要把联合的表用括号包含起来才行： SELECT (c.id, a.id, b.id) FROM  ...  <a href="http://zhoumo123.cn/mysql/3487.html">  阅读全文 </a>]]></description>
				<content:encoded><![CDATA[<p>mysql查询出现提示Unknown column &#8216;xxx&#8217; in &#8216;on clause&#8217;的问题原因为：</p>
<p>MySQL5.0 Bug, 要把联合的表用括号包含起来才行:</p>
<p><span style="color: #3366ff;">SELECT<strong> (c.id, a.id, b.id)</strong> FROM A a, B b LEFT JOIN C c ON c.a_id = a.a_id AND c.b_id = b.b_id</span></p>
<p>这句话执行应该是没有错误的,但是Mysql 5 下执行则会出错。</p>
<p>因为mysql下有这样一个BUG,要把联合的表用括号包含起来才行：</p>
<p><span style="color: #3366ff;">SELECT<span style="color: #ff0000;"> (c.id, a.id, b.id)</span> FROM<span style="color: #ff0000;"> (A a, B b)</span> LEFT JOIN C c ON c.a_id = a.a_id AND c.b_id = b.b_id</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://zhoumo123.cn/mysql/3487.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql返回#1114 &#8211; The table &#8216;xxxx&#8217;is full解决方法</title>
		<link>http://zhoumo123.cn/mysql/3423.html</link>
		<comments>http://zhoumo123.cn/mysql/3423.html#comments</comments>
		<pubDate>Wed, 09 Dec 2015 01:54:47 +0000</pubDate>
		<dc:creator><![CDATA[zhangc]]></dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://zhoumo123.cn/?p=3423</guid>
		<description><![CDATA[发现执行mysql的 REPLACE INTO 的时候mysql返回 #1114 &#8211; The table ‘xxxx’ is full 这个错误。 以前没有遇到过，于是查找资料解决这个问题。得知是由于内存表的大小超过了规定的范围，于是搜索解决方法，网上提到的有两种解决方法， 一种是修改 my-innodb-heavy-4G.ini文件里的tmp_table_size参数，然后重启mysql服务。 另外一种是修改max_heap_table_size参数。 [root@localhost etc]# vi /etc/rc.d/init.d/mysql 找到 $bindir/mysql ...  <a href="http://zhoumo123.cn/mysql/3423.html">  阅读全文 </a>]]></description>
				<content:encoded><![CDATA[<p>发现执行mysql的 REPLACE INTO 的时候mysql返回 #1114 &#8211; The table ‘xxxx’ is full<br />
这个错误。</p>
<p>以前没有遇到过，于是查找资料解决这个问题。得知是由于内存表的大小超过了规定的范围，于是搜索解决方法，网上提到的有两种解决方法，</p>
<p>一种是修改 my-innodb-heavy-4G.ini文件里的tmp_table_size参数，然后重启mysql服务。</p>
<p>另外一种是修改max_heap_table_size参数。</p>
<p>[root@localhost etc]# <span style="color: #0000ff;">vi /etc/rc.d/init.d/mysql</span><br />
找到<br />
<strong>$bindir/mysqld_safe &#8211;datadir=$datadir &#8211;pid-file=$pid_file &gt;/dev/null 2&gt;&amp;1 &amp;</strong><br />
修改为<br />
<strong>$bindir/mysqld_safe &#8211;datadir=$datadir &#8211;pid-file=$pid_file -O tmp_table_size=64M -O max_heap_table_size=32M &gt;/dev/null 2&gt;&amp;1 &amp;</strong></p>
<p>重启mysql<br />
[root@localhost etc]# <span style="color: #0000ff;">/usr/bin/mysqladmin -u root -p shutdown</span><br />
Enter password:<br />
[root@localhost etc]#<span style="color: #0000ff;"> /etc/init.d/mysql start</span><br />
[root@localhost etc]#<span style="color: #0000ff;"> mysql</span></p>
<p>查看是否己修改<br />
<strong>mysql&gt; show variables like &#8216;%max_heap_table_size%';</strong><br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;-+<br />
| Variable_name | Value |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;-+<br />
| max_heap_table_size | 33553408 |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;-+<br />
1 row in set (0.00 sec)<br />
<strong>mysql&gt; show variables like &#8216;%tmp_table_size%';</strong><br />
+&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;-+<br />
| Variable_name | Value |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;-+<br />
| tmp_table_size | 67108864 |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;-+<br />
1 row in set (0.00 sec)<br />
己经修改成功！</p>
<p>http://blog.sina.com.cn/s/blog_8e743a770101iwzt.html</p>
]]></content:encoded>
			<wfw:commentRss>http://zhoumo123.cn/mysql/3423.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql查大数据时报错Incorrect key file for table &#8216;/tmp/#sql&#8230;&#039;; try to repair it&#8217; in &#8230;</title>
		<link>http://zhoumo123.cn/mysql/3417.html</link>
		<comments>http://zhoumo123.cn/mysql/3417.html#comments</comments>
		<pubDate>Wed, 09 Dec 2015 01:40:18 +0000</pubDate>
		<dc:creator><![CDATA[zhangc]]></dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql临时文件]]></category>

		<guid isPermaLink="false">http://zhoumo123.cn/?p=3417</guid>
		<description><![CDATA[今天在php mysql查大数据时报错，&#60;b&#62;Fatal error&#60;/b&#62;: Uncaught exception &#8216;PDOException&#8217; with message &#8216;SQLSTATE[HY000]: General error:126 Incorrect key file for table &#8216;/tmp/#sql_72c_0.MYI'; try to repair it&#8217; in &#8230; 当mysql的临时文件大小设置太小，或者由于并发量太大导致临时文件存放的目录空间大小不够时都会报这个错误。&#038; ...  <a href="http://zhoumo123.cn/mysql/3417.html">  阅读全文 </a>]]></description>
				<content:encoded><![CDATA[<p>今天在php mysql查大数据时报错，&lt;b&gt;Fatal error&lt;/b&gt;: Uncaught exception &#8216;PDOException&#8217; with message &#8216;SQLSTATE[HY000]: General error:126 Incorrect key file for table &#8216;/tmp/#sql_72c_0.MYI'; try to repair it&#8217; in &#8230;</p>
<p><a href="http://zhoumo123.cn/wp-content/uploads/2015/12/tmp-err1.jpg"><img class="alignnone size-full wp-image-3418" src="http://zhoumo123.cn/wp-content/uploads/2015/12/tmp-err1.jpg" alt="tmp-err1" width="690" height="159" /></a><br />
当mysql的临时文件大小设置太小，或者由于并发量太大导致临时文件存放的目录空间大小不够时都会报这个错误。&#8221;incorrect key file for the table &#8216;/tmp/#sql&#8230;.';try to repair it&#8221;</p>
<p>一般的tmp目录的权限比较特别是drwxrwxrwt 就是1777<br />
表示任何人都可以在此目录拥有写权限但是不能删除别人拥有的文件。</p>
<p>d:指的是目录<br />
t:sticky bit，设置了粘住位</p>
<p><strong>具体修改临时表目录的步骤为：</strong></p>
<p><strong>1)</strong> <strong>查看法语站当前磁盘空间使用情况，建议将临时表存放目录设置在/var下。</strong></p>
<p><a href="http://zhoumo123.cn/wp-content/uploads/2015/12/tmp-err2.jpg"><img class="alignnone size-full wp-image-3419" src="http://zhoumo123.cn/wp-content/uploads/2015/12/tmp-err2.jpg" alt="tmp-err2" width="546" height="111" /></a><br />
【修改tmp目录】Incorrect &lt;wbr&gt;key &lt;wbr&gt;file &lt;wbr&gt;for &lt;wbr&gt;table &lt;wbr&gt;&#8217;/tmp/#sql_bd2_0.MYI&#8217;解决<br />
[root@wholesale /]# <span style="color: #0000ff;">mkdir /var/tmp</span><br />
[root@wholesale /]# <span style="color: #0000ff;">chmod 1777 /var/tmp/</span><br />
<strong>2) my.cnf中[mysqld]下增加：</strong></p>
<p><span style="color: #0000ff;">tmpdir=/var/tmp</span></p>
<p><strong>3) 重启mysql服务</strong><br />
<strong>4) 查看mysql错误日志情况，看是否报错。</strong><br />
<strong>5) 进入mysql查看当前的tmpdir情况，确认是否修改完成</strong><br />
<span style="color: #0000ff;">show variables like &#8216;tmpdir';</span></p>
<p><a href="http://zhoumo123.cn/wp-content/uploads/2015/12/tmp-err3.jpg"><img class="alignnone size-full wp-image-3420" src="http://zhoumo123.cn/wp-content/uploads/2015/12/tmp-err3.jpg" alt="tmp-err3" width="560" height="100" /></a></p>
<p>http://blog.sina.com.cn/s/blog_4c197d420101bdn9.html</p>
]]></content:encoded>
			<wfw:commentRss>http://zhoumo123.cn/mysql/3417.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php mysql分页大数据查询方案大数据优化</title>
		<link>http://zhoumo123.cn/php/3356.html</link>
		<comments>http://zhoumo123.cn/php/3356.html#comments</comments>
		<pubDate>Tue, 13 Oct 2015 09:15:46 +0000</pubDate>
		<dc:creator><![CDATA[zhangc]]></dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php大数据]]></category>

		<guid isPermaLink="false">http://zhoumo123.cn/?p=3356</guid>
		<description><![CDATA[如何将分页SQL做到更优化，让MySQL执行的更快的方法。 一般的情况下，我们的分页SQL语句是这样的： SELECT * FROM table ORDER BY id LIMIT 1000,10; 以上SQL语句在原理上和在实际操作中是不会存在什么问题，但是当table表的数据量达到几十万以上的时候，上面的语句执行一遍，可能会要执行个十几秒的时间，并且当页数越靠后的话，执行的时间会越长，这个时候我们就需要找到一种更快的查询办法来替代这种操作了。 网上已经有很多优化的方法，基本都是这样的： SELECT * FROM table WHERE id &#62;= (SELECT id FROM t ...  <a href="http://zhoumo123.cn/php/3356.html">  阅读全文 </a>]]></description>
				<content:encoded><![CDATA[<p>如何将分页SQL做到更优化，让MySQL执行的更快的方法。</p>
<p>一般的情况下，我们的分页SQL语句是这样的：</p>
<p><strong>SELECT * FROM table ORDER BY id LIMIT 1000,10;</strong><br />
以上SQL语句在原理上和在实际操作中是不会存在什么问题，但是当table表的数据量达到几十万以上的时候，上面的语句执行一遍，可能会要执行个十几秒的时间，并且当页数越靠后的话，执行的时间会越长，这个时候我们就需要找到一种更快的查询办法来替代这种操作了。</p>
<p>网上已经有很多优化的方法，基本都是这样的：</p>
<p><strong> SELECT * FROM table WHERE id &gt;= (SELECT id FROM table LIMIT 1000000, 1) LIMIT 10;</strong><br />
以上SQL语句是一个不错的解决方法，分页查询的速度基本会保持在1秒之内，但据经验总结得出还有一种更好的办法，如下：</p>
<p><strong> SELECT * FROM table WHERE id BETWEEN 1000000 AND 1000010;</strong><br />
相比以上的解决办法，在速度上还会快了不少。</p>
<p>另外分享两个关于查询的技巧：</p>
<p>（1）如果需要查询 id 不是连续的一段，最佳的做法就是先找出 id ，然后用 in 查询：</p>
<p><strong> SELECT * FROM table WHERE id IN(10000, 100000, 1000000&#8230;);</strong><br />
（2）当查询字段一较长字符串的时候，表设计时要为该字段多加一个字段，如存储网址的字段，在需要查询该字段的时候，不要直接查询字符串，效率低下，应该查诡该字串的crc32或md5值。</p>
]]></content:encoded>
			<wfw:commentRss>http://zhoumo123.cn/php/3356.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
