??xml version="1.0" encoding="utf-8" standalone="yes"?> ?code>wait_timeout变量改变旉限制?/p>
你可以通过执行 如果你向服务器发送不正确的或太大的查询,你也可能得到q些错误。如?code>BLOB 错误(2002Q?code>mysqld服务器时Q你正在使用一个错误的套接字文件或TCP/IP端口? 由检?使用 注意 你也可以使用 如果你得到错?code>telnet your-host-name tcp-ip-port-numberq且按几ơ回车来查服务器是否正常q行。如果有一?strong>MySQLq行在这个端口上Q你应该得到一个包含正在运行的MySQL服务器的版本L应答。如果你得到cM?code>mysqld守护q程Qƈ?code>port)?
Lost connection to server during query
的错误?/p>
?Q你可以使用
CR_SERVER_LOST
当写服务器时Q客h有出错,但是它没有得到对问题的一个完整的{案(或Q何答??
mysqld
以增加查询限制。多余的内存按需分配Q这?code>mysqld必须q回较大的结果行Ӟ才用更多的内存Q?/p>
18.2.2
mysqld
服务器:Unix套接字,它通过在文件系l中的一个文?~省localhostQ用Unix套接字?/p>
mysqld
的进E启动!如果没有Mmysqld
q程正在q行Q你可以通过试q些不同的连接来查服务器(当然Q端口号和套接字路径名可能在你的安装中是不同?Q?/p>
shell> mysqladmin version
shell> mysqladmin variables
shell> mysqladmin -h `hostname` version variables
shell> mysqladmin -h `hostname` --port=3306 version
shell> mysqladmin -h 'ip for your host' version
shell> mysqladmin --socket=/tmp/mysql.sock version
hostname
输出Q即Q当前主机名)被代替进Can't connect to local MySQL server
错误的一些原因:
mysqld
使用 MIT-pthreads 软g包。见4.2 由MySQL支持的操作系l。然而,MIT-pthreads不支持Unix套接字,因此当与服务器连接时Q在q样一个系l上Q你L必须明确地指定主机名。试试用这个命令检查到服务器的q接Q?pre>shell> mysqladmin -h `hostname` version
mysqladmin
正在试图使用的套接字实存在。在q种情况下,修复Ҏ是删?code>“mysqld.sock 或将套接字放在其他地斏V你能用q个命o?strong>MySQL配置时指定一个不同的套接字地点:shell> ./configure --with-unix-socket-path=/path/to/socket
safe_mysqld
和在启动你的MySQL客户前设|环境变?code>--socket=/path/to/socket选项启动MYSQL_UNIX_PORT
为套接字路径名或由提供套接字路径名作为客L参数做到。你可用q个命o试套接字:shell> mysqladmin --socket=/path/to/socket version
18.2.3
mysqld
已经得到了大?'hostname'
的在中途被中断了的q接h。在mysqld
认定出错?象来字一个黑客的d)Qƈ且阻止该站点q一步的q接Q直到某人执行命?code>mysqld?0个连接错误后d一C机。你可以通过象这样启动服务器很容易地调整它:
shell> safe_mysqld -O max_connect_errors=10000 &
注意Q对l定的主机,如果得到q条错误消息Q你应该首先查该L的TCP/IPq接有没有问题。如果你的TCP/IPq接不在q行Q增?code> Too many connections错误
如果在你试土q接MySQLӞ你得到错?code>max_connections个客戯接了mysqld服务器?/p>
如果你需要比~省(100)更多的连接,那么你应该重?code>mysqld实际上允?max_connections+1)个客戯接。最后一个连接是Z个用SHOW PROCESSLIST
扑և什么可能出错。见7.21 Out of memory
错误
如果你发出查询ƈ且得到类g下面的错误:
mysql: Out of memory at line 42, 'malloc.c' mysql: needed 8136 byte (8k), memory in use: 12481367 bytes (12189k) ERROR 2008: MySQL client ran out of memory
注意Q错误指向了MySQL?code>mysql --quickQ它使用 Packet too large
错误
当一?strong>MySQL客户?code>max_allowed_packet个字节长的包Q它发出一?code>mysql客户Q你可以通过?code> DBI)Q你需要在你启动服务器时设|包大小。你可以使用max_allowed_packet
Z个更大的寸。例如,如果你正期望一个全长的--set-variable=max_allowed_packet=24M
选项来启动服务器?/p>
tmp_table_size
字节大时。ؓ了避免这个问题,你可以?code>-O tmp_table_size=#选项来增加时表的大,或在你发出有疑问的查询之前用SQL选项 SET OPTION
句法?/p>
你也可以使用mysqld
。这与ؓ所有查询?code> Commands out of sync in client错误
如果你在你的客户代码中得?code>mysql_use_result()q且在你已经调用?code>mysql_use_result()?code> Ignoring user错误
如果你得C列错误:
mysqld
启动时或在它再次装蝲权限表时Q它?code>user表的新版?code>mysqlshow mysql user看看口o字段是否于 16个字W来查它。如果是q样Q你可以通过q行--old-protocol
选项启动user
表中的用h?code>mysqld?
如果你得到错?code>Can't find file: 'xxx' (errno: 2)Q这意味着在当前数据库中没有名?code>SHOW TABLES查你在当前数据库中有哪个表。见7.21mysqladmin kill
到线E。在下一ơ检查磁盘时Q线E将被放??分钟??
一般地Q?code>mysql从该文gd其输入。要惌样做Q创造一个文本文?tt>mysqlQ?/p>
shell> mysql database < text_file
你也能启动有一?code>TMPDIR环境变量的g为存储时文件的目录的\径名。如果你没有讄?tmp?/font>?tt>safe_mysqld
讑֮mysqld?-tmpdir
选项目设|时目录?/p>
MySQL以“隐含文件”创建所有时文件。这保证了如?code>ORDER BY?code>sizeof(数据库指? 通常?Q但是在未来对确实很大的表可能增加?/p>
对一?code>“SQL_*?/font>格式的名字?/p>
OPTIMIZE TABLE
在原数据库表的同一个目录中创徏一张时表?/p>
18.6 怎样保护?tmp/mysql.sock?/font>Q在Unix的大多数版本上,你能通过为其讄
?tmp?/font>文gpȝ。作?code>?tmp?/font>文gpȝ使得文g仅能׃们的所有者或用户(
Q该位被讄了?/p>
ls -ld /tmp
?code>t18.7
Access denied
错误的原因?
MySQL服务?code>mysqld改由Unix用户mysqladmin shutdown
)?
root
用户才能做到)Q?pre>shell> chown -R user_name /path/to/mysql/datadir
如果?strong>MySQL数据目录中的目录或文件是W号链接Q你也将需要顺着那些链接q改变他们指向的目录和文件?code>user_name用户启动服务器,或如果你正在使用MySQL 3.22或以后版本,以Unixmysqld
q?code>mysqld在接受Mq接之前切换CUnix mysql.server
脚本启动mysql.server
?code>user_nameq行--user
选项调用safe_mysqld
是必要的。)
现在Q你?code>user_nameq行Qƈq行完好。尽有一件事情没有变化:权限表的内容。缺??在q行了脚?code>root是唯一有存?code>rootdӞq不应该L你作?strong>MySQL-u root
的选项?/p>
注意通过在命令行上提?code>root存取MySQLQ与作ؓUnix -u
选项Q客户将试图使用你的Unixd名作Z?strong>MySQL用户名进行连接?/p>
如果你的Unix机器本n不安全,你可能应该至在存取表中?strong>MySQLmysql -u root db_name
q且做他喜欢做的M事情?/p>
如果你忘CMySQL?code>killQ不?code>mysqld服务器来关闭mysqld服务器。pid 被保存在一?code> root用户或运行服务器的相同用户做q个?/p>
mysqld
?
REVOKE
句法。你也可以用mysqladmin -h hostname flush-privileges
或用SQL命omysql
发出下列错误消息Q?
ERROR: Can't find file: 'path/with/filename.frm' (Errcode: 13)
那么可能是在UMASK
可能讄不正。缺省的umask值是safe_mysqld
改变其行为:
shell> UMASK=384 # = 600 in octal shell> export UMASK shell> /path/to/safe_mysqld &
如果你从MySQL得到Can't open file: ... (errno: 24)
或Q何其他有errno 24
的错误,它意味着Q你没有?strong>MySQL分配_的文件描q符。你能?code>mysqld正在试图同时保持打开太多的文件。你也可以告?code>mysqld可得到的文g描述W数量?/p>
Z告诉safe_mysqld
?code>max_connectionsg减打开文g的数?~省值是90)?/p>
要想改变safe_mysqld
脚本。脚本中有一条注释了的行'#'
字符来去掉该行的注释Qƈ且改变数?56改变?code>ulimit
能增加文件描q符的数量,但是只能到操作系l强加的限制。如果你需要增加每个进E可用的文g描述W数量的OS限制Q参见你的操作系l文档?/p>
注意Q如果你q行ulimit
不工作Q当你请求当前限制时Q?code>sh启动DATE
列的问题
一?code>'YYYY-MM-DD'。根据ANSI SQLQ不允许其他格式。你应该?code>SELECT语句的WHERE子句中用这个格式。例如:
mysql> SELECT * FROM tbl_name WHERE date >= '1997-05-05';
Z方便Q如果日期用在数字上下文Q?strong>MySQL自动变换一个日期到一个数?q且反过来也如此)。当更新时和一个日期与DATE
?code>WHERE子句中,也是_灉|以允怸U“宽䏀的字符串格式。(宽松格式意味着M标点字符用作在部件之间的分割W。例如,'1998#08#15'
是等L。)MySQL也能变换不包含分割符的一个字W串(例如'0000-00-00'
可以作ؓ?/font>
当通过MyODBC使用一?code>NULLQ因为ODBC不能处理q种日期?/p>
因ؓMySQL实行了上q的变换Q下列语句可以工作:
mysql> INSERT INTO tbl_name (idate) VALUES (19970505); mysql> INSERT INTO tbl_name (idate) VALUES ('19970505'); mysql> INSERT INTO tbl_name (idate) VALUES ('97-05-05'); mysql> INSERT INTO tbl_name (idate) VALUES ('1997.05.05'); mysql> INSERT INTO tbl_name (idate) VALUES ('1997 05 05'); mysql> INSERT INTO tbl_name (idate) VALUES ('0000-00-00'); mysql> SELECT idate FROM tbl_name WHERE idate >= '1997-05-05'; mysql> SELECT idate FROM tbl_name WHERE idate >= 19970505; mysql> SELECT mod(idate,100) FROM tbl_name WHERE idate >= 19970505; mysql> SELECT idate FROM tbl_name WHERE idate >= '19970505';
然而,下列不工作Q?
mysql> SELECT idate FROM tbl_name WHERE STRCMP(idate,'19970505')=0;
idate
转换Z个字W串q且实施字符串比较。它不将'1998-2-31'
Q错误的日期被存储。如果日期不能被变换CQ何合理的|?code>0。这主要是一个速度问题q且我们认ؓ查日期是应用E序的责任,而不服务器?/p>
如果你有一个问题,TZ
环境变量Z的当前时区。这应该在服务器q行的环境进行,例如?code>mysql.server中?/p>
~省圎ͼMySQL搜烦是大写不敏感的(管有一些字W集从来不是忽略大小写的Q例?code>col_name LIKE 'a%'搜寻Q你得到所有以 单的比较操作( 如果你想要一个列L被当作大写敏感的方式,声明它ؓ 如果你用以所谓的big5~码的中文数据,你要使所有的字符列是
两个语句把值插入到 在SQL中, 要想L ?strong>MySQL中,像很多其他的SQL服务器一P你不能烦引可以有 注意Q你?ANSI SQL 不允怽在一?code>WHERE代码被执行时Q列D可能没有l结。例如下列查询是不合?/strong>Q?/p>
如果?code>max_allowed_packetQ,你应该分成更的部分q且执行多个 如果你有一个复杂的查询Q涉及多个表Q但没有q回M行,你应该用下列过E查找你的询问有什么不对:
问题可能?strong>MySQL在前一?code>“A-xxx?/font>?tt>A-?code>ALTER TABLE
工作方式是:
SQL的要Ҏ中抽象应用程序以避免数据存储格式。你应该L以你惌索数据的意愿指定序。例如: 以 在一个应用程序中Q你应该决不Z他们的位|?code>INSERT INTO new_table SELECT fields-in-new_table-order FROM old_table.
a
开始的列倹{如果你惌使这个搜索大写敏感Q用象查一个前~。或如果列值必ȝ切是
Q?code>?/p>
LIKE
比较在每个字W的大写gq行(E==e 但是E<>'eQ?/p>
CREATE TABLE
句法?/p>
NULL
值问?/h2>
NULL
是和一个空字符?code>
NULL
D第二个插入一个空字符丌Ӏ第一个的含义可以认ؓ是“电话号码不知道”,而第二个则可意味着“她没有电话”?NULL
值比较时L假的QFALSEQ。包?code>NULL|除非在包含在表达式中的运符和函数的文档中指出。在下列例子Q所有的列返?code>NULL的列Q你不能使用expr = NULL
是假的:mysql> SELECT * FROM my_table WHERE phone = NULL;
IS NULL
试。下例显C如何找?code>
NOT NULL
Q而且Q你不能插入LOAD DATA INFILE
d数据ӞI列?code>NULL|你应该在文本文g中?code>'NULL'也可以在某些情Ş下用。见7.16ORDER BY
Ӟ首先呈现DESC
以降序排序,GROUP BY
Ӟ所有的NULL
的处理,你能使用IS NOT NULL
q算W和NULL
DҎ地处理。如果你?code>TIMESTAMP列,则插入当前的日期和时间。如果你?code>AUTO_INCREMENT列,则插入顺序中的下一个数字?/p>
18.16
GROUP BY
?code>HAVING部分中用别名引用列。别名也可以用来为列取一个更好点的名字:SELECT SQRT(a*b) as rt FROM table_name GROUP BY rt HAVING rt > 0;
SELECT id,COUNT(*) AS cnt FROM table_name GROUP BY id HAVING cnt > 0;
SELECT id AS "Customer identity" FROM table_name;
SELECT id,COUNT(*) AS cnt FROM table_name WHERE cnt > 0 GROUP BY id;
GROUP BY
部分中,?code>DELETE语句中用多个表Q你应该使用下列Ҏ?个关联的表中删除行:
SELECT
行?
related_column
是一个烦引,你每ơ只删除100-1000?code>DELETE最快。如?code>IN子句中参数的数量无关?br />18.18 解决没有匚w行的问题
EXPLAIN
句法(得到关于一?code>WHERE子句中用的字段?
SELECT
Q针对从询问中做后被删除的表?
DOUBLE
列与有小数的数字q行比较Q你不能使用FLOAT
Ҏ一?code>mysql test < query.sql的测试来昄你的问题。你可以?code>mysqlbug的邮寄测试文件到mysql@lists.mysql.com?/p>18.19 ?code>ALTER TABLEMq样一个错误:
Error on rename of './database/name.frm' to './database/B-a.frm' (Errcode: 17)
18.20 怎样改变一张表中列的顺?/h2>
SELECT col_name1, col_name2, col_name3 FROM tbl_name;
col_name2
?code>col_name1?code>col_name2的顺序返回列?/p>
]]>
վ֩ģ壺
Ʒtvþþþþþþþ|
99þù뾫Ʒ|
պѸƵ|
Ļ|
߹͵Ʒ|
͵ԾƷʮ|
þþþƷŮ|
99REþþƷﶼǾƷ
|
Ʒþþþa|
Ļ|
þþþþƵ|
Ļձ|
ëƬ߹ۿ|
˳77777ɫ߲|
ƷƵѹۿ|
ҹƬ|
ɫվ߹ۿ|
߹ۿӾѰ
|
ɫƷ
|
ƷƵ|
91þ˾Ʒɫ|
91Ƶ|
պaƵ|
ɫַ|
߹ۿ|
777777|
һһͰһƵ|
Ʒۿ91|
|
ϸëƬ|
þþžƷ|
Ʒһʽֱ
|
ҹӰѹۿ|
Ļaѿ|
ɫѹۿ|
aƵ|
ҰƵ߹ۿ|
91Ƶ߹ۿ|
߲Ƶ|
99߹ۿ|
ҹ|