<?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>GzV8.com &#187; Mysql</title>
	<atom:link href="http://www.gzv8.com/archives/tag/mysql/feed" rel="self" type="application/rss+xml" />
	<link>http://www.gzv8.com</link>
	<description>互联网引擎</description>
	<lastBuildDate>Thu, 06 Jan 2011 04:08:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Mysql 常用查询语句的笔记 2010.3.15 更新</title>
		<link>http://www.gzv8.com/archives/260</link>
		<comments>http://www.gzv8.com/archives/260#comments</comments>
		<pubDate>Mon, 15 Mar 2010 03:09:23 +0000</pubDate>
		<dc:creator>qbanke</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[默认分类]]></category>
		<category><![CDATA[select count]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=260</guid>
		<description><![CDATA[一些常用的查询语句：
例一：查询某个表的记录数，以及特定时间内的记录数。(XXX=表)
select count(*) from XXX;  
select count(*) from XXX where stat_date&#62;&#8217;2009-12-15&#8242;;
例子二：替换某个表中特定的字符 (XXX=表，替换字符AAA -&#62; BBB)
update test_tbl set XXX=replace(XXX,&#8217;AAA&#8217;,'BBB&#8217;);
例子三：查询某表，某字段中重复的数据 (XXX=表，XOXO=字段)
Select XOXO,Count(*) From XXX Group By XOXO Having Count(*) &#62; 1
例子四：获取数据库类型，如 InnoDB，MyISAM 等
show variables like &#8216;table_type&#8217;;
############################################
Mysql 常用命令：
select version();
查看版本号
查看支持的表类型
&#62;show variables like &#8216;have%&#8217;;
一、启动与退出
1、进入MySQL：启动MySQL Command Line Client（MySQL的DOS界面），直接输入安装时的密码即可。此时的提示符是：mysql&#62;
2、退出MySQL：quit或exit
二、库操作
1、、创建数据库
命令：create database &#60;数据库名&#62;
例如：建立一个名为xhkdb的数据库
mysql&#62; create database xhkdb;
2、显示所有的数据库
命令：show databases （注意：最后有个s）
mysql&#62; show databases;
3、删除数据库
命令：drop database &#60;数据库名&#62;
例如：删除名为 xhkdb的数据库
mysql&#62; drop database xhkdb;
4、连接数据库
命令： use &#60;数据库名&#62;
例如：如果xhkdb数据库存在，尝试存取它：
mysql&#62; use [...]]]></description>
			<content:encoded><![CDATA[<p><strong>一些常用的查询语句：</strong></p>
<p>例一：查询某个表的记录数，以及特定时间内的记录数。(XXX=表)<br />
select count(*) from XXX;  <br />
select count(*) from XXX where stat_date&gt;&#8217;2009-12-15&#8242;;</p>
<p>例子二：替换某个表中特定的字符 (XXX=表，替换字符AAA -&gt; BBB)<br />
update test_tbl set XXX=replace(XXX,&#8217;AAA&#8217;,'BBB&#8217;);</p>
<p>例子三：查询某表，某字段中重复的数据 (XXX=表，XOXO=字段)<br />
Select XOXO,Count(*) From XXX Group By XOXO Having Count(*) &gt; 1</p>
<p>例子四：获取数据库类型，如 InnoDB，MyISAM 等<br />
show variables like &#8216;table_type&#8217;;</p>
<p>############################################</p>
<p><strong>Mysql 常用命令：</strong></p>
<p>select version();<br />
查看版本号</p>
<p>查看支持的表类型<br />
&gt;show variables like &#8216;have%&#8217;;</p>
<p>一、启动与退出<br />
1、进入MySQL：启动MySQL Command Line Client（MySQL的DOS界面），直接输入安装时的密码即可。此时的提示符是：mysql&gt;<br />
2、退出MySQL：quit或exit<br />
二、库操作<br />
1、、创建数据库<br />
命令：create database &lt;数据库名&gt;<br />
例如：建立一个名为xhkdb的数据库<br />
mysql&gt; create database xhkdb;<br />
2、显示所有的数据库<br />
命令：show databases （注意：最后有个s）<br />
mysql&gt; show databases;<br />
3、删除数据库<br />
命令：drop database &lt;数据库名&gt;<br />
例如：删除名为 xhkdb的数据库<br />
mysql&gt; drop database xhkdb;<br />
4、连接数据库<br />
命令： use &lt;数据库名&gt;<br />
例如：如果xhkdb数据库存在，尝试存取它：<br />
mysql&gt; use xhkdb;<br />
屏幕提示：Database changed<br />
5、当前选择（连接）的数据库<br />
mysql&gt; select database();<br />
6、当前数据库包含的表信息：<br />
mysql&gt; show tables; （注意：最后有个s）<br />
三、表操作，操作之前应连接某个数据库<br />
1、建表<br />
命令：create table &lt;表名&gt; ( &lt;字段名1&gt; &lt;类型1&gt; [,..&lt;字段名n&gt; &lt;类型n&gt;]);<br />
例如，建立一个名为MyClass的表，<br />
字段名 数字类型 数据宽度 是否为空 是否主键 自动增加 默认值<br />
id int 4 否 primary key auto_increment  <br />
name char 20 否      <br />
sex int 4 否     0<br />
degree double 16 是      </p>
<p>mysql&gt; create table MyClass(<br />
&gt; id int(4) not null primary key auto_increment,<br />
&gt; name char(20) not null,<br />
&gt; sex int(4) not null default &#8216;0&#8242;,<br />
&gt; degree double(16,2));<br />
2、获取表结构<br />
命令： desc 表名，或者show columns from 表名<br />
 <br />
mysql&gt; desc MyClass;<br />
mysql&gt; show columns from MyClass;<br />
3、删除表<br />
命令：drop table &lt;表名&gt;<br />
例如：删除表名为 MyClass 的表<br />
mysql&gt; drop table MyClass;<br />
4、插入数据<br />
命令：insert into &lt;表名&gt; [( &lt;字段名1&gt;[,..&lt;字段名n &gt; ])] values ( 值1 )[, ( 值n )]<br />
例如，往表 MyClass中插入二条记录, 这二条记录表示：编号为1的名为Tom的成绩为96.45, 编号为2 的名为Joan 的成绩为82.99， 编号为3 的名为Wang 的成绩为96.5.<br />
mysql&gt; insert into MyClass values(1,&#8217;Tom&#8217;,96.45),(2,&#8217;Joan&#8217;,82.99), (2,&#8217;Wang&#8217;, 96.59);<br />
5、查询表中的数据<br />
1)、查询所有行<br />
命令： select &lt;字段1，字段2，&#8230;&gt; from &lt; 表名 &gt; where &lt; 表达式 &gt;<br />
例如：查看表 MyClass 中所有数据<br />
mysql&gt; select * from MyClass;<br />
2）、查询前几行数据<br />
例如：查看表 MyClass 中前2行数据<br />
mysql&gt; select * from MyClass order by id limit 0,2;<br />
6、删除表中数据<br />
命令：delete from 表名 where 表达式<br />
例如：删除表 MyClass中编号为1 的记录<br />
mysql&gt; delete from MyClass where id=1;<br />
7、修改表中数据：update 表名 set 字段=新值,… where 条件<br />
mysql&gt; update MyClass set name=&#8217;Mary&#8217; where id=1;<br />
7、在表中增加字段：<br />
命令：alter table 表名 add字段 类型 其他;<br />
例如：在表MyClass中添加了一个字段passtest，类型为int(4)，默认值为0<br />
mysql&gt; alter table MyClass add passtest int(4) default &#8216;0&#8242;<br />
8、更改表名：<br />
命令：rename table 原表名 to 新表名;<br />
例如：在表MyClass名字更改为YouClass<br />
mysql&gt; rename table MyClass to YouClass;<br />
9、<br />
 <br />
字段类型<br />
1．INT[(M)] 型： 正常大小整数类型<br />
2．DOUBLE[(M,D)] [ZEROFILL] 型： 正常大小(双精密)浮点数字类型<br />
3．DATE 日期类型：支持的范围是1000-01-01到9999-12-31。MySQL以YYYY-MM-DD格式来显示DATE值，但是允许你使用字符串或数字把值赋给DATE列<br />
4．CHAR(M) 型：定长字符串类型，当存储时，总是是用空格填满右边到指定的长度<br />
5．BLOB TEXT类型，最大长度为65535(2^16-1)个字符。<br />
6．VARCHAR型：变长字符串类型</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/260/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>让 Cacti 为的 Mysql 提供专业的性能监控支持。</title>
		<link>http://www.gzv8.com/archives/235</link>
		<comments>http://www.gzv8.com/archives/235#comments</comments>
		<pubDate>Thu, 11 Mar 2010 07:38:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cacti]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[Better Cacti Templates]]></category>
		<category><![CDATA[图表]]></category>
		<category><![CDATA[监控]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=235</guid>
		<description><![CDATA[如果说 Mysql Enterprise 跟普通“民用”版有啥不一样？
细节的可能也会有一堆，但最明显的，莫过于其内置有专门性能监控页面。
让你洞悉每次调整后对性能的影响，或者当前数据库的压力情况。
“民用”版本一直都无法享受到这番待遇。直到 Better Cacti Templates 的出现。
呼，我写了好几篇关于 Cacti 的文章，也有好多朋友为此资讯了我很多问题。
第一次看到本文的朋友们可能对 Cacti 还不大了解。它是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。它通过snmpget来获取数据，并使用 RRDtool绘画图形。详细可参阅：http://www.oschina.net/p/cacti
但其运行的环境依赖 Apache + php + Mysql + Snmp 所以如果如果单是为了这个监控工具来搭建运行环境的话可有点心理准备。Linux 下 LAMP 环境的搭建可真会难道不少新手。而且如果是纯粹为了Cacti而搭建php环境，也有点浪费系统资源，不大合乎实际。
但当然了，如果你使用 Cacti 来监控数十数百计的服务器。这点操劳可完全值得！
下边入正题，在已经正常运作的 Cacti 系统上增加《Better Cacti Templates》包含的Mysql 监控模块。
可让Cacti立即变成一个专业的Mysql监控器。让“民用”版本的Mysql也能有完整的性能数值图表系统。
安装方法如下：
1，首先到该地址下载最新版：http://code.google.com/p/mysql-cacti-templates/downloads/list 
2，下载到服务器后解压：# tar zxvf better-cacti-templates-1.1.6.tar.gz
3，解压后进入目录：# cd better-cacti-templates-1.1.6
4，复制 # better-cacti-templates-1.1.6/scripts 目录中所有文件到Cacti安装目录中的scripts 下(举例)：
# cp ./scripts/* /data/web_server/admin/cacti/scripts/
5，复制完毕后，再进入 # better-cacti-templates-1.1.6/templates 目录，把里边的
# cacti_host_template_x_mysql_server_ht_0.8.6i-sver1.1.6.xml 下载到本地。
6，打开并登陆 cacti 管理界面 ，然后在理面板中导入刚才下载的xml文件。
当出现以下信息时代表模板导入已经建造成功：
Cacti has imported the following [...]]]></description>
			<content:encoded><![CDATA[<p>如果说 Mysql Enterprise 跟普通“民用”版有啥不一样？<br />
细节的可能也会有一堆，但最明显的，莫过于其内置有专门性能监控页面。<br />
让你洞悉每次调整后对性能的影响，或者当前数据库的压力情况。<br />
“民用”版本一直都无法享受到这番待遇。直到 Better Cacti Templates 的出现。</p>
<p>呼，我写了好几篇关于 Cacti 的文章，也有好多朋友为此资讯了我很多问题。<br />
第一次看到本文的朋友们可能对 Cacti 还不大了解。它是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。它通过snmpget来获取数据，并使用 RRDtool绘画图形。详细可参阅：<a href="http://www.oschina.net/p/cacti">http://www.oschina.net/p/cacti</a><br />
但其运行的环境依赖 Apache + php + Mysql + Snmp 所以如果如果单是为了这个监控工具来搭建运行环境的话可有点心理准备。Linux 下 LAMP 环境的搭建可真会难道不少新手。而且如果是纯粹为了Cacti而搭建php环境，也有点浪费系统资源，不大合乎实际。</p>
<p>但当然了，如果你使用 Cacti 来监控数十数百计的服务器。这点操劳可完全值得！</p>
<p>下边入正题，在已经正常运作的 Cacti 系统上增加《Better Cacti Templates》包含的Mysql 监控模块。<br />
可让Cacti立即变成一个专业的Mysql监控器。让“民用”版本的Mysql也能有完整的性能数值图表系统。</p>
<p>安装方法如下：</p>
<p>1，首先到该地址下载最新版：<a href="http://code.google.com/p/mysql-cacti-templates/downloads/list">http://code.google.com/p/mysql-cacti-templates/downloads/list</a> <br />
2，下载到服务器后解压：# tar zxvf better-cacti-templates-1.1.6.tar.gz<br />
3，解压后进入目录：# cd better-cacti-templates-1.1.6<br />
4，复制 # better-cacti-templates-1.1.6/scripts 目录中所有文件到Cacti安装目录中的scripts 下(举例)：<br />
# cp ./scripts/* /data/web_server/admin/cacti/scripts/</p>
<p>5，复制完毕后，再进入 # better-cacti-templates-1.1.6/templates 目录，把里边的<br />
# cacti_host_template_x_mysql_server_ht_0.8.6i-sver1.1.6.xml 下载到本地。</p>
<p>6，打开并登陆 cacti 管理界面 ，然后在理面板中导入刚才下载的xml文件。<br />
当出现以下信息时代表模板导入已经建造成功：</p>
<p>Cacti has imported the following items: <br />
 <br />
CDEF <br />
[success] X Negate CDEF [new] <br />
 <br />
GPRINT Preset <br />
[success] X MySQL Server Version t1.1.4:s1.1.4 [new] <br />
[success] X Normal [new] <br />
 <br />
Data Input Method <br />
[success] X Get MySQL Stats/MyISAM Indexes IM [new] <br />
&#8230; snip &#8230; <br />
 <br />
Data Template <br />
[success] X MyISAM Indexes DT [new] <br />
&#8230; snip &#8230; <br />
 <br />
Graph Template <br />
[success] X MyISAM Indexes GT [new] <br />
&#8230; snip &#8230; <br />
 <br />
Host Template <br />
[success] X MySQL Server HT [new]</p>
<p>然后就可以到Cacti中所需监控 Mysql 备中添加 Mysql 计量模板</p>
<p>步骤跟之前写的一篇关于 Cacti 增加 <strong>NginxStatus</strong>  监控的方式差不多。这里我就不周章篇幅了。<br />
大家可以参阅：<a href="http://www.oschina.net/bbs/thread/279">http://www.oschina.net/bbs/thread/279</a><br />
而且还有好几十个数据计量模板可供选择。</p>
<p>图形效果：</p>
<p> <img src="http://www.oschina.net/uploads/bbs/2010/0305/123025_QyKe_0.jpg" alt="" /></p>
<p><img src="http://www.oschina.net/uploads/bbs/2010/0305/123041_ySWX_0.jpg" alt="" /></p>
<p><img src="http://www.oschina.net/uploads/bbs/2010/0305/123053_rGWD_0.jpg" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/235/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solaris 10 下安装 MySQL 5.1.x</title>
		<link>http://www.gzv8.com/archives/135</link>
		<comments>http://www.gzv8.com/archives/135#comments</comments>
		<pubDate>Thu, 11 Mar 2010 04:53:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux & Unix]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[Solaris]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=135</guid>
		<description><![CDATA[Solaris版本：Sun OS 5.11 snv_50 64bit
MySQL版本：5.1.37
1. 下载MySQL
下载页面：http://dev.mysql.com/downloads/mysql/5.1.html#solaris-pgadd
选择对应的Solaris版本，我的是 Solaris 10 (SPARC, 64-bit)
或者直接访问找下载镜像：http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.37-solaris10-sparc-64bit.pkg.gz/from/http://gd.tuwien.ac.at/db/mysql/
2. 解包MySQL
转到下载目录
# gunzip -d mysql-standard-5.0.27-solaris10-x86_64.pkg.gz
3. 创建mysql的用户组和用户
# groupadd mysql
# useradd -G mysql mysql
4. 使用pkgadd安装MySQL包
# pkgadd -d mysql-standard-5.0.27-solaris10-x86_64.pkg
安装后的MySQL位于/opt/mysql/mysql目录下
5. 在目录/etc下创建文件my.cnf文件，内容如下
[mysqld]
basedir=/opt/mysql/mysql
datadir=/opt/mysql/mysql/data
6. 运行MySQL的post-install文件，创建数据库repository
# cd /opt/mysql/mysql
# ./scripts/mysql_install_db &#8211;defaults-file=/etc/my.cnf &#8211;user=mysql
7. 启动MySQL
# cd /opt/mysql/mysql
# ./bin/mysqld_safe &#8211;defaults-file=/etc/my.cnf &#8211;user=mysql
也可以使用如下的方法来启动MySQL
# /etc/init.d/mysql start
8. 更改MySQL root用户的口令
# /opt/mysql/mysql/bin/mysqladmin -u root password &#8216;new-password&#8217;
# /opt/mysql/mysql/bin/mysqladmin -u root -h 机器名称 password &#8216;new-password&#8217;
9. 登录MySQL命令行
# [...]]]></description>
			<content:encoded><![CDATA[<p>Solaris版本：Sun OS 5.11 snv_50 64bit<br />
MySQL版本：5.1.37</p>
<p>1. 下载MySQL<br />
下载页面：<a href="http://dev.mysql.com/downloads/mysql/5.1.html#solaris-pgadd">http://dev.mysql.com/downloads/mysql/5.1.html#solaris-pgadd</a><a href="http://dev.mysql.com/downloads/mysql/5.0.html#downloads"></a><br />
选择对应的Solaris版本，我的是 Solaris 10 (SPARC, 64-bit)<br />
或者直接访问找下载镜像：<a href="http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.37-solaris10-sparc-64bit.pkg.gz/from/http://gd.tuwien.ac.at/db/mysql/">http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.37-solaris10-sparc-64bit.pkg.gz/from/http://gd.tuwien.ac.at/db/mysql/</a><a href="http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-standard-5.0.27-solaris10-x86_64.pkg.gz/from/pick"></a></p>
<p>2. 解包MySQL<br />
转到下载目录<br />
# gunzip -d mysql-standard-5.0.27-solaris10-x86_64.pkg.gz</p>
<p>3. 创建mysql的用户组和用户<br />
# groupadd mysql<br />
# useradd -G mysql mysql</p>
<p>4. 使用pkgadd安装MySQL包<br />
# pkgadd -d mysql-standard-5.0.27-solaris10-x86_64.pkg<br />
安装后的MySQL位于/opt/mysql/mysql目录下</p>
<p>5. 在目录/etc下创建文件my.cnf文件，内容如下<br />
[mysqld]<br />
basedir=/opt/mysql/mysql<br />
datadir=/opt/mysql/mysql/data</p>
<p>6. 运行MySQL的post-install文件，创建数据库repository<br />
# cd /opt/mysql/mysql<br />
# ./scripts/mysql_install_db &#8211;defaults-file=/etc/my.cnf &#8211;user=mysql</p>
<p>7. 启动MySQL<br />
# cd /opt/mysql/mysql<br />
# ./bin/mysqld_safe &#8211;defaults-file=/etc/my.cnf &#8211;user=mysql</p>
<p>也可以使用如下的方法来启动MySQL<br />
# /etc/init.d/mysql start</p>
<p>8. 更改MySQL root用户的口令<br />
# /opt/mysql/mysql/bin/mysqladmin -u root password &#8216;new-password&#8217;<br />
# /opt/mysql/mysql/bin/mysqladmin -u root -h 机器名称 password &#8216;new-password&#8217;</p>
<p>9. 登录MySQL命令行<br />
# mysql -p<br />
输入新的密码</p>
<p>9. 停止MySQL<br />
# /etc/init.d/mysql stop</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/135/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL 的备份（mysqldump）</title>
		<link>http://www.gzv8.com/archives/74</link>
		<comments>http://www.gzv8.com/archives/74#comments</comments>
		<pubDate>Thu, 11 Mar 2010 04:10:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[mysqldump]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=74</guid>
		<description><![CDATA[本文讨论 MySQL 的备份和恢复机制，以及如何维护数据表，包括最主要的两种表类型：MyISAM 和 Innodb，文中设计的 MySQL 版本为 5.0.22。
目前 MySQL 支持的免费备份工具有：mysqldump、mysqlhotcopy，还可以用 SQL 语法进行备份：BACKUP TABLE 或者 SELECT INTO OUTFILE，又或者备份二进制日志（binlog），还可以是直接拷贝数据文件和相关的配置文件。MyISAM 表是保存成文件的形式，因此相对比较容易备份，上面提到的几种方法都可以使用。Innodb 所有的表都保存在同一个数据文件 ibdata1 中（也可能是多个文件，或者是独立的表空间文件），相对来说比较不好备份，免费的方案可以是拷贝数据文件、备份 binlog，或者用 mysqldump。
1、mysqldump
1.1 备份
mysqldump 是采用SQL级别的备份机制，它将数据表导成 SQL 脚本文件，在不同的 MySQL 版本之间升级时相对比较合适，这也是最常用的备份方法。
现在来讲一下 mysqldump 的一些主要参数：

&#8211;compatible=name它告诉 mysqldump，导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等，要使用几个值，用逗号将它们隔开。当然了，它并不保证能完全兼容，而是尽量兼容。
&#8211;complete-insert，-c导出的数据采用包含字段名的完整 INSERT 方式，也就是把所有的值都写在一行。这么做能提高插入效率，但是可能会受到 max_allowed_packet 参数的影响而导致插入失败。因此，需要谨慎使用该参数，至少我不推荐。
&#8211;default-character-set=charset指定导出数据时采用何种字符集，如果数据表不是采用默认的 latin1 字符集的话，那么导出时必须指定该选项，否则再次导入数据后将产生乱码问题。
&#8211;disable-keys告诉 mysqldump 在 INSERT 语句的开头和结尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 [...]]]></description>
			<content:encoded><![CDATA[<p>本文讨论 MySQL 的备份和恢复机制，以及如何维护数据表，包括最主要的两种表类型：<code>MyISAM</code> 和 <code>Innodb</code>，文中设计的 MySQL 版本为 5.0.22。</p>
<p>目前 MySQL 支持的免费备份工具有：<code>mysqldump、mysqlhotcopy</code>，还可以用 SQL 语法进行备份：<code>BACKUP TABLE</code> 或者 <code>SELECT INTO OUTFILE</code>，又或者备份<code>二进制日志（binlog）</code>，还可以是<code>直接拷贝数据文件和相关的配置文件</code>。MyISAM 表是保存成文件的形式，因此相对比较容易备份，上面提到的几种方法都可以使用。<code>Innodb</code> 所有的表都保存在同一个数据文件 <code>ibdata1</code> 中（也可能是多个文件，或者是独立的表空间文件），相对来说比较不好备份，免费的方案可以是<code>拷贝数据文件</code>、<code>备份 binlog</code>，或者用 <code>mysqldump</code>。</p>
<h3>1、mysqldump</h3>
<h4>1.1 备份</h4>
<p><code>mysqldump</code> 是采用SQL级别的备份机制，它将数据表导成 SQL 脚本文件，在不同的 MySQL 版本之间升级时相对比较合适，这也是最常用的备份方法。<br />
现在来讲一下 <code>mysqldump</code> 的一些主要参数：</p>
<ul type="1">
<li>&#8211;compatible=name它告诉 mysqldump，导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 <code>ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options</code> 等，要使用几个值，用逗号将它们隔开。当然了，它并不保证能完全兼容，而是尽量兼容。</li>
<li>&#8211;complete-insert，-c导出的数据采用包含字段名的完整 <code>INSERT</code> 方式，也就是把所有的值都写在一行。这么做能提高插入效率，但是可能会受到 <code>max_allowed_packet</code> 参数的影响而导致插入失败。因此，需要谨慎使用该参数，至少我不推荐。</li>
<li>&#8211;default-character-set=charset指定导出数据时采用何种字符集，如果数据表不是采用默认的 <code>latin1</code> 字符集的话，那么导出时必须指定该选项，否则再次导入数据后将产生乱码问题。</li>
<li>&#8211;disable-keys告诉 <code>mysqldump</code> 在 <code>INSERT</code> 语句的开头和结尾增加 <code>/*!40000 ALTER TABLE table DISABLE KEYS */;</code> 和 <code>/*!40000 ALTER TABLE table ENABLE KEYS */;</code> 语句，这能大大提高插入语句的速度，因为它是在插入完所有数据后才重建索引的。该选项只适合 <code>MyISAM</code> 表。</li>
<li>&#8211;extended-insert = true|false默认情况下，<code>mysqldump</code> 开启 <code>--complete-insert</code> 模式，因此不想用它的的话，就使用本选项，设定它的值为 <code>false</code> 即可。</li>
<li>&#8211;hex-blob使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 <code>BINARY、VARBINARY、BLOB</code>。</li>
<li>&#8211;lock-all-tables，-x在开始导出之前，提交请求锁定所有数据库中的所有表，以保证数据的一致性。这是一个全局读锁，并且自动关闭 <code>--single-transaction</code> 和 <code>--lock-tables</code> 选项。</li>
<li>&#8211;lock-tables它和 <code>--lock-all-tables</code> 类似，不过是锁定当前导出的数据表，而不是一下子锁定全部库下的表。本选项只适用于 <code>MyISAM</code> 表，如果是 <code>Innodb</code> 表可以用 <code>--single-transaction</code> 选项。</li>
<li>&#8211;no-create-info，-t只导出数据，而不添加 <code>CREATE TABLE</code> 语句。</li>
<li>&#8211;no-data，-d不导出任何数据，只导出数据库表结构。</li>
<li>&#8211;opt这只是一个快捷选项，等同于同时添加 <code>--add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset</code> 选项。本选项能让 <code>mysqldump</code> 很快的导出数据，并且导出的数据能很快导回。该选项默认开启，但可以用 <code>--skip-opt</code> 禁用。注意，如果运行 <code>mysqldump</code> 没有指定 <code>--quick</code> 或 <code>--opt</code> 选项，则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。</li>
<li>&#8211;quick，-q该选项在导出大表时很有用，它强制 <code>mysqldump</code> 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。</li>
<li>&#8211;routines，-R导出存储过程以及自定义函数。</li>
<li>&#8211;single-transaction该选项在导出数据之前提交一个 <code>BEGIN</code> SQL语句，<code>BEGIN</code> 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表，例如 <code>InnoDB</code> 和 <code>BDB</code>。<br />
本选项和 <code>--lock-tables</code> 选项是互斥的，因为 <code>LOCK TABLES</code> 会使任何挂起的事务隐含提交。<br />
要想导出大表的话，应结合使用 <code>--quick</code> 选项。</li>
<li>&#8211;triggers同时导出触发器。该选项默认启用，用 <code>--skip-triggers</code> 禁用它。</li>
</ul>
<p>其他参数详情请参考手册，我通常使用以下 SQL 来备份 <code>MyISAM</code> 表：</p>
<pre>/usr/local/mysql/bin/mysqldump -uyejr -pyejr \
--default-character-set=utf8 --opt --extended-insert=false \
--triggers -R --hex-blob -x db_name &gt; db_name.sql</pre>
<p>使用以下 SQL 来备份 <code>Innodb</code> 表：</p>
<pre>/usr/local/mysql/bin/mysqldump -uyejr -pyejr \
--default-character-set=utf8 --opt --extended-insert=false \
--triggers -R --hex-blob --single-transaction db_name &gt; db_name.sql</pre>
<p>另外，如果想要实现在线备份，还可以使用 <code>--master-data</code> 参数来实现，如下：</p>
<pre>/usr/local/mysql/bin/mysqldump -uyejr -pyejr \
--default-character-set=utf8 --opt --master-data=1 \
--single-transaction --flush-logs db_name &gt; db_name.sql</pre>
<p>它只是在一开始的瞬间请求锁表，然后就刷新binlog了，而后在导出的文件中加入<code>CHANGE MASTER</code> 语句来指定当前备份的binlog位置，如果要把这个文件恢复到slave里去，就可以采用这种方法来做。</p>
<h4>1.2 还原</h4>
<p>用 <code>mysqldump</code> 备份出来的文件是一个可以直接倒入的 SQL 脚本，有两种方法可以将数据导入。</p>
<ul type="1">
<li>直接用 <code>mysql</code> 客户端例如：
<pre>/usr/local/mysql/bin/mysql -uyejr -pyejr db_name &lt; db_name.sql</pre>
<p> </li>
<li>用 SOURCE 语法其实这不是标准的 SQL 语法，而是 <code>mysql</code> 客户端提供的功能，例如：
<pre>SOURCE /tmp/db_name.sql;</pre>
<p>这里需要指定文件的绝对路径，并且必须是 <code>mysqld</code> 运行用户(例如 nobody)有权限读取的文件。</li>
</ul>
<h3>2、 mysqlhotcopy</h3>
<h4>2.1 备份</h4>
<p><code>mysqlhotcopy</code> 是一个 PERL 程序，最初由Tim Bunce编写。它使用 <code>LOCK TABLES、FLUSH TABLES</code> 和 <code>cp</code> 或 <code>scp</code> 来快速备份数据库。它是备份数据库或单个表的最快的途径，但它只能运行在数据库文件（包括数据表定义文件、数据文件、索引文件）所在的机器上。<code>mysqlhotcopy</code> 只能用于备份 <code>MyISAM</code>，并且只能运行在 <code>类Unix</code> 和 <code>NetWare</code> 系统上。</p>
<p><code>mysqlhotcopy</code> 支持一次性拷贝多个数据库，同时还支持正则表达。以下是几个例子：</p>
<pre>root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr \
db_name /tmp (把数据库目录 <tt>db_name</tt> 拷贝到 <tt>/tmp</tt> 下)
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr \
db_name_1 ... db_name_n /tmp
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr \
db_name./regex/ /tmp</pre>
<p>更详细的使用方法请查看手册，或者调用下面的命令来查看 <code>mysqlhotcopy</code> 的帮助：</p>
<pre>perldoc /usr/local/mysql/bin/mysqlhotcopy</pre>
<p>注意，想要使用 <code>mysqlhotcopy</code>，必须要有 <code>SELECT、RELOAD(要执行 FLUSH TABLES)</code> 权限，并且还必须要能够有读取 <tt>datadir/db_name</tt> 目录的权限。</p>
<h4>2.2 还原</h4>
<p><code>mysqlhotcopy</code> 备份出来的是整个数据库目录，使用时可以直接拷贝到 <code>mysqld</code> 指定的 <tt>datadir</tt> (在这里是 <tt>/usr/local/mysql/data/</tt>)目录下即可，同时要注意权限的问题，如下例：</p>
<pre>root#cp -rf db_name /usr/local/mysql/data/
root#chown -R nobody:nobody /usr/local/mysql/data/ (将 db_name 目录的属主改成 <code>mysqld</code> 运行用户)</pre>
<p> </p>
<h3>3、 SQL 语法备份</h3>
<h4>3.1 备份</h4>
<p><code>BACKUP TABLE</code> 语法其实和 <code>mysqlhotcopy</code> 的工作原理差不多，都是锁表，然后拷贝数据文件。它能实现在线备份，但是效果不理想，因此不推荐使用。它只拷贝表结构文件和数据文件，不同时拷贝索引文件，因此恢复时比较慢。<br />
例子：</p>
<pre>BACK TABLE tbl_name TO '/tmp/db_name/';</pre>
<p>注意，必须要有 <code>FILE</code> 权限才能执行本SQL，并且目录 <tt>/tmp/db_name/</tt> 必须能被 <code>mysqld</code> 用户可写，导出的文件不能覆盖已经存在的文件，以避免安全问题。</p>
<p><code>SELECT INTO OUTFILE</code> 则是把数据导出来成为普通的文本文件，可以自定义字段间隔的方式，方便处理这些数据。<br />
例子：</p>
<pre>SELECT * INTO OUTFILE '/tmp/db_name/tbl_name.txt' FROM tbl_name;</pre>
<p>注意，必须要有 <code>FILE</code> 权限才能执行本SQL，并且文件 <tt>/tmp/db_name/tbl_name.txt</tt> 必须能被 <code>mysqld</code> 用户可写，导出的文件不能覆盖已经存在的文件，以避免安全问题。</p>
<h4>3.2 恢复</h4>
<p>用 <code>BACKUP TABLE</code> 方法备份出来的文件，可以运行 <code>RESTORE TABLE</code> 语句来恢复数据表。<br />
例子：</p>
<pre>RESTORE TABLE FROM '/tmp/db_name/';</pre>
<p>权限要求类似上面所述。</p>
<p>用 <code>SELECT INTO OUTFILE</code> 方法备份出来的文件，可以运行 <code>LOAD DATA INFILE</code> 语句来恢复数据表。<br />
例子：</p>
<pre>LOAD DATA INFILE '/tmp/db_name/tbl_name.txt' INTO TABLE tbl_name;</pre>
<p>权限要求类似上面所述。倒入数据之前，数据表要已经存在才行。如果担心数据会发生重复，可以增加 <code>REPLACE</code> 关键字来替换已有记录或者用 <code>IGNORE</code> 关键字来忽略他们。</p>
<h3>4、 启用二进制日志(binlog)</h3>
<p>采用 <code>binlog</code> 的方法相对来说更灵活，省心省力，而且还可以支持增量备份。</p>
<p>启用 <code>binlog</code> 时必须要重启 <code>mysqld</code>。首先，关闭 <code>mysqld</code>，打开 <code>my.cnf</code>，加入以下几行：</p>
<pre>server-id = 1
log-bin  = binlog
log-bin-index = binlog.index</pre>
<p>然后启动 <code>mysqld</code> 就可以了。运行过程中会产生 <code>binlog.000001</code> 以及 <code>binlog.index</code>，前面的文件是 <code>mysqld</code> 记录所有对数据的更新操作，后面的文件则是所有 <code>binlog</code> 的索引，都不能轻易删除。关于 <code>binlog</code> 的信息请查看手册。</p>
<p>需要备份时，可以先执行一下 SQL 语句，让 <code>mysqld</code> 终止对当前 <code>binlog</code> 的写入，就可以把文件直接备份，这样的话就能达到增量备份的目的了：</p>
<pre>FLUSH LOGS;</pre>
<p>如果是备份复制系统中的从服务器，还应该备份 <tt>master.info</tt> 和 <tt>relay-log.info</tt> 文件。</p>
<p>备份出来的 <code>binlog</code> 文件可以用 MySQL 提供的工具 <code>mysqlbinlog</code> 来查看，如：</p>
<pre>/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001</pre>
<p>该工具允许你显示指定的数据库下的所有 SQL 语句，并且还可以限定时间范围，相当的方便，详细的请查看手册。</p>
<p>恢复时，可以采用类似以下语句来做到：</p>
<pre>/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001 | mysql -uyejr -pyejr db_name</pre>
<p>把 <code>mysqlbinlog</code> 输出的 SQL 语句直接作为输入来执行它。</p>
<p>如果你有空闲的机器，不妨采用这种方式来备份。由于作为 <code>slave</code> 的机器性能要求相对不是那么高，因此成本低，用低成本就能实现增量备份而且还能分担一部分数据查询压力，何乐而不为呢？</p>
<h3>5、 直接备份数据文件</h3>
<p>相较前几种方法，备份数据文件最为直接、快速、方便，缺点是基本上不能实现增量备份。为了保证数据的一致性，需要在靠背文件前，执行以下 SQL 语句：</p>
<pre>FLUSH TABLES WITH READ LOCK;</pre>
<p>也就是把内存中的数据都刷新到磁盘中，同时锁定数据表，以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单，直接拷贝回原来的数据库目录下即可。</p>
<p>注意，对于 <code>Innodb</code> 类型表来说，还需要备份其日志文件，即 <code>ib_logfile*</code> 文件。因为当 <code>Innodb</code> 表损坏时，就可以依靠这些日志文件来恢复。</p>
<h3>6、 备份策略</h3>
<p>对于中等级别业务量的系统来说，备份策略可以这么定：第一次全量备份，每天一次增量备份，每周再做一次全量备份，如此一直重复。而对于重要的且繁忙的系统来说，则可能需要每天一次全量备份，每小时一次增量备份，甚至更频繁。为了不影响线上业务，实现在线备份，并且能增量备份，最好的办法就是采用主从复制机制(<code>replication</code>)，在 <code>slave</code> 机器上做备份。</p>
<h3>7、 数据维护和灾难恢复</h3>
<p>作为一名DBA(我目前还不是，呵呵)，最重要的工作内容之一是保证数据表能安全、稳定、高速使用。因此，需要定期维护你的数据表。以下 SQL 语句就很有用：</p>
<pre>CHECK TABLE 或 REPAIR TABLE，检查或维护 MyISAM 表
OPTIMIZE TABLE，优化 MyISAM 表
ANALYZE TABLE，分析 MyISAM 表</pre>
<p>当然了，上面这些命令起始都可以通过工具 <code>myisamchk</code> 来完成，在这里不作详述。</p>
<p><code>Innodb</code> 表则可以通过执行以下语句来整理碎片，提高索引速度：</p>
<pre>ALTER TABLE tbl_name ENGINE = Innodb;</pre>
<p>这其实是一个 <code>NULL</code> 操作，表面上看什么也不做，实际上重新整理碎片了。</p>
<p>通常使用的 <code>MyISAM</code> 表可以用上面提到的恢复方法来完成。如果是索引坏了，可以用 <code>myisamchk</code> 工具来重建索引。而对于 <code>Innodb</code> 表来说，就没这么直接了，因为它把所有的表都保存在一个表空间了。不过 <code>Innodb</code> 有一个检查机制叫 <code>模糊检查点</code>，只要保存了日志文件，就能根据日志文件来修复错误。可以在 <tt>my.cnf</tt> 文件中，增加以下参数，让 <code>mysqld</code> 在启动时自动检查日志文件：</p>
<pre>innodb_force_recovery = 4</pre>
<p>关于该参数的信息请查看手册。</p>
<h3>8、 总结</h3>
<p>做好数据备份，定只好合适的备份策略，这是一个DBA所做事情的一小部分，万事开头难，就从现在开始吧！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/74/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>总结mysql ERROR 2002 (HY000):Cannot connect to&#8230;之错误</title>
		<link>http://www.gzv8.com/archives/66</link>
		<comments>http://www.gzv8.com/archives/66#comments</comments>
		<pubDate>Thu, 11 Mar 2010 04:00:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Mysql]]></category>
		<category><![CDATA[ERROR 2002]]></category>

		<guid isPermaLink="false">http://www.gzv8.com/?p=66</guid>
		<description><![CDATA[今天服务器遇到了一个很熟悉的问题
输入
#mysql -u root -p
 
ERROR 2002 (HY000):Can&#8217;t connect to local MySQL server
 
 
随即上网找寻答案
 
根据大家提供的方法我逐一尝试
 
方案1.
 1.#ps -A&#124;grep mysql
   显示类似：
  1829 ?        00:00:00 mysqld_safe
   1876 ?        00:00:31 mysqld
  2.#kill -9 1829
  3.#kill -9 1876
  4.#/etc/init.d/mysql restart
  5.#mysql -u root -p
 
   他的麻烦解决了,我的还没解决!
 
继续找
方案2

先查看 /etc/rc.d/init.d/mysqld status 看看m y s q l 是否已经启动.
另外看看是不是权限问题.
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
[root@localhost beinan]#chown -R mysql:mysql /var/lib/mysql
[root@localhost beinan]# /etc/init.d/mysqld start
启动 MySQL： [ 确定 ]
[root@localhost lib]# mysqladmin [...]]]></description>
			<content:encoded><![CDATA[<div>今天服务器遇到了一个很熟悉的问题</div>
<div>输入</div>
<div>#mysql -u root -p</div>
<div> </div>
<div>ERROR 2002 (HY000):Can&#8217;t connect to local MySQL server</div>
<div> </div>
<div> </div>
<div>随即上网找寻答案</div>
<div> </div>
<div>根据大家提供的方法我逐一尝试</div>
<div> </div>
<div>方案1.</div>
<div> 1.#ps -A|grep <strong>mysql</strong></div>
<div>   显示类似：</div>
<div>  1829 ?        00:00:00 mysqld_safe<br />
   1876 ?        00:00:31 mysqld</div>
<div>  2.#kill -9 1829</div>
<div>  3.#kill -9 1876</div>
<div>  4.#/etc/init.d/<strong>mysql</strong> restart</div>
<div>  5.#<strong>mysql</strong> -u root -p</div>
<div> </div>
<div>   他的麻烦解决了,我的还没解决!</div>
<div> </div>
<div>继续找</div>
<div>方案2</div>
<blockquote dir="ltr">
<div>先查看 /etc/rc.d/init.d/mysqld status 看看m y s q l 是否已经启动.<br />
另外看看是不是权限问题.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
[root@localhost beinan]#chown -R mysql:mysql /var/lib/mysql<br />
[root@localhost beinan]# /etc/init.d/mysqld start<br />
启动 MySQL： [ 确定 ]<br />
[root@localhost lib]# mysqladmin -uroot password &#8216;123456&#8242;<br />
[root@localhost lib]# mysql -uroot -p<br />
Enter password:<br />
Welcome to the MySQL monitor. Commands end with ; or \g.<br />
Your MySQL connection id is 3 to server version: 4.1.11</p>
<p>Type &#8216;help;&#8217; or &#8216;\h&#8217; for help. Type &#8216;\c&#8217; to clear the buffe</p></div>
<div> </div>
<div>他的也解决了,我的麻烦还在继续,依然继续寻找</div>
<div> </div>
</blockquote>
<div dir="ltr">方案3</div>
<blockquote dir="ltr">
<div dir="ltr">问题解决了，竟然是max_connections=1000 他说太多了，然后改成500也说多，无奈删之问题解决了。</div>
<div dir="ltr"> </div>
<div dir="ltr">还是不行</div>
</blockquote>
<div dir="ltr">方案4</div>
<div dir="ltr">   </div>
<div dir="ltr">     /var/lib/mysql 所有文件权限 改成mysql.mysql</div>
<div dir="ltr">    </div>
<div dir="ltr">     不行不行</div>
<div dir="ltr"> </div>
<div dir="ltr">方案5</div>
<blockquote dir="ltr">
<div dir="ltr">     摘要：解决不能通过mysql.sock连接MySQL问题 这个问题主要提示是，不能通过 &#8216;/tmp/mysql.sock&#8217;连到服务器，而php标准配置正是用过&#8217;/tmp/mysql.sock&#8217;，但是一些mysql安装方法将 mysql.sock放在/var/lib/mysql.sock或者其他的什么地方，你可以通过修改/etc/my.cnf文件来修正它，打开文件，可以看到如下的东东：</div>
<p dir="ltr"> 　　[mysqld]<br />
socket=/var/lib/mysql.sock<br />
改一下就好了，但也会引起其他的问题，如mysql程序连不上了，再加一点：<br />
[mysql]<br />
socket=/tmp/mysql.sock<br />
或者还可以通过修改php.ini中的配置来使php用其他的mysql.sock来连，这个大家自己去找找</p>
<p>或者用这样的方法:<br />
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock</p>
<p dir="ltr">成功了,就是这样ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock</p>
<p dir="ltr">OK!</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.gzv8.com/archives/66/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

