Submitted by yejr on 周五, 2007/12/28 - 20:35
错误信息如下:
.....
070813 13:10:17 [ERROR] /usr/local/mysql/bin/mysqld: Can't open file: './yejr/access.frm' (errno: 24)
070813 13:10:17 [ERROR] /usr/local/mysql/bin/mysqld: Can't open file: './yejr/accesslog.frm' (errno: 24)
......
070813 13:10:17 [ERROR] Error in accept: Too many open files
....
注意到, 系统错误代号是 24, 用 perror 来查看一下具体的错误信息是什么:
[root@yejr]# /usr/local/mysql/bin/perror 24
OS error code 24: Too many open files
原来是打开文件太多了, 好办.用sysctl来调整一下就好了:
[root@yejr]# sysctl -w fs.file-max=43621
[root@yejr]# sysctl -a | grep fs.file-max
fs.file-max = 43621
Submitted by yejr on 周三, 2007/12/26 - 21:33
1、) 登录服务器后,执行 SET NAMES ‘utf8’; 这样的SQL语句来设定连接字符集为 utf8
2、) 用GUI客户端(如Navicat/MySQL Front)连接服务器时,设定字符集
3、) 用 PhpMyAdmin 连接时,在登录页面选择正确的字符集
Submitted by yejr on 周二, 2007/12/25 - 20:23
尽管数据表创建时已经指定默认字符集了,但是该表里面的字段还是可以指定自己的字符集的。
1、创建数据表时,指定其字符集
CREATE TABLE tbl
(
......
name CHAR(20) CHARACTER SET UTF8,
......
) ENGINE = MyISAM DEFAULT CHARSET UTF8;
2、或者采用 ALTER 语法来转换字段的字符集
ALTER TABLE tbl CHANGE name name CHAR(20) CHARACTER SET utf8;
3、采用其他客户端工具来设定,例如 Navicat/MySQL Front/PhpMyAdmin
Submitted by yejr on 周日, 2007/12/23 - 21:11
指定数据表字符集后,该数据表里的所有字符型字段默认都使用该表指定的字符集。
1、创建数据表时,指定其字符集
CREATE TABLE tbl
(
......
) ENGINE = MyISAM DEFAULT CHARSET UTF8;
2、或者采用 ALTER 语法来转换字段的字符集
ALTER TABLE tbl CONVERT TO CHARACTER SET utf8;
3、采用其他客户端工具来设定,例如 Navicat/MySQL Front/PhpMyAdmin
Submitted by yejr on 周日, 2007/12/23 - 14:17
指定数据库字符集后,该数据库下创建的表默认都采用该库指定的字符集。
1、创建数据库时,指定其字符集
CREATE DATABASE db DEFAULT CHARSET UTF8;
2、或者采用 ALTER 语法来转换字段的字符集
ALTER DATABASE db DEFAULT CHARSET UTF8;
Submitted by yejr on 周二, 2007/12/18 - 13:02
Submitted by yejr on 周日, 2007/12/16 - 15:31
方法1、 用 SET 语法来指定,不加 "GLOBAL" 的话就只对本次会话有效
SET [GLOBAL] character_set_client = utf8;
SET [GLOBAL] character_set_connection = utf8;
SET [GLOBAL] character_set_database = utf8;
SET [GLOBAL] character_set_results = utf8;
SET [GLOBAL] character_set_server = utf8;
方法2、 也用SET语法,只对本次会话有效
SET NAMES 'utf8';
方法3、) 直接修改 my.cnf,增加一行内容,然后重启 MySQL,使之全局生效
default-character-set = utf8
Submitted by yejr on 周六, 2007/12/08 - 21:26
应CU老大邀请,今天下午在北京交通大学和网友们一起再次温习了这个主题,由于最近时间比较紧迫,只好采用前不久的一次技术交流文档了,大家多海涵 :)
文档见附件,必须要用本站帐号登录才能下载,呵呵。
Submitted by yejr on 周六, 2007/12/01 - 15:00
看下手册中的解释是:unauthenticated user refers to a thread that has become associated with a client connection but for which authentication of the client user has not yet been done。意即:有一个线程在处理客户端的连接,但是该客户端还没通过用户验证。
原因可能有:
1、 服务器在做DNS反响解析,解决办法有2:
1、) 在 hosts 中添加客户端ip,如
192.168.0.1 yejr
2、) MySQL启动参数增加一个skip-name-resolve,即不启用DNS反响解析
2、服务器的线程还处于排队状态,因此可以加大 back_log
Submitted by yejr on 周一, 2007/11/26 - 15:54
先看一个例子:
#!/bin/sh
. /root/.bash_profile
cat /home/yejr/alldb|while read LINE
do
#取得IP和组号
IP=`echo $LINE | awk '{print $1}'`
NU=`echo $LINE | awk '{print $2}' | awk -F '-' '{print $1}'`
cnt=`ssh root@$IP "mysql -e 'select count(*) from yejr.tbl1'|tail -n 1"`
echo "$IP $NU $cnt"
done
看起来没有问题吧,实际上,执行的时候只循环了一次,就退出while循环了,为什么呢?
这是因为ssh需要从输入终端来读取数据,在第一次循环时ssh就把 read 读到的数据也给读取了,相当于是被他"吃"了.
解决办法是,指定 ssh 的输入终端,有3种方法:
ssh -f
页面
最近评论