﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-flyonok-随笔分类-mysql</title><link>http://www.cppblog.com/flyonok/category/6244.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 15 Apr 2012 09:25:54 GMT</lastBuildDate><pubDate>Sun, 15 Apr 2012 09:25:54 GMT</pubDate><ttl>60</ttl><item><title>YouTube开源项目Vitess：打造高性能MySQL前端</title><link>http://www.cppblog.com/flyonok/archive/2012/04/10/170814.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Tue, 10 Apr 2012 13:59:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/archive/2012/04/10/170814.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/170814.html</wfw:comment><comments>http://www.cppblog.com/flyonok/archive/2012/04/10/170814.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/170814.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/170814.html</trackback:ping><description><![CDATA[<p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><span style="font-family: 微软雅黑; "><strong>项目简介</strong></span></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><span style="font-family: 微软雅黑; ">关系型数据库（如MySQL）最初并没有针对大型Web应用进行构建和优化，Vitess项目的目标是推动MySQL数据库面向大型Web应用的扩展性。</span></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><span style="font-family: 微软雅黑; ">Vtocc是vitess项目中第一个可用的产品，它的作用是作为MySQL的前端，为接收和发送SQL命令提供一个RPC接口。它能够在少量且吞吐量合理（~10kqps）的数据库连接上高效复用大量的传入连接（10K+）。另外，它还内置了SQL语法分析器，使得服务器有能力理解并优化处理接收到的查询语句。</span></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><span style="font-family: 微软雅黑; ">Vtocc已经在许多大型生产环境中有所应用，例如，YouTube全新的MySQL服务架构以其为核心。</span></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong><span style="font-family: 微软雅黑; ">特性概览</span></strong></p><ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 20px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 12px; line-height: 18px; text-align: left; background-color: #f8fafd; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; "><span style="font-family: 微软雅黑; ">Python DBAPI 2.0兼容的客户端接口（vt_occ2.py）</span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; "><span style="font-family: 微软雅黑; ">Go语言数据库/SQL兼容的客户端接口</span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; "><span style="font-family: 微软雅黑; ">支持基于HTTP或TCP套接字的多种协议</span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; "><span style="font-family: 微软雅黑; ">支持绑定变量查询，支持查询缓存：可避免重复分析，高效复用查询计划</span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; "><span style="font-family: 微软雅黑; ">支持连接池</span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; "><span style="font-family: 微软雅黑; ">事务处理管理：可以限制事务处理的并发连接数</span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; "><span style="font-family: 微软雅黑; ">DML注释：每个DML语句都包含一个注释区域，以标识它所改动行的主键</span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; "><span style="font-family: 微软雅黑; ">内置可靠性解决方案</span><ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 20px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; "><span style="font-family: 微软雅黑; ">强化查询：可以为子查询重用正在执行的查询</span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; "><span style="font-family: 微软雅黑; ">限制查询返回的行数量的最大值</span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; "><span style="font-family: 微软雅黑; ">可终止运行时间过长无响应的事务</span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; "><span style="font-family: 微软雅黑; ">可终止运行时间过长无法返回结果的查询</span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; "><span style="font-family: 微软雅黑; ">可自动终止后台空闲连接，以避免出现脱机数据库错误</span></li></ul></li></ul><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><span style="font-family: 微软雅黑; ">Vtocc未来可能会具备的新特性：</span></p><ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 20px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 12px; line-height: 18px; text-align: left; background-color: #f8fafd; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; "><span style="font-family: 微软雅黑; ">支持行缓存的一致性，重写查询，以最大化行缓存的利用率</span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; "><span style="font-family: 微软雅黑; ">内置binlog解释器，支持由vtocc注入的提供行变更更新流的DML文档分析</span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; "><span style="font-family: 微软雅黑; ">支持DDL</span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: disc; font-size: 14px; line-height: 25px; "><span style="font-family: 微软雅黑; ">支持持久性连接 （张志平/编译）</span></li></ul><img src ="http://www.cppblog.com/flyonok/aggbug/170814.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2012-04-10 21:59 <a href="http://www.cppblog.com/flyonok/archive/2012/04/10/170814.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql的当前用户</title><link>http://www.cppblog.com/flyonok/archive/2012/01/29/164652.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Sun, 29 Jan 2012 09:07:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/archive/2012/01/29/164652.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/164652.html</wfw:comment><comments>http://www.cppblog.com/flyonok/archive/2012/01/29/164652.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/164652.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/164652.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><p><span style="color: #0000ff; ">MYSQL有个命令可以列出所有当前连接（</span>&nbsp;<span style="color: #0000ff; ">show processlist;</span>&nbsp;<span style="color: #0000ff; ">），但由于其结果集不是普通的查询结果集，程序处理时可能有问题，建议使用以下SQL语句：<br />&nbsp;<br />select id,user as user_,host,db,command,time,state from information_schema.PROCESSLIST<br />&nbsp;<br />Oracle的SQL语句:<br />select * from v$session where username is not null order by logon_time, sid</span></p><p><span style="color: #0000ff; "><br /></span></p><p><span style="color: #0000ff; ">为保持和上面MySQL的字段对应关系，还可以这样改下：</span></p><p><span style="color: #0000ff; ">select sid as id,username as user_, machine as host,schemaname as db,action as command,'' as time,status as state from v$session where username is not null order by logon_time, sid</span></p></span><span class="Apple-style-span" style="font-family: Arial; line-height: 26px; background-color: #ffffff; "><p><span style="font-family: Arial; font-size: 14px; line-height: 26px; "><p><font class="Apple-style-span" color="#0000ff"><br /></font></p></span></p></span><img src ="http://www.cppblog.com/flyonok/aggbug/164652.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2012-01-29 17:07 <a href="http://www.cppblog.com/flyonok/archive/2012/01/29/164652.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>left join现象之一，出现null</title><link>http://www.cppblog.com/flyonok/archive/2010/11/26/134729.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Fri, 26 Nov 2010 05:36:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/archive/2010/11/26/134729.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/134729.html</wfw:comment><comments>http://www.cppblog.com/flyonok/archive/2010/11/26/134729.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/134729.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/134729.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: mysql left join, right join&nbsp;&nbsp;<a href='http://www.cppblog.com/flyonok/archive/2010/11/26/134729.html'>阅读全文</a><img src ="http://www.cppblog.com/flyonok/aggbug/134729.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2010-11-26 13:36 <a href="http://www.cppblog.com/flyonok/archive/2010/11/26/134729.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mysql Tuning tools</title><link>http://www.cppblog.com/flyonok/archive/2010/11/25/134647.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Thu, 25 Nov 2010 08:43:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/archive/2010/11/25/134647.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/134647.html</wfw:comment><comments>http://www.cppblog.com/flyonok/archive/2010/11/25/134647.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/134647.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/134647.html</trackback:ping><description><![CDATA[<span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; orphans: 2; widows: 2; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: 14px; LINE-HEIGHT: 20px; FONT-FAMILY: Arial; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px">
<p class=postTitle style="LINE-HEIGHT: normal">来源:http://www.tuifei.com/2007/07/18/mysql-tuning-tools.htm</p>
<p class=postTitle style="LINE-HEIGHT: normal"></p>
<p class=postTitle style="LINE-HEIGHT: normal">最近朋友的网站由于用户量上升及其他原因，使得mysql数据库性能出现严重问题，导致用户无法正常登录及使用。<br style="LINE-HEIGHT: normal">为了找出性能问题的根结，Google了很多，最后从以下方面入手：<br style="LINE-HEIGHT: normal">1. 配置mysql log_slow_queries 功能<br style="LINE-HEIGHT: normal">输出哪些耗时的sql语句到日志中，使用mysqldumpslow去统计，从而确定是哪些应用的数据库查询影响了数据库性能。<br style="LINE-HEIGHT: normal">log_slow_queries在my.cnf的配置，示例如下：<br style="LINE-HEIGHT: normal">log_slow_queries<br style="LINE-HEIGHT: normal">long_query_time = 2<br style="LINE-HEIGHT: normal">log_long_format<br style="LINE-HEIGHT: normal"><br style="LINE-HEIGHT: normal">mysqldumpslow 的使用，到日志所在目录，执行：<br style="LINE-HEIGHT: normal"># mysqldumpslow ./www-slow.log</p>
<p style="LINE-HEIGHT: normal">2. 利用<a style="LINE-HEIGHT: normal" href="http://jeremy.zawodny.com/mysql/mytop/"><u><font color=#0000ff>mytop</font></u></a>实时查看mysql的负载情况<br style="LINE-HEIGHT: normal"><a style="LINE-HEIGHT: normal" href="http://jeremy.zawodny.com/mysql/mytop/"><u><font color=#0000ff>mytop</font></u></a>的最新版本为1.6，<a style="LINE-HEIGHT: normal" href="http://jeremy.zawodny.com/mysql/mytop/mytop-1.6.tar.gz"><u><font color=#0000ff>mytop-1.6.tar.gz</font></u></a>的安装需要以下软件包支持：<br style="LINE-HEIGHT: normal">DBI-1.58.tar.gz<br style="LINE-HEIGHT: normal">TermReadKey-2.30.tar.gz<br style="LINE-HEIGHT: normal">DBD-mysql-4.005<span class=Apple-converted-space>&nbsp;</span><br style="LINE-HEIGHT: normal">此软件安装比较简单，可以参照readme即可。<br style="LINE-HEIGHT: normal">一下是安装中常会出现的问题：<br style="LINE-HEIGHT: normal">如果运行mytop时出现以下错误：<br style="LINE-HEIGHT: normal">1) mysql.so: undefined symbol: DBIc_TRACE_LEVEL<br style="LINE-HEIGHT: normal">基本上确定是DBI及DBD-mysql的版本不匹配造成的，<br style="LINE-HEIGHT: normal">详见：<br style="LINE-HEIGHT: normal"><a style="LINE-HEIGHT: normal" href="http://www.cpanforum.com/posts/5528"><u><font color=#0000ff>http://www.cpanforum.com/posts/5528</font></u></a></p>
<p style="LINE-HEIGHT: normal">2） Segmentation fault<br style="LINE-HEIGHT: normal">基本上确定是由于TermReadKey版本和mytop要求不匹配造成的，<br style="LINE-HEIGHT: normal">详见：<br style="LINE-HEIGHT: normal"><a style="LINE-HEIGHT: normal" href="http://www.webhostingtalk.com/archive/index.php/t-429329.html"><u><font color=#0000ff>http://www.webhostingtalk.com/archive/index.php/t-429329.html</font></u></a></p>
<p style="LINE-HEIGHT: normal">在找到有问题的sql语句後，对my.cnf也做了相应的处理，主要是参考my-huge.cnf，内容如下，欢迎对此配置进行讨论:<br style="LINE-HEIGHT: normal"># cat my.cnf</p>
<div class=hl-surround style="FONT-SIZE: 14px; FILTER: none; VISIBILITY: visible! important; WORD-BREAK: break-all; LINE-HEIGHT: normal; ZOOM: 1! important; FONT-FAMILY: Arial; WORD-WRAP: break-word">
<ol class="hl-main ln-show" title="Double click to hide line number." style="LINE-HEIGHT: normal">
    <li class=hl-firstline style="LINE-HEIGHT: normal">[client]</li>
    <li style="LINE-HEIGHT: normal">port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 3306</li>
    <li style="LINE-HEIGHT: normal">socket&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = /tmp/mysql.sock</li>
    <li style="LINE-HEIGHT: normal">[mysqld]</li>
    <li style="LINE-HEIGHT: normal">port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 3306</li>
    <li style="LINE-HEIGHT: normal">socket&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = /tmp/mysql.sock</li>
    <li style="LINE-HEIGHT: normal">skip-locking</li>
    <li style="LINE-HEIGHT: normal">key_buffer = 384M</li>
    <li style="LINE-HEIGHT: normal">max_allowed_packet = 1M</li>
    <li style="LINE-HEIGHT: normal">table_cache = 512</li>
    <li style="LINE-HEIGHT: normal">sort_buffer_size = 4M</li>
    <li style="LINE-HEIGHT: normal">read_buffer_size = 4M</li>
    <li style="LINE-HEIGHT: normal">net_buffer_length = 64K</li>
    <li style="LINE-HEIGHT: normal">read_rnd_buffer_size = 8M</li>
    <li style="LINE-HEIGHT: normal">myisam_sort_buffer_size = 64M</li>
    <li style="LINE-HEIGHT: normal">max_connections = 1500</li>
    <li style="LINE-HEIGHT: normal">max_connect_errors = 1500</li>
    <li style="LINE-HEIGHT: normal">query_cache_size = 64M</li>
    <li style="LINE-HEIGHT: normal">thread_cache_size = 8</li>
    <li style="LINE-HEIGHT: normal">thread_concurrency = 8</li>
    <li style="LINE-HEIGHT: normal"></li>
    <li style="LINE-HEIGHT: normal">#log_slow_queries</li>
    <li style="LINE-HEIGHT: normal">#long_query_time = 5</li>
    <li style="LINE-HEIGHT: normal">#log_long_format</li>
    <li style="LINE-HEIGHT: normal">[mysqldump]</li>
    <li style="LINE-HEIGHT: normal">quick</li>
    <li style="LINE-HEIGHT: normal">max_allowed_packet = 16M</li>
    <li style="LINE-HEIGHT: normal">[mysql]</li>
    <li style="LINE-HEIGHT: normal">no-auto-rehash</li>
    <li style="LINE-HEIGHT: normal">[isamchk]</li>
    <li style="LINE-HEIGHT: normal">key_buffer = 256M</li>
    <li style="LINE-HEIGHT: normal">sort_buffer_size = 256M</li>
    <li style="LINE-HEIGHT: normal">read_buffer = 2M</li>
    <li style="LINE-HEIGHT: normal">write_buffer = 2M</li>
    <li style="LINE-HEIGHT: normal">[myisamchk]</li>
    <li style="LINE-HEIGHT: normal">key_buffer = 256M</li>
    <li style="LINE-HEIGHT: normal">sort_buffer_size = 256M</li>
    <li style="LINE-HEIGHT: normal">read_buffer = 2M</li>
    <li style="LINE-HEIGHT: normal">write_buffer = 2M</li>
    <li style="LINE-HEIGHT: normal">[mysqlhotcopy]</li>
    <li style="LINE-HEIGHT: normal">interactive-timeout</li>
</ol>
</div>
<p style="LINE-HEIGHT: normal">经过测试发现key_buffer及query_cache_size 对mysql性能影响较大。</p>
<p style="LINE-HEIGHT: normal">另外，发现mysq在linux下高负载运行时，kswapd会经常出来捣乱，致使情况变得更糟。系统load average会急剧升高，直至mysql没有任何响应。<br style="LINE-HEIGHT: normal">对此感兴趣的可以搜索 mysql+kswapd<br style="LINE-HEIGHT: normal">如以下讨论：<br style="LINE-HEIGHT: normal">http://www.ale.org/archive/ale/ale-2001-09/msg00149.html<br style="LINE-HEIGHT: normal">http://bugs.mysql.com/bug.php?id=28751</p>
</span></span>
<img src ="http://www.cppblog.com/flyonok/aggbug/134647.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2010-11-25 16:43 <a href="http://www.cppblog.com/flyonok/archive/2010/11/25/134647.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL的配置文件说明</title><link>http://www.cppblog.com/flyonok/archive/2010/11/25/134601.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Thu, 25 Nov 2010 06:28:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/archive/2010/11/25/134601.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/134601.html</wfw:comment><comments>http://www.cppblog.com/flyonok/archive/2010/11/25/134601.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/134601.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/134601.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: # 在此配置文件中, 你可以使用所有程序支持的长选项.# 如果想获悉程序支持的所有选项# 请在程序后加上"--help"参数运行程序.## 关于独立选项更多的细节信息可以在手册内找到 # 以下选项会被MySQL客户端应用读取.# 注意只有MySQL附带的客户端应用程序保证可以读取这段内容.# 如果你想你自己的MySQL应用程序获取这些值# 需要在MySQL客户端库初始化的时候指定这些选项[clie...&nbsp;&nbsp;<a href='http://www.cppblog.com/flyonok/archive/2010/11/25/134601.html'>阅读全文</a><img src ="http://www.cppblog.com/flyonok/aggbug/134601.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2010-11-25 14:28 <a href="http://www.cppblog.com/flyonok/archive/2010/11/25/134601.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysqldump的使用--解决不能导出视图的问题</title><link>http://www.cppblog.com/flyonok/archive/2010/07/10/119972.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Sat, 10 Jul 2010 08:25:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/archive/2010/07/10/119972.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/119972.html</wfw:comment><comments>http://www.cppblog.com/flyonok/archive/2010/07/10/119972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/119972.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/119972.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/flyonok/archive/2010/07/10/119972.html'>阅读全文</a><img src ="http://www.cppblog.com/flyonok/aggbug/119972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2010-07-10 16:25 <a href="http://www.cppblog.com/flyonok/archive/2010/07/10/119972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql导入文本或excel文件--转摘</title><link>http://www.cppblog.com/flyonok/archive/2010/07/03/119239.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Sat, 03 Jul 2010 03:38:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/archive/2010/07/03/119239.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/119239.html</wfw:comment><comments>http://www.cppblog.com/flyonok/archive/2010/07/03/119239.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/119239.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/119239.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 14pt">用excel另存为tab分割的文本文件。利用ultraEdit转换编码为utf8<br>方法一：mysqlimport 导入<br>&nbsp;&nbsp; [root@phpcms ~]# mysqlimport -uroot -p test test1.txt<br>&nbsp; 注意事项是txt文件名称和表名一致，并需要将文件cp到数据目录的相应</span><a onclick="javascript:tagshow(event, '%CA%FD%BE%DD%BF%E2');" href="javascript:;" target=_self><u><strong><span style="FONT-SIZE: 14pt">数据库</span></strong></u></a><span style="FONT-SIZE: 14pt">下<br><br>方法二：</span><a onclick="javascript:tagshow(event, 'mysql');" href="javascript:;" target=_self><u><strong><span style="FONT-SIZE: 14pt">mysql</span></strong></u></a><span style="FONT-SIZE: 14pt">登录后，用load命令执行<br>mysql&gt; load </span><a onclick="javascript:tagshow(event, 'data');" href="javascript:;" target=_self><u><strong><span style="FONT-SIZE: 14pt">data</span></strong></u></a><span style="FONT-SIZE: 14pt"> local infile '/root/Address.txt' into table ip_data;<br>Query OK, 175522 rows affected, 65535 warnings (0.95 sec)<br>Records: 175522&nbsp; Deleted: 0&nbsp; Skipped: 0&nbsp; Warnings: 283399<br>注意事项是：database必须是utf8的，负责汉字会乱码。database是lantin的，creata table时指定为utf8的情况下，方法二是乱码，方法一正确。<br><br><br>参考资料：<br>1）.MySQLimport的语法介绍：<br><br>　　MySQLimport位于MySQL/bin目录中，是MySQL的一个载入（或者说导入）数据的一个非常有效的工具。这是一个命令行工具。有两个参数以及大量的选项可供选择。这个工具把一个文本文件（text file）导入到你指定的数据库和表中。比方说我们要从文件Customers.txt中把数据导入到数据库Meet_A_Geek中的表 Custermers中：<br><br>　　MySQLimport Meet_A_Geek Customers.txt<br><br>　　注意：这里Customers.txt是我们要导入数据的文本文件，而Meet_A_Geek是我们要操作的数据库，数据库中的表名是Customers，这里文本文件的数据格式必须与Customers表中的记录格式一致，否则MySQLimport命令将会出错。<br><br>　　其中表的名字是导入文件的第一个句号（.）前面文件字符串，另外一个例子：MySQLimport Meet_A_Geek Cus.to.mers.txt<br><br>　　那么我们将把文件中的内容导入到数据库Meet_A_Geek 中的Cus表中。<br><br>　　上面的例子中，都只用到两个参数，并没有用到更多的选项，下面介绍MySQLimport的选项<br><br>　　2）.MySQLimport的常用选项介绍:<br><br>　　选项 功能<br><br>　　-d or --delete 新数据导入数据表中之前删除数据数据表中的所有信息<br><br>　　-f or --force 不管是否遇到错误，MySQLimport将强制继续插入数据<br><br>　　-i or --ignore MySQLimport跳过或者忽略那些有相同唯一关键字的行， 导入文件中的数据将被忽略。<br><br>　　-l or -lock-tables 数据被插入之前锁住表，这样就防止了，你在更新数据库时，用户的查询和更新受到影响。<br><br>　　-r or -replace 这个选项与－i选项的作用相反；此选项将替代表中有相同唯一关键字的记录。<br><br>　　--fields-enclosed- by= char 指定文本文件中数据的记录时以什么括起的， 很多情况下数据以双引号括起。 默认的情况下数据是没有被字符括起的。<br><br>　　--fields-terminated- by=char 指定各个数据的值之间的分隔符，在句号分隔的文件中，分隔符是句号。您可以用此选项指定数据之间的分隔符。<br><br>　　默认的分隔符是跳格符（Tab）<br><br>　　--lines-terminated- by=str 此选项指定文本文件中行与行之间数据的分隔字符串或者字符。 默认的情况下MySQLimport以newline为行分隔符。<br><br>　　您可以选择用一个字符串来替代一个单个的字符：<br><br>　　一个新行或者一个回车。<br><br>　　MySQLimport命令常用的选项还有-v 显示版本（version），-p 提示输入密码（password）等。<br><br>　　3）.例子：导入一个以逗号为分隔符的文件<br><br>　　文件中行的记录格式是这样的：<br><br>　　"1", "ORD89876", "1 Dozen Roses", "19991226"<br><br>　　我们的任务是要把这个文件里面的数据导入到数据库Meet_A_Geek中的表格Orders中，我们使用这个命令:<br><br>　　bin/MySQLimport &#8211;prl &#8211;fields-enclosed-by=" &#8211;fields-terminated-by=, Meet_A_Geek Orders.txt<br><br>　　这个命令可能看起来很不爽，不过当你熟悉了之后，这是非常简单的。第一部分，bin/MySQLimport ,告诉操作系统你要运行的命令是MySQL/bin目录下的MySQLimport，选项p是要求输入密码，这样就要求你在改动数据库之前输入密码，操作起来会更安全。我们用了r选项是因为我们想要把表中的唯一关键字与文件记录中有重复唯一关键字的记录替换成文件中的数据。我们表单中的数据不是最新的，需要用文件中的数据去更新，因而就用r这个选项，替代数据库中已经有的记录。l选项的作用是在我们插入数据的时候锁住表，这样就阻止了用户在我们更新表的时候对表进行查询或者更改的操作。<br><br>　　批处理是一种非交互式运行MySQL程序的方法，如同您在MySQL中使用的命令一样，你仍然将使用这些命令。<br><br>　　为了实现批处理，您重定向一个文件到MySQL程序中，首先我们需要一个文本文件，这个文本文件包含有与我们在MySQL中输入的命令相同的文本。<br><br>　　比如我们要插入一些数据，使用包含下面文本的文件(文件名为New_Data.sql,当然我们也可以取名为New_Data.txt及任何其他的合法名字，并不一定要以后缀</span><a onclick="javascript:tagshow(event, 'sql');" href="javascript:;" target=_self><u><strong><span style="FONT-SIZE: 14pt">sql</span></strong></u></a><span style="FONT-SIZE: 14pt">结尾)：<br><br>　　USE Meet_A_Geek;<br><br>　　INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, "Block");<br><br>　　INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, "Newton");<br><br>　　INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, "Simmons");<br><br>　　注意上面的这些句子的语法都必须是正确的，并且每个句子以分号结束。<br><br>　　上面的USE命令选择数据库，INSERT命令插入数据。<br><br>　　下面我们要把上面的文件导入到数据库中，导入之前要确认数据库已经在运行，即是MySQLd进程（或者说服务，Windows NT下面称为&#8221;服务&#8220;，unix下面为&#8221;进程&#8220;）已经在运行。<br><br>　　然后运行下面的命令：<br><br>　　bin/MySQL &#8211;p &lt; /home/mark/New_Data.sql<br><br>　　接着按提示输入密码，如果上面的文件中的语句没有错误，那么这些数据就被导入到了数据库中。<br><br>　　命令行中使用LOAD DATA INFILE 从文件中导入数据到数据库:<br><br>　　现在您可能会问自己，"究竟为什么我要输入所有的这些SQL语句到文件中，然后通过程序运行它们呢？&#8221;<br><br>　　这样看起来好像需要大量的工作。很好，你这样想很可能就对了。但是假如你有从所有这些命令中产生的log记录呢？现在这样就很棒，嗯，大多数数据库都会自动产生数据库中的事件记录的 log。而大部分log都包含有用过的原始的SQL命令。因此，如果您不能从您现在的数据库中导出数据到新的MySQL数据库中使用，那么您可以使用 log和MySQL的批处理特性，来快速且方便地导入您地数据。当然，这样就省去了打字的麻烦。<br><br>　　LOAD DATA INFILE<br><br>　　这是我们要介绍的最后一个导入数据到MySQL数据库中的方法。这个命令与MySQLimport非常相似，但这个方法可以在MySQL命令行中使用。也就是说您可以在所有使用API的程序中使用这个命令。使用这种方法，您就可以在应用程序中导入您想要导入的数据。<br><br>　　使用这个命令之前，MySQLd进程（服务）必须已经在运行。<br><br>　　启动MySQL命令行：<br><br>　　bin/MySQL &#8211;p<br><br>　　按提示输入密码，成功进入MySQL命令行之后，输入下面的命令：<br><br>　　USE Meet_A_Geek;<br><br>　　LOAD DATA INFILE "/home/mark/data.sql" INTO TABLE Orders;<br><br>　　简单的讲，这样将会把文件data.sql中的内容导入到表Orders中，如MySQLimport工具一样，这个命令也有一些可以选择的参数。比如您需要把自己的电脑上的数据导入到远程的数据库服务器中，您可以使用下面的命令：<br><br>　　LOAD DATA LOCAL INFILE "C:\\MyDocs\\SQL.txt" INTO TABLE Orders;<br><br>　　上面的LOCAL参数表示文件是本地的文件，服务器是您所登陆的服务器。<br><br>　　这样就省去了使用ftp来上传文件到服务器，MySQL替你完成了.<br><br>　　您也可以设置插入语句的优先级，如果您要把它标记为低优先级（LOW_PRIORITY），那么MySQL将会等到没有其他人读这个表的时候，才把插入数据。可以使用如下的命令：<br><br>　　LOAD DATA LOW_PRIORITY INFILE "/home/mark/data.sql" INTO TABLE Orders;<br><br>　　您也可以指定是否在插入数据的时候，取代或者忽略文件与数据表中重复的键值。替代重复的键值的语法：<br><br>　　LOAD DATA LOW_PRIORITY INFILE "/home/mark/data.sql" REPLACE INTO TABLE Orders;<br><br>　　上面的句子看起来有点笨拙，但却把关键字放在了让您的剖析器可以理解的地方。<br><br>　　下面的一对选项描述了文件的记录格式，这些选项也是在MySQLimport工具中可以用的。他们在这里看起来有点不同。首先，要用到FIELDS关键字，如果用到这个关键字，MySQL剖析器希望看到至少有下面的一个选项：<br><br>　　TERMINATED BY character<br><br>　　ENCLOSED BY character<br><br>　　ESCAPED BY character<br><br>　　这些关键字与它们的参数跟MySQLimport中的用法是一样的. The<br><br>　　TERMINATED BY 描述字段的分隔符，默认情况下是tab字符（\\t）<br><br>　　ENCLOSED BY描述的是字段的括起字符。比方以引号括起每一个字段。<br><br>　　ESCAPED BY 描述的转义字符。默认的是反些杠（backslash：\\ ）.<br><br>　　下面仍然使用前面的MySQLimport命令的例子，用LOAD DATA INFILE语句把同样的文件导入到数据库中:<br><br>　　LOAD DATA INFILE "/home/mark/Orders.txt" REPLACE INTO TABLE Orders FIELDS TERMINATED BY ','<br><br>　　ENCLOSED BY '"';<br><br>　　LOAD DATA INFILE语句中有一个MySQLimport工具中没有特点：<br><br>　　LOAD DATA INFILE 可以按指定的列把文件导入到数据库中。<br><br>　　当我们要把数据的一部分内容导入的时候，这个特点就很重要。比方说，我们要从Access数据库升级到MySQL数据库的时候，需要加入一些栏目（列/字段/field）到MySQL数据库中，以适应一些额外的需要。<br><br>　　这个时候，我们的Access数据库中的数据仍然是可用的，但是因为这些数据的栏目(field)与MySQL中的不再匹配，因此而无法再使用 MySQLimport工具。尽管如此，我们仍然可以使用LOAD DATA INFILE，下面的例子显示了如何向指定的栏目(field)中导入数据：<br><br>　　LOAD DATA INFILE "/home/Order.txt" INTO TABLE Orders(Order_Number, Order_Date, Customer_ID);<br><br>　　如您所见，我们可以指定需要的栏目（fields）。这些指定的字段依然是以括号括起，由逗号分隔的，如果您遗漏了其中任何一个，MySQL将会提醒您^_^<br><br>　　Importing Data from Microsoft Access （从Access中导入数据，略）<br><br>　　您可以看到MySQL有很多可以导入数据的方法，然而这些只是数据传输中的一半。另外的一般是从MySQL数据库中导出数据。有许多的原因我们需要导出数据。一个重要的原因是用于</span><a onclick="javascript:tagshow(event, '%B1%B8%B7%DD');" href="javascript:;" target=_self><u><strong><span style="FONT-SIZE: 14pt">备份</span></strong></u></a><span style="FONT-SIZE: 14pt">数据库。数据的造价常常是昂贵的，需要谨慎处理它们。经常地备份可以帮助防止宝贵数据地丢失；另外一个原因是，也许您希望导出数据来共享。 在这个信息技术不断成长的世界中，共享数据变得越来越常见。<br><br>　　比方说Macmillan USA维护护着一个将要出版的书籍的大型数据库。这个数据库在许多书店之间共享，这样他们就知道哪些书将会很快出版。医院越来越走向采用无纸病历记录，这样这些病历可以随时跟着你。世界变得越来越小，信息也被共享得越来越多。有很多中导出数据得方法，它们都跟导入数据很相似。因为，毕竟，这些都只是一种透视得方式。从数据库导出的数据就是从另一端导入的数据。这里我们并不讨论其他的数据库各种各样的导出数据的方法，您将学会如何用MySQL来实现数据导出。<br><br>　　使用MySQLdump:<br><br>　　MySQLdump命令位于MySQL/bin/目录中<br><br>　　 MySQLdump工具很多方面类似相反作用的工具MySQLimport。它们有一些同样的选项。但MySQLdump能够做更多的事情。它可以把整个数据库装载到一个单独的文本文件中。这个文件包含有所有重建您的数据库所需要的SQL命令。这个命令取得所有的模式（Schema，后面有解释）并且将其转换成DDL语法（CREATE语句，即数据库定义语句），取得所有的数据，并且从这些数据中创建INSERT语句。这个工具将您的数据库中所有的设计倒转。因为所有的东西都被包含到了一个文本文件中。这个文本文件可以用一个简单的批处理和一个合适SQL语句导回到MySQL中。这个工具令人难以置信地简单而快速。决不会有半点让人头疼地地方。<br><br>　　因此，如果您像装载整个数据库Meet_A_Geek的内容到一个文件中，可以使用下面的命令：<br><br>　　bin/MySQLdump &#8211;p Meet_A_Geek &gt; MeetAGeek_Dump_File.txt<br><br>　　这个语句也允许您指定一个表进行dump(备份/导出/装载?)。如果您只是希望把数据库Meet_A_Geek中的表Orders中的整个内容导出到一个文件，可以使用下面的命令：<br><br>　　bin/MySQLdump &#8211;p Meet_A_Geek Orders &gt;MeetAGeek_Orders.txt<br><br>　　这个非常的灵活，您甚至可以使用WHERE从句来选择您需要的记录导出到文件中。要达到这样的目的，可以使用类似于下面的命令：<br><br>　　bin/MySQLdump &#8211;p &#8211;where="Order_ID &gt; 2000" Meet_A_Geek Orders &gt; Special_Dump.txt<br><br>　　MySQLdump工具有大量的选项，部分选项如下表：<br><br>　　选项/Option 作用/Action Performed<br><br>　　--add-drop-table<br><br>　　这个选项将会在每一个表的前面加上DROP TABLE IF EXISTS语句，这样可以保证导回MySQL数据库的时候不会出错，因为每次导回的时候，都会首先检查表是否存在，存在就删除<br><br>　　--add-locks<br><br>　　这个选项会在INSERT语句中捆上一个LOCK TABLE和UNLOCK TABLE语句。这就防止在这些记录被再次导入数据库时其他用户对表进行的操作<br><br>　　-c or - complete_insert<br><br>　　这个选项使得MySQLdump命令给每一个产生INSERT语句加上列（field）的名字。当把数据导出导另外一个数据库时这个选项很有用。<br><br>　　--delayed-insert 在INSERT命令中加入DELAY选项<br><br>　　-F or -flush-logs 使用这个选项，在执行导出之前将会刷新MySQL服务器的log.<br><br>　　-f or -force 使用这个选项，即使有错误发生，仍然继续导出<br><br>　　--full 这个选项把附加信息也加到CREATE TABLE的语句中<br><br>　　-l or -lock-tables 使用这个选项，导出表的时候服务器将会给表加锁。<br><br>　　-t or -no-create- info<br><br>　　这个选项使的MySQLdump命令不创建CREATE TABLE语句，这个选项在您只需要数据而不需要DDL（数据库定义语句）时很方便。<br><br>　　-d or -no-data 这个选项使的MySQLdump命令不创建INSERT语句。<br><br>　　在您只需要DDL语句时，可以使用这个选项。<br><br>　　--opt 此选项将打开所有会提高文件导出速度和创造一个可以更快导入的文件的选项。<br><br>　　-q or -quick 这个选项使得MySQL不会把整个导出的内容读入内存再执行导出，而是在读到的时候就写入导文件中。<br><br>　　-T path or -tab = path 这个选项将会创建两个文件，一个文件包含DDL语句或者表创建语句，另一个文件包含数据。DDL文件被命名为table_name.sql,数据文件被命名为table_name.txt.路径名是存放这两个文件的目录。目录必须已经存在，并且命令的使用者有对文件的特权。<br><br>　　-w "WHERE Clause" or -where = "Where clause "<br><br>　　如前面所讲的，您可以使用这一选项来过筛选将要放到导出文件的数据。<br><br>　　假定您需要为一个表单中要用到的帐号建立一个文件，经理要看今年（2004年）所有的订单（Orders），它们并不对DDL感兴趣，并且需要文件有逗号分隔，因为这样就很容易导入到Excel中。 为了完成这个人物，您可以使用下面的句子：<br><br>　　bin/MySQLdump &#8211;p &#8211;where "Order_Date &gt;='2000-01-01'"<br><br>　　&#8211;tab = /home/mark &#8211;no-create-info &#8211;fields-terminated-by=, Meet_A_Geek Orders<br><br>　　这将会得到您想要的结果。<br><br>　　schema：模式The set of statements, expressed in data definition language, that completely describe the structure of a data base.<br><br>　　一组以数据定义语言来表达的语句集,该语句集完整地描述了数据库的结构。<br><br>　　SELECT INTO OUTFILE ：<br><br>　　如果您觉得MySQLdump工具不够酷，就使用SELECT INTO OUTFILE吧, MySQL同样提供一个跟LOAD DATA INFILE命令有相反作用的命令，这就是SELECT INTO OUTFILE 命令，这两个命令有很多的相似之处。首先，它们有所有的选项几乎相同。现在您需要完成前面用MySQLdump完成的功能，可以依照下面的步骤进行操作：<br><br>　　1. 确保MySQLd进程（服务）已经在运行<br><br>　　2. cd /usr/local/MySQL<br><br>　　3. bin/MySQLadmin ping ；// 如果这个句子通不过，可以用这个：MySQLadmin -u root -p ping<br><br>　　MySQLadmin ping用于检测MySQLd的状态，is alive说明正在运行，出错则可能需要用户名和密码。<br><br>　　4. 启动MySQL 监听程序.<br><br>　　5. bin/MySQL &#8211;p Meet_A_Geek；// 进入MySQL命令行，并且打开数据库Meet_A_Geek,需要输入密码<br><br>　　6. 在命令行中，输入一下命令:<br><br>　　SELECT * INTO OUTFILE '/home/mark/Orders.txt'<br><br>　　FIELDS<br><br>　　TERMINATED BY = ','<br><br>　　FROM Orders<br><br>　　WHERE Order_Date &gt;= '2000-01-01'<br><br>　　在你按了Return（回车）之后，文件就创建了。这个句子就像一个规则的SELECT语句，只是把想屏幕的输出重定向到了文件中。这意味这您可以使用JOIN来实现多表的高级查询。这个特点也可以被用作一个</span><a onclick="javascript:tagshow(event, '%B1%A8%B1%ED');" href="javascript:;" target=_self><u><strong><span style="FONT-SIZE: 14pt">报表</span></strong></u></a><span style="FONT-SIZE: 14pt">产生器。<br><br>　　比方说，您可以组合这一章中讨论的方法来产生一个非常有趣的查询，试试这个：<br><br>　　在MySQL目录建立一个名为Report_G.rpt 的文本文件，加入下面的行：<br><br>　　USE Meet_A_Geek;<br><br>　　INSERT INTO Customers (Customer_ID, Last_Name, First_Name)<br><br>　　VALUES (NULL, "Kinnard", "Vicky");<br><br>　　INSERT INTO Customers (Customer_ID, Last_Name, First_Name)<br><br>　　VALUES (NULL, "Kinnard", "Steven");<br><br>　　INSERT INTO Customers (Customer_ID, Last_Name, First_Name)<br><br>　　VALUES (NULL, "Brown", "Sam");<br><br>　　SELECT Last_Name INTO OUTFILE '/home/mark/Report.rpt'<br><br>　　FROM Customers WHERE Customer_ID &gt; 1;<br><br>　　然后确认 MySQL进程在运行，并且您在MySQL目录中， 输入下面的命令：<br><br>　　bin/MySQL &lt; Report_G.rpt检查您命名作为输出的文件，这个文件将会包含所有您在Customers表中输入的顾客的姓。 如您所见，您可以使用今天学到的导入/导出（import/export）的方法来帮助得到报表。<br></span>
<img src ="http://www.cppblog.com/flyonok/aggbug/119239.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2010-07-03 11:38 <a href="http://www.cppblog.com/flyonok/archive/2010/07/03/119239.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL慢查询的2种分析方案</title><link>http://www.cppblog.com/flyonok/archive/2010/07/03/119237.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Sat, 03 Jul 2010 03:24:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/archive/2010/07/03/119237.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/119237.html</wfw:comment><comments>http://www.cppblog.com/flyonok/archive/2010/07/03/119237.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/119237.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/119237.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/flyonok/archive/2010/07/03/119237.html'>阅读全文</a><img src ="http://www.cppblog.com/flyonok/aggbug/119237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2010-07-03 11:24 <a href="http://www.cppblog.com/flyonok/archive/2010/07/03/119237.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>5款最好的MySQL自由软件工具</title><link>http://www.cppblog.com/flyonok/archive/2010/07/03/119234.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Sat, 03 Jul 2010 02:57:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/archive/2010/07/03/119234.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/119234.html</wfw:comment><comments>http://www.cppblog.com/flyonok/archive/2010/07/03/119234.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/119234.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/119234.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/flyonok/archive/2010/07/03/119234.html'>阅读全文</a><img src ="http://www.cppblog.com/flyonok/aggbug/119234.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2010-07-03 10:57 <a href="http://www.cppblog.com/flyonok/archive/2010/07/03/119234.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>左连接、右连接和全连结</title><link>http://www.cppblog.com/flyonok/archive/2010/04/26/113611.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Mon, 26 Apr 2010 08:45:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/archive/2010/04/26/113611.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/113611.html</wfw:comment><comments>http://www.cppblog.com/flyonok/archive/2010/04/26/113611.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/113611.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/113611.html</trackback:ping><description><![CDATA[介绍表连接，更确切的说是inner joins內连接．<br>
內连接仅选出两张表中互相匹配的记录．因此，这会导致有时我们需要的记录没有包含进来。<br>
为更好的理解这个概念，我们介绍两个表作演示。苏格兰议会中的政党表(party)和议员表(msp)。<br>
<br>
party(Code,Name,Leader)<br>
Code: 政党代码<br>
Name: 政党名称<br>
Leader: 政党领袖<br>
<br>
msp(Name,Party,Constituency)<br>
Name: 议员名<br>
Party: 议员所在政党代码<br>
Constituency: 选区<br>
<br>
在介绍左连接、右连接和全连接前，有一个数据库中重要的概念要介绍一下，即空值(NULL)。<br>
<br>
A left join（左连接）包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。<br>
同理，也存在着相同道理的 right join（右连接），即包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。<br>
而full join(全连接)顾名思义，左右表中所有记录都会选出来。<br>
<br>
讲到这里，有人可能要问，到底什么叫：包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。<br>
Ok,我们来看一个实例：<br>
<br>
SELECT msp.name, party.name<br>
FROM msp JOIN party ON party=code<br>
<br>
这个是我们上一节所学的Join(注意：也叫inner join)，这个语句的本意是列出所有议员的名字和他所属政党。<br>
你可以在　http://sqlzoo.cn/4.htm 亲自执行一下该语句，看看结果是什么。<br>
<br>
很遗憾，我们发现该查询的结果少了两个议员：Canavan MSP, Dennis。为什么，因为这两个议员不属于任<br>
和政党，即他们的政党字段(Party)为空值。那么为什么不属于任何政党就查不出来了？这是因为空值在<br>
作怪。因为议员表中政党字段(Party)的空值在政党表中找不到对应的记录作匹配，即<br>
FROM msp JOIN party ON party=code　没有把该记录连接起来，而是过滤出去了。<br>
在该短语中，msp在Join的左边，所有称为左表。party在Join的右边，所有称为右表。<br>
<br>
Ok,现在再看看这句话，&#8220;包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录&#8221;，<br>
意思应该很明白了吧。执行下面这个语句，那两个没有政党的议员就漏不了了。<br>
<br>
SELECT msp.name, party.name<br>
FROM msp LEFT JOIN party ON party=code<br>
<br>
关于右连接,看看这个查询就明白了：<br>
<br>
SELECT msp.name, party.name<br>
FROM msp RIGHT JOIN party ON msp.party=party.code<br>
<br>
这个查询的结果列出所有的议员和政党，包含没有议员的政党，但不包含没有政党的议员。<br>
<br>
那么既要包含没有议员的政党，又要包含没有政党的议员该怎么办呢，对了，全连接(full join)。<br>
<br>
SELECT msp.name, party.name<br>
FROM msp FULL JOIN party ON msp.party=party.code<img src ="http://www.cppblog.com/flyonok/aggbug/113611.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2010-04-26 16:45 <a href="http://www.cppblog.com/flyonok/archive/2010/04/26/113611.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>how to install and config mysql on fedora</title><link>http://www.cppblog.com/flyonok/archive/2008/02/23/43119.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Sat, 23 Feb 2008 03:13:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/archive/2008/02/23/43119.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/43119.html</wfw:comment><comments>http://www.cppblog.com/flyonok/archive/2008/02/23/43119.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/43119.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/43119.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->&nbsp;&nbsp;This&nbsp;howto&nbsp;will&nbsp;show&nbsp;you&nbsp;how&nbsp;to&nbsp;install&nbsp;MySQL&nbsp...&nbsp;&nbsp;<a href='http://www.cppblog.com/flyonok/archive/2008/02/23/43119.html'>阅读全文</a><img src ="http://www.cppblog.com/flyonok/aggbug/43119.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2008-02-23 11:13 <a href="http://www.cppblog.com/flyonok/archive/2008/02/23/43119.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql src</title><link>http://www.cppblog.com/flyonok/archive/2007/12/24/39464.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Sun, 23 Dec 2007 19:46:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/archive/2007/12/24/39464.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/39464.html</wfw:comment><comments>http://www.cppblog.com/flyonok/archive/2007/12/24/39464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/39464.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/39464.html</trackback:ping><description><![CDATA[instance.h,instance.cpp mysql 服务实例程序<img src ="http://www.cppblog.com/flyonok/aggbug/39464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2007-12-24 03:46 <a href="http://www.cppblog.com/flyonok/archive/2007/12/24/39464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>how to install mysql on ubuntu</title><link>http://www.cppblog.com/flyonok/archive/2007/12/22/39273.html</link><dc:creator>flyonok</dc:creator><author>flyonok</author><pubDate>Sat, 22 Dec 2007 05:37:00 GMT</pubDate><guid>http://www.cppblog.com/flyonok/archive/2007/12/22/39273.html</guid><wfw:comment>http://www.cppblog.com/flyonok/comments/39273.html</wfw:comment><comments>http://www.cppblog.com/flyonok/archive/2007/12/22/39273.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flyonok/comments/commentRss/39273.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flyonok/services/trackbacks/39273.html</trackback:ping><description><![CDATA[1.sudo apt-get install mysql-server<br>2.sudo apt-get install php5-mysql<br>
<p><strong akvli="0" tjovt="0">Installing Mysql database in Ubuntu</strong></p>
<p akvli="0" tjovt="0">#apt-get install <a class="kLink" oncontextmenu="return false;" id="KonaLink1" onmouseover="adlinkMouseOver(event,this,1);" style="position: static; text-decoration: underline ! important;" onclick="adlinkMouseClick(event,this,1);" onmouseout="adlinkMouseOut(event,this,1);" href="http://www.debianadmin.com/mysql-database-server-installation-and-configuration-in-ubuntu.html#" target="_new"><font style="font-weight: 400; font-size: 12px; color: #3333ff ! important; font-family: verdana,arial,helvetica,sans-serif; position: static;" color="#3333ff"><span class="kLink" style="font-weight: 400; font-size: 12px; color: #3333ff ! important; font-family: verdana,arial,helvetica,sans-serif; position: relative;">mysql-server</span></font></a> mysql-client libmysqlclient12-dev</p>
<p akvli="0" tjovt="0">MySQL initially only allows connections from the localhost (127.0.0.1). We&#8217;ll need to remove that restriction if you wish to make it accessible to everyone on the internet. Open the file /etc/mysql/my.cnf</p>
<p akvli="0" tjovt="0">#vi /etc/mysql/my.cnf</p>
<p akvli="6" tjovt="0">Find the line bind-address = 127.0.0.1 and comment it out<br>&#8230;<br>#bind-address = 127.0.0.1<br>&#8230;</p>
<p akvli="0" tjovt="0">You can check your configuration using the following command</p>
<p akvli="0" tjovt="0">#netstat -tap</p>
<p akvli="0" tjovt="0">Output Looks like below</p>
<p akvli="0" tjovt="0">tcp 0 0 *:mysql *:* LISTEN 4997/mysqld</p>
<p akvli="0" tjovt="0">MySQL comes with no root password as default. This is a huge security risk. You&#8217;ll need to set one. So that the local computer gets root access as well, you&#8217;ll need to set a password for that too. The local-machine-name is the name of the computer you&#8217;re working on. For more information see here</p>
<p akvli="0" tjovt="0">#mysqladmin -u root password your-new-password</p>
<p akvli="0" tjovt="0">#mysqladmin -h root@local-machine-name -u root -p password your-new-password</p>
<p akvli="0" tjovt="0">#/etc/init.d/mysql restart</p>
<p akvli="0" tjovt="0">If you are looking how to create database,tables and other things check <a href="http://www.debianadmin.com/mysql-database-server-installation-and-configuration-in-debian.html" target="_blank" akvli="0" tjovt="0"><font color="#0000dd">here</font></a></p>
<p akvli="0" tjovt="0">If you are looking for webinterface administration or GUI tools for your mysql database check <a href="http://www.debianadmin.com/mysql-database-server-web-interfacefrontend-or-gui-tools.html" target="_blank" akvli="0" tjovt="0"><font color="#0000dd">here</font></a></p>
<ol>
    <li class="alt" id="comment-724">
    <p><cite>Lois</cite> Says: <br><small class="commentmetadata"><a title="" href="http://www.debianadmin.com/mysql-database-server-installation-and-configuration-in-ubuntu.html#comment-724"><font color="#0000dd">November 6th, 2006 at 1:20 pm</font></a><font size="1"> </font></small></p>
    <p>Hi!<br>I have installed mysql server on my Ubuntu Desktop; and works fine, but I want to change de mysql datadir. Do yo know how can I change that? If I edit my.conf the line datadir for my directori, mysql never restarts.<br>The new datadir is with the same permissions, and content.</p>
    <p>Any ideas? Wy in apache is easy to change but in mysql not? </p>
    </li>
    <li class="" id="comment-725"><cite>Admin</cite> Says: <br><small class="commentmetadata"><a title="" href="http://www.debianadmin.com/mysql-database-server-installation-and-configuration-in-ubuntu.html#comment-725"><font color="#0000dd">November 6th, 2006 at 1:51 pm</font></a><font size="1"> </font></small>
    <p>Hi Lois,</p>
    <p>Here is the procedure how to change Mysql default data directory</p>
    <p>By default, MySQL&#8217;s datadir is placed in the /var/lib/mysql directory.</p>
    <p>Create the directory that will be new datadir (ex:-/home/db)</p>
    <p>chown the directory to the mysql:mysql user</p>
    <p>sudo chown -R mysql:mysql /home/db/*</p>
    <p>You need to stop the mysql server using the following command</p>
    <p>sudo /etc/init.d/mysql stop</p>
    <p>Now you need to edit the /etc/mysql/my.cnf file</p>
    <p>sudo vi /etc/mysql/my.cnf</p>
    <p>and look for &#8220;datadir = /var/lib/mysql&#8221; this si where mysql database default data directory here you need to change this one to your new directory</p>
    <p>datadir = /home/db</p>
    <p>copy the files from the old datadir to the new location. However, make sure that the files named<br>ib_arch_log_0000000000, ib_logfile0 etc. are not copied to the newer location.</p>
    <p>Make sure that the files and directories are owned by mysql user</p>
    <p>Make changes in the my.cnf to point the new datadir.</p>
    <p>Restart the MySQL database</p>
    <p>sudo /etc/init.d/mysql start</p>
    <p>hope this helps </p>
    </li>
    <li class="alt" id="comment-735"><cite>Lois</cite> Says: <br><small class="commentmetadata"><a title="" href="http://www.debianadmin.com/mysql-database-server-installation-and-configuration-in-ubuntu.html#comment-735"><font color="#0000dd">November 6th, 2006 at 9:29 pm</font></a><font size="1"> </font></small>
    <p>Yeah!!! you&#8217;re my hero! my problem was the direcotri privilegies in the new datadir; but that&#8217;s it with the chown -R mysql:mysql.<br>Do it after copying the files.</p>
    <p>Thanks for all!</p>
    </li>
    <li class="alt" id="comment-735">1、安装MySQL <br>这个应该很简单了，而且我觉得大家在安装方面也没什么太大问题，所以也就不多说了，下面我们来讲讲配置。 <br>2、配置MySQL <br>注意，在Ubuntu下MySQL缺省是只允许本地访问的，如果你要其他机器也能够访问的话，那么需要改变/etc/mysql/my.cnf配置文件了！下面我们一步步地来： <br>默认的MySQL安装之后根用户是没有密码的，所以首先用根用户进入： <br>$mysql -u root <br>在这里之所以用-u root是因为我现在是一般用户（firehare），如果不加-u root的话，mysql会以为是firehare在登录。注意，我在这里没有进入根用户模式，因为没必要。一般来说，对mysql中的数据库进行操作， 根本没必要进入根用户模式，只有在设置时才有这种可能。 <br>进入mysql之后，最要紧的就是要设置Mysql中的root用户密码了，否则，Mysql服务无安全可言了。 <br>mysql&gt; GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY "123456"; <br>注意，我这儿用的是123456做为root用户的密码，但是该密码是不安全的，请大家最好使用大小写字母与数字混合的密码，且不少于8位。 <br>这样的话，就设置好了MySQL中的root用户密码了，然后就用root用户建立你所需要的数据库。我这里就以xoops为例： <br>mysql&gt;CREATE DATABASE xoops； <br>mysql&gt;GRANT ALL PRIVILEGES ON xoops.* TO xoops_root@localhost IDENTIFIED BY "654321"; <br>这样就建立了一个xoops_roots的用户，它对数据库xoops有着全部权限。以后就用xoops_root来对xoops数据库进行管理，而无需要再用root用户了，而该用户的权限也只被限定在xoops数据库中。 <br>如果你想进行远程访问或控制，那么你要做两件事： <br>其一： <br>mysql&gt;GRANT ALL PRIVILEGES ON xoops.* TO xoops_root@"%" IDENTIFIED BY "654321"; <br>允许xoops_root用户可以从任意机器上登入MySQL。 <br>其二： <br>$sudo nano /etc/mysql/my.cnf <br>&gt;bind-address = 127.0.0.1 =&gt; # bind-address = 127.0.0.1<br>这样就可以允许其他机器访问MySQL了。
    </li>
    <li class="alt">如果要开发mysql的C程序&nbsp;，用以下命令安装客户端</li>
</ol>
<p class="alt">&nbsp;sudo apt-get install libmysqlclient15-dev<br><br></p><img src ="http://www.cppblog.com/flyonok/aggbug/39273.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flyonok/" target="_blank">flyonok</a> 2007-12-22 13:37 <a href="http://www.cppblog.com/flyonok/archive/2007/12/22/39273.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>