个人的博客的mysql服务down掉,查看日志,日志中出现了这样的错误提示:
一查才知道是因为open files的原因,linux 系统默认的opens file是1024,可以使用ulimit -a 查看,这个是系统级的限制。另外在mysql中默认的open files也是1024,所以要同时调整这两个参数才可以。如何调整呢?
一、调整系统级的open files:
打开vi /etc/security/limits.conf文件:在文件里添加一行:* – nofile 4096,这样就把open files调整到了4096。
二、调整mysql的open files:
打开vi /etc/my.cnf文件,在[mysqld]段中添加一行:open_files_limit = 4096,重启mysql即可!
修改:/etc/my.cnf
[[root@test0001 ~]# vi /etc/my.cnf
[mysqld]
open_files_limit = 30000
重启 mysqld
service mysqld restart
再次查看:
mysql> show global variables like '%open%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_openssl | NO |
| open_files_limit | 30000 |
| table_open_cache | 2048 |
+------------------+-------+
3 rows in set (0.00 sec)
至此问题解决!
附录:
open_files_limit 这个数字少了点,这里有个算法:
max_open_files_1 = max_connections + table_cache * 2 = 100 + 1000 * 2 = 2100
max_open_files_2 = max_connections*5 = 100 * 5 = 500
一查才知道是因为open files的原因,linux 系统默认的opens file是1024,可以使用ulimit -a 查看,这个是系统级的限制。另外在mysql中默认的open files也是1024,所以要同时调整这两个参数才可以。如何调整呢?
一、调整系统级的open files:
打开vi /etc/security/limits.conf文件:在文件里添加一行:* – nofile 4096,这样就把open files调整到了4096。
二、调整mysql的open files:
打开vi /etc/my.cnf文件,在[mysqld]段中添加一行:open_files_limit = 4096,重启mysql即可!
修改:/etc/my.cnf
[[root@test0001 ~]# vi /etc/my.cnf
[mysqld]
open_files_limit = 30000
重启 mysqld
service mysqld restart
再次查看:
mysql> show global variables like '%open%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_openssl | NO |
| open_files_limit | 30000 |
| table_open_cache | 2048 |
+------------------+-------+
3 rows in set (0.00 sec)
至此问题解决!
附录:
open_files_limit 这个数字少了点,这里有个算法:
max_open_files_1 = max_connections + table_cache * 2 = 100 + 1000 * 2 = 2100
max_open_files_2 = max_connections*5 = 100 * 5 = 500
[实践Ok]mysql关联left join条件on和where条件的区别及结合coalesce函数及adddate函数的用法,这儿不是介绍left join 或者right join的区别,是一个where 中的in和left 中的in在gourp by时的区别问题。
主要是对这两篇文章的一介总结:
[实践常用]Mysql时间加减ADDDATE函数用法: http://jackxiang.com/post/4935/
[实践用到]mysql coalesce的函数用法 :http://jackxiang.com/post/4934/
注意:部分来自网路上,Url:http://blog.sina.com.cn/s/blog_613212e10100hin2.html ,还必须参考下这个哥们的这篇文章:
http://hi.baidu.com/luoxiandong99/blog/item/0a0c86b5799efa1119d81ffd.html
摘录:
为什么会存在差异,这和on与where查询顺序有关。
我们知道标准查询关键字执行顺序为 from->where->group by->having->order by[ 记得不是很清楚呢]
left join 是在from范围类所以 先on条件筛选表,然后两表再做left join。
而对于where来说在left join结果再次筛选。
。。。
如下:阅读全文
主要是对这两篇文章的一介总结:
[实践常用]Mysql时间加减ADDDATE函数用法: http://jackxiang.com/post/4935/
[实践用到]mysql coalesce的函数用法 :http://jackxiang.com/post/4934/
注意:部分来自网路上,Url:http://blog.sina.com.cn/s/blog_613212e10100hin2.html ,还必须参考下这个哥们的这篇文章:
http://hi.baidu.com/luoxiandong99/blog/item/0a0c86b5799efa1119d81ffd.html
摘录:
为什么会存在差异,这和on与where查询顺序有关。
我们知道标准查询关键字执行顺序为 from->where->group by->having->order by[ 记得不是很清楚呢]
left join 是在from范围类所以 先on条件筛选表,然后两表再做left join。
而对于where来说在left join结果再次筛选。
。。。
如下:阅读全文
日常用法:
参考开孡:
ADDDATE(date,INTERVAL expr type) ADDDATE(expr,days)
当被第二个参数的INTERVAL格式激活后, ADDDATE()就是DATE_ADD()的同义词。相关函数SUBDATE() 则是DATE_SUB()的同义词。对于INTERVAL参数上的信息 ,请参见关于DATE_ADD()的论述。
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
-> '1998-02-02'
mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);
-> '1998-02-02'
若 days 参数只是整数值,则 MySQL 5.1将其作为天数值添加至 expr。
mysql> SELECT ADDDATE('1998-01-02', 31);
-> '1998-02-02'
来源地址:http://www.bhcode.net/article/20090225/4215.html
参考开孡:
ADDDATE(date,INTERVAL expr type) ADDDATE(expr,days)
当被第二个参数的INTERVAL格式激活后, ADDDATE()就是DATE_ADD()的同义词。相关函数SUBDATE() 则是DATE_SUB()的同义词。对于INTERVAL参数上的信息 ,请参见关于DATE_ADD()的论述。
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
-> '1998-02-02'
mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);
-> '1998-02-02'
若 days 参数只是整数值,则 MySQL 5.1将其作为天数值添加至 expr。
mysql> SELECT ADDDATE('1998-01-02', 31);
-> '1998-02-02'
来源地址:http://www.bhcode.net/article/20090225/4215.html
coalesce函数表示可以返回参数中的第一个非空表达式,当你有N个参数时选取第一个非空值(从左到右)。
实例一:
select coalesce(null,"carrot","apple");
返回结果:carrot
mysql> select coalesce(null,"carrot","apple");
+---------------------------------+
| coalesce(null,"carrot","apple") |
+---------------------------------+
| carrot |
+---------------------------------+
实例二:
select coalesce(1,"carrot","apple")
返回结果:1
友情提示:coalesce里的参数如果是字符串的话,务必用单引号或者双引号廓起来;
这些语句可以直接在mysql里运行。
mysql> select coalesce(1,"carrot","apple");
+------------------------------+
| coalesce(1,"carrot","apple") |
+------------------------------+
| 1 |
+------------------------------+
1 row in set (0.00 sec)
实际用到在查询时有可能是null时,显示0,如下 :
mysql> select coalesce(null, 0);
+-------------------+
| coalesce(null, 0) |
+-------------------+
| 0 |
+-------------------+
1 row in set (0.00 sec)
mysql> select coalesce('1', 0);
+------------------+
| coalesce('1', 0) |
+------------------+
| 1 |
+------------------+
1 row in set (0.00 sec)
实例一:
select coalesce(null,"carrot","apple");
返回结果:carrot
mysql> select coalesce(null,"carrot","apple");
+---------------------------------+
| coalesce(null,"carrot","apple") |
+---------------------------------+
| carrot |
+---------------------------------+
实例二:
select coalesce(1,"carrot","apple")
返回结果:1
友情提示:coalesce里的参数如果是字符串的话,务必用单引号或者双引号廓起来;
这些语句可以直接在mysql里运行。
mysql> select coalesce(1,"carrot","apple");
+------------------------------+
| coalesce(1,"carrot","apple") |
+------------------------------+
| 1 |
+------------------------------+
1 row in set (0.00 sec)
实际用到在查询时有可能是null时,显示0,如下 :
mysql> select coalesce(null, 0);
+-------------------+
| coalesce(null, 0) |
+-------------------+
| 0 |
+-------------------+
1 row in set (0.00 sec)
mysql> select coalesce('1', 0);
+------------------+
| coalesce('1', 0) |
+------------------+
| 1 |
+------------------+
1 row in set (0.00 sec)
来源:http://bbs.chinaunix.net/thread-621473-1-1.html
查了下网络上出现该原因的来源如下:
This means that something of the following has happened:
The client program did not call mysql_close() before exit.
The client had been sleeping more than wait_timeout or interactive_timeout without doing any requests. See section SHOW VARIABLES.
The client program ended abruptly in the middle of the transfer.
When the above happens, the server variable Aborted_clients is incremented.
The server variable Aborted_connects is incremented when:
When a connection packet doesn't contain the right information.
When the user didn't have privileges to connect to a database.
When a user uses a wrong password.
When it takes more than connect_timeout seconds to get a connect package.
这个现象如果是因为有人想恶意连接你的数据库就无所谓了,只要加强安全控制就行了,如果是正常的连接情况下产生的,就要检查出真正的原因所在了。
有人建议:
请参阅:http://codenode.com/dns
解决办法:
1、启动时带参数 --skip-name-resolve
2、访问的主机授权时用IP,最好把该主机的IP及主机名写到/etc/hosts文件中
试过了还是不行,一样还会出现Aborted_connects大于0的情况,可能有人恶意连接我的数据库的原因,出现了Aborted_connects总出现大于0!
附录:
发现这算属MySQL的一个bug,不管连接是通过hosts还是ip的方式,MySQL都会对DNS做反查,IP到DNS,由于反查的接续速度过慢(不管是不是isp提供的dns服务器的问题或者其他原因),大量的查询就难以应付,线程不够用就使劲增加线程,但是却得不到释放,所以MySQL会“ 假死”。
解决的方案很简单,结束这个反查的过程,禁止任何解析。
打开mysql的配置文件(my.cnf),在[mysqld]下面增加一行:
skip-name-resolve
[mysqld]
skip-name-resolve
附录:( How MySQL uses DNS )
When a new thread connects to mysqld, mysqld will spawn a new thread to handle the request. This thread will first check if the hostname is in the hostname cache. If not the thread will call gethostbyaddr_r() and gethostbyname_r() to resolve the hostname.
If the operating system doesn’t support the above thread-safe calls, the thread will lock a mutex and call gethostbyaddr() and gethostbyname() instead. Note that in this case no other thread can resolve other hostnames that is not in the hostname cache until the first thread is ready.
You can disable DNS host lookup by starting mysqld with –skip-name-resolve. In this case you can however only use IP names in the MySQL privilege tables.
If you have a very slow DNS and many hosts, you can get more performance by either disabling DNS lookop with –skip-name-resolve or by increasing the HOST_CACHE_SIZE define (default: 128) and recompile mysqld.
You can disable the hostname cache with –skip-host-cache. You can clear the hostname cache with FLUSH HOSTS or mysqladmin flush-hosts.
If you don’t want to allow connections over TCP/IP, you can do this by starting mysqld with –skip-networking.
PHP远程连接MYSQL速度慢,有时远程连接到MYSQL用时4-20秒不等,本地连接MYSQL正常,出现这种问题的主要原因是,默认安装的MYSQL开启了DNS的反向解析,在MY.INI(WINDOWS系统下)或MY.CNF(UNIX或LINUX系统下)文件的[mysqld]下加入skip-name-resolve这一句。
MYSQL远程连接速度慢的解决方法
在局域网内连接其他机器的MYSQL,发现速度慢的很,不知道什么原因,总有几秒的延迟.
后来在网上发现解决方法,my.ini里面添加
[mysqld]
skip-name-resolve
skip-grant-tables
这样速度就快了!
skip-name-resolve
选项就能禁用DNS解析,连接速度会快很多。不过,这样的话就不能在MySQL的授权表中使用主机名了而只能用ip格式。
若使用–skip-grant-tables系统将对任何用户的访问不做任何访问控制,但可以用 mysqladmin flush-privileges或mysqladmin reload来开启访问控制;默认情况是show databases语句对所有用户开放,
如果mysql服务器没有开远程帐户,就在my.ini里面加上skip-grant-tables
我的处理,2步骤:
1.修改My.cnf
vi /etc/my.cnf
加入一行,直接绑定IP,如下:
没有重启动前端口是这样的,如下:
root@116.255.139.240:~# netstat -atlunp|grep mysql
tcp 0 0 :::3306 :::* LISTEN 24841/mysqld
重启Mysql:
root@116.255.139.240:~# cat /root/runmysql.sh
sh /root/runmysql.sh
启动后发现:
root@116.255.139.240:~# netstat -atlunp|grep mysql
tcp 0 0 116.255.139.240:3306 0.0.0.0:* LISTEN 10965/mysqld
2.修改Linux的host文件,目的是把localhost指向上面这个116.255.139.240,而不是127.0.0.1,否则会出现连接不上Mysql的,操作如下:
mysql的bind-address设置为127.0.0.1,通过localhost连接访问不了,所以必须修改!!!
root@116.255.139.240:~# vi /etc/hosts
#127.0.0.1 localhost.localdomain localhost jackxiang.localhost
116.255.139.240 localhost.localdomain localhost jackxiang.localhost
测试Mysql是否Ok:
mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 81
Server version: 5.5.20-log Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
When a new thread connects to mysqld, mysqld will spawn a new thread to handle the request. This thread will first check if the hostname is in the hostname cache. If not the thread will call gethostbyaddr_r() and gethostbyname_r() to resolve the hostname.
If the operating system doesn’t support the above thread-safe calls, the thread will lock a mutex and call gethostbyaddr() and gethostbyname() instead. Note that in this case no other thread can resolve other hostnames that is not in the hostname cache until the first thread is ready.
You can disable DNS host lookup by starting mysqld with –skip-name-resolve. In this case you can however only use IP names in the MySQL privilege tables.
If you have a very slow DNS and many hosts, you can get more performance by either disabling DNS lookop with –skip-name-resolve or by increasing the HOST_CACHE_SIZE define (default: 128) and recompile mysqld.
You can disable the hostname cache with –skip-host-cache. You can clear the hostname cache with FLUSH HOSTS or mysqladmin flush-hosts.
If you don’t want to allow connections over TCP/IP, you can do this by starting mysqld with –skip-networking.
大致翻译如下:
当一个新连接连接mysql服务器时,mysql服务器会对此次连接的合法性进行判定,具体通过查询mysql.user表实现。mysql的权限设置将user和host(客户端的地址)联系起来,只有当两者都符合条件时才能进行下一步认证。
当 客户端连接的时候,客户端的地址假如不在mysql.host表中时,mysql服务器会调用gethostbyaddr和gethostbyname名 字进行解析(同步方法),或者gethostbyaddr_r和gethostbyname_r(异步)来解析客户端地址,这样会导致效率下降。
因此建议安装完毕之后从my.cnf中删除skip-name-resolve,然后在调用grant命令时全部写成ip地址。
假如以前的mysql.user表中host列存在host-name,设置skip-name-resolve时,会出现如下的warning:
[Warning] ‘user’ entry ‘root@XXX.com’ ignored in –skip-name-resolve mode.
删掉(因为已经改成ip认证的形式了)重启就ok了
查了下网络上出现该原因的来源如下:
This means that something of the following has happened:
The client program did not call mysql_close() before exit.
The client had been sleeping more than wait_timeout or interactive_timeout without doing any requests. See section SHOW VARIABLES.
The client program ended abruptly in the middle of the transfer.
When the above happens, the server variable Aborted_clients is incremented.
The server variable Aborted_connects is incremented when:
When a connection packet doesn't contain the right information.
When the user didn't have privileges to connect to a database.
When a user uses a wrong password.
When it takes more than connect_timeout seconds to get a connect package.
这个现象如果是因为有人想恶意连接你的数据库就无所谓了,只要加强安全控制就行了,如果是正常的连接情况下产生的,就要检查出真正的原因所在了。
有人建议:
请参阅:http://codenode.com/dns
解决办法:
1、启动时带参数 --skip-name-resolve
2、访问的主机授权时用IP,最好把该主机的IP及主机名写到/etc/hosts文件中
试过了还是不行,一样还会出现Aborted_connects大于0的情况,可能有人恶意连接我的数据库的原因,出现了Aborted_connects总出现大于0!
附录:
发现这算属MySQL的一个bug,不管连接是通过hosts还是ip的方式,MySQL都会对DNS做反查,IP到DNS,由于反查的接续速度过慢(不管是不是isp提供的dns服务器的问题或者其他原因),大量的查询就难以应付,线程不够用就使劲增加线程,但是却得不到释放,所以MySQL会“ 假死”。
解决的方案很简单,结束这个反查的过程,禁止任何解析。
打开mysql的配置文件(my.cnf),在[mysqld]下面增加一行:
skip-name-resolve
[mysqld]
skip-name-resolve
附录:( How MySQL uses DNS )
When a new thread connects to mysqld, mysqld will spawn a new thread to handle the request. This thread will first check if the hostname is in the hostname cache. If not the thread will call gethostbyaddr_r() and gethostbyname_r() to resolve the hostname.
If the operating system doesn’t support the above thread-safe calls, the thread will lock a mutex and call gethostbyaddr() and gethostbyname() instead. Note that in this case no other thread can resolve other hostnames that is not in the hostname cache until the first thread is ready.
You can disable DNS host lookup by starting mysqld with –skip-name-resolve. In this case you can however only use IP names in the MySQL privilege tables.
If you have a very slow DNS and many hosts, you can get more performance by either disabling DNS lookop with –skip-name-resolve or by increasing the HOST_CACHE_SIZE define (default: 128) and recompile mysqld.
You can disable the hostname cache with –skip-host-cache. You can clear the hostname cache with FLUSH HOSTS or mysqladmin flush-hosts.
If you don’t want to allow connections over TCP/IP, you can do this by starting mysqld with –skip-networking.
PHP远程连接MYSQL速度慢,有时远程连接到MYSQL用时4-20秒不等,本地连接MYSQL正常,出现这种问题的主要原因是,默认安装的MYSQL开启了DNS的反向解析,在MY.INI(WINDOWS系统下)或MY.CNF(UNIX或LINUX系统下)文件的[mysqld]下加入skip-name-resolve这一句。
MYSQL远程连接速度慢的解决方法
在局域网内连接其他机器的MYSQL,发现速度慢的很,不知道什么原因,总有几秒的延迟.
后来在网上发现解决方法,my.ini里面添加
[mysqld]
skip-name-resolve
skip-grant-tables
这样速度就快了!
skip-name-resolve
选项就能禁用DNS解析,连接速度会快很多。不过,这样的话就不能在MySQL的授权表中使用主机名了而只能用ip格式。
若使用–skip-grant-tables系统将对任何用户的访问不做任何访问控制,但可以用 mysqladmin flush-privileges或mysqladmin reload来开启访问控制;默认情况是show databases语句对所有用户开放,
如果mysql服务器没有开远程帐户,就在my.ini里面加上skip-grant-tables
我的处理,2步骤:
1.修改My.cnf
vi /etc/my.cnf
加入一行,直接绑定IP,如下:
没有重启动前端口是这样的,如下:
root@116.255.139.240:~# netstat -atlunp|grep mysql
tcp 0 0 :::3306 :::* LISTEN 24841/mysqld
重启Mysql:
root@116.255.139.240:~# cat /root/runmysql.sh
sh /root/runmysql.sh
启动后发现:
root@116.255.139.240:~# netstat -atlunp|grep mysql
tcp 0 0 116.255.139.240:3306 0.0.0.0:* LISTEN 10965/mysqld
2.修改Linux的host文件,目的是把localhost指向上面这个116.255.139.240,而不是127.0.0.1,否则会出现连接不上Mysql的,操作如下:
mysql的bind-address设置为127.0.0.1,通过localhost连接访问不了,所以必须修改!!!
root@116.255.139.240:~# vi /etc/hosts
#127.0.0.1 localhost.localdomain localhost jackxiang.localhost
116.255.139.240 localhost.localdomain localhost jackxiang.localhost
测试Mysql是否Ok:
mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 81
Server version: 5.5.20-log Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
When a new thread connects to mysqld, mysqld will spawn a new thread to handle the request. This thread will first check if the hostname is in the hostname cache. If not the thread will call gethostbyaddr_r() and gethostbyname_r() to resolve the hostname.
If the operating system doesn’t support the above thread-safe calls, the thread will lock a mutex and call gethostbyaddr() and gethostbyname() instead. Note that in this case no other thread can resolve other hostnames that is not in the hostname cache until the first thread is ready.
You can disable DNS host lookup by starting mysqld with –skip-name-resolve. In this case you can however only use IP names in the MySQL privilege tables.
If you have a very slow DNS and many hosts, you can get more performance by either disabling DNS lookop with –skip-name-resolve or by increasing the HOST_CACHE_SIZE define (default: 128) and recompile mysqld.
You can disable the hostname cache with –skip-host-cache. You can clear the hostname cache with FLUSH HOSTS or mysqladmin flush-hosts.
If you don’t want to allow connections over TCP/IP, you can do this by starting mysqld with –skip-networking.
大致翻译如下:
当一个新连接连接mysql服务器时,mysql服务器会对此次连接的合法性进行判定,具体通过查询mysql.user表实现。mysql的权限设置将user和host(客户端的地址)联系起来,只有当两者都符合条件时才能进行下一步认证。
当 客户端连接的时候,客户端的地址假如不在mysql.host表中时,mysql服务器会调用gethostbyaddr和gethostbyname名 字进行解析(同步方法),或者gethostbyaddr_r和gethostbyname_r(异步)来解析客户端地址,这样会导致效率下降。
因此建议安装完毕之后从my.cnf中删除skip-name-resolve,然后在调用grant命令时全部写成ip地址。
假如以前的mysql.user表中host列存在host-name,设置skip-name-resolve时,会出现如下的warning:
[Warning] ‘user’ entry ‘root@XXX.com’ ignored in –skip-name-resolve mode.
删掉(因为已经改成ip认证的形式了)重启就ok了
今天内网自己系统出现了一个问题,表面现象是Js前端提示alert:SyntaxError: missing ) in parenthetical,而经查则是由于一个Ajax请求一个PHP,PHP请求Mysql数据库时出现了问题,抓捕包返回如下:
查询网上有一篇文章如下:http://blog.csdn.net/jallin2001/article/details/6776943 其主要是说远程连接的事情,但也罗列该作者遇到的问题,
对我有帮助,摘抄如下:
当通过 TCP/IP 连接 MySQL 远程主机时,出现 ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 104 。如果是在linux shell命令行中直接打 mysql 命令,能够顺利连上 MySQL,执行查询语句也比较正常,但如果执行 STOP SLAVE; 命令时就随机出现 ERROR 2013 (HY000): Lost connection to MySQL server during query 问题。而如果把操作命令写到脚本文件再去执行该脚本文件的话,则必然出现 Lost connection to MySQL server at 'reading initial communication packet', system error: 111
要是无论通过什么途径远程访问都出现错误可以认为是系统有防火墙之类的限制,但现在这种奇怪的抽筋现象让人百思不得其解。最后找到的解决方法是在 my.cnf 里面的 [mysqld] 段增加一个启动参数
skip-name-resolve
问题消失,原因如下:
http://www.ixpub.net/thread-1326843-1-1.html
所谓反向解析是这样的:
mysql接收到连接请求后,获得的是客户端的ip,为了更好的匹配mysql.user里的权限记录(某些是用hostname定义的)。
如果mysql服务器设置了dns服务器,并且客户端ip在dns上并没有相应的hostname,那么这个过程很慢,导致连接等待。
添加skip-name-resolve以后就跳过着一个过程了。
添加上述的参数后,就直接跳过了。希望对同行有帮助。
查询网上有一篇文章如下:http://blog.csdn.net/jallin2001/article/details/6776943 其主要是说远程连接的事情,但也罗列该作者遇到的问题,
对我有帮助,摘抄如下:
当通过 TCP/IP 连接 MySQL 远程主机时,出现 ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 104 。如果是在linux shell命令行中直接打 mysql 命令,能够顺利连上 MySQL,执行查询语句也比较正常,但如果执行 STOP SLAVE; 命令时就随机出现 ERROR 2013 (HY000): Lost connection to MySQL server during query 问题。而如果把操作命令写到脚本文件再去执行该脚本文件的话,则必然出现 Lost connection to MySQL server at 'reading initial communication packet', system error: 111
要是无论通过什么途径远程访问都出现错误可以认为是系统有防火墙之类的限制,但现在这种奇怪的抽筋现象让人百思不得其解。最后找到的解决方法是在 my.cnf 里面的 [mysqld] 段增加一个启动参数
skip-name-resolve
问题消失,原因如下:
http://www.ixpub.net/thread-1326843-1-1.html
所谓反向解析是这样的:
mysql接收到连接请求后,获得的是客户端的ip,为了更好的匹配mysql.user里的权限记录(某些是用hostname定义的)。
如果mysql服务器设置了dns服务器,并且客户端ip在dns上并没有相应的hostname,那么这个过程很慢,导致连接等待。
添加skip-name-resolve以后就跳过着一个过程了。
添加上述的参数后,就直接跳过了。希望对同行有帮助。
If you are running the VM inside VMware Workstation 5.5
(1)From VMware Workstation: go to VM> Install VMware Tools
(2)From the VM: mount the virtual cd drive
mount /dev/cdrom /mnt/
(3)Extract VMware Tools to /tmp/
tar -C /tmp -zxvf /mnt/VMwareTools-5.5.3-34685.tar.gz
(4)Unmount the virtual cd drive
umount /mnt
主要问题:
Fedora13 Alpha版本内核版本为:
2.6.33-0.52.rc8.git6.fc13.i686.PAE
其下载地址为:
ftp://rpmfind.net/linux/fedora/releases/test/13-Alpha/Fedora/i386/os/Packages/kernel-devel-2.6.33-0.52.rc8.git6.fc13.i686.rpm
注:不同的版本可在此网站找到相应的文件。
----- 如果网络畅通,可以 运行 [ yum -y install kernel-devel ],进行安装就6M,很快
Rpm:
参考:http://jackxiang.com/post/3220/
#./vmware-install.pl
bash:./vmware-install.pl :/usr/bin/perl:bad interpreter:No such file or directory.
如果出现这个提示,则表明系统没有安装Perl环境,可以使用如下命令来提供Perl支持:
#yum groupinstall "Perl Support"
Searching for GCC...
The path "" is not valid path to the gcc binary.
Would you like to change it? [yes]
如果出现这个就表明gcc没有安装
yum install gcc gcc-c++ automake make
将编译环境一次装好
Searching for a valid kernel header path...
The path "" is not valid.
Would you like to change it? [yes]
如果出现这个就表示kernel-devel包没有安装
yum install kernel-devel
成功安装VMware tools时的提示:
Searching for GCC...
Detected GCC binary at "/usr/bin/gcc".
The path "/usr/bin/gcc" appears to be a valid path to the gcc binary.
Would you like to change it? [no]
Searching for a valid kernel header path...
Detected the kernel headers of the running kernel at
"/lib/modules/2.6.32-71.el6.i686/build/include".
The path "/lib/modules/2.6.32-71.el6.i686/build/include" appears to be a valid
path to the kernel headers of the running kernel.
Would you like to change it? [no]
来源:http://www.4shell.org/archives/2062.html
(1)From VMware Workstation: go to VM> Install VMware Tools
(2)From the VM: mount the virtual cd drive
mount /dev/cdrom /mnt/
(3)Extract VMware Tools to /tmp/
tar -C /tmp -zxvf /mnt/VMwareTools-5.5.3-34685.tar.gz
(4)Unmount the virtual cd drive
umount /mnt
主要问题:
Fedora13 Alpha版本内核版本为:
2.6.33-0.52.rc8.git6.fc13.i686.PAE
其下载地址为:
ftp://rpmfind.net/linux/fedora/releases/test/13-Alpha/Fedora/i386/os/Packages/kernel-devel-2.6.33-0.52.rc8.git6.fc13.i686.rpm
注:不同的版本可在此网站找到相应的文件。
----- 如果网络畅通,可以 运行 [ yum -y install kernel-devel ],进行安装就6M,很快
Rpm:
参考:http://jackxiang.com/post/3220/
#./vmware-install.pl
bash:./vmware-install.pl :/usr/bin/perl:bad interpreter:No such file or directory.
如果出现这个提示,则表明系统没有安装Perl环境,可以使用如下命令来提供Perl支持:
#yum groupinstall "Perl Support"
Searching for GCC...
The path "" is not valid path to the gcc binary.
Would you like to change it? [yes]
如果出现这个就表明gcc没有安装
yum install gcc gcc-c++ automake make
将编译环境一次装好
Searching for a valid kernel header path...
The path "" is not valid.
Would you like to change it? [yes]
如果出现这个就表示kernel-devel包没有安装
yum install kernel-devel
成功安装VMware tools时的提示:
Searching for GCC...
Detected GCC binary at "/usr/bin/gcc".
The path "/usr/bin/gcc" appears to be a valid path to the gcc binary.
Would you like to change it? [no]
Searching for a valid kernel header path...
Detected the kernel headers of the running kernel at
"/lib/modules/2.6.32-71.el6.i686/build/include".
The path "/lib/modules/2.6.32-71.el6.i686/build/include" appears to be a valid
path to the kernel headers of the running kernel.
Would you like to change it? [no]
来源:http://www.4shell.org/archives/2062.html
PHP的构造方法的格式如下:
function __construct(){}
或者:function 类名(){}
---
有人喜欢不用构造,而是申明一个同名的函数,这样就可以调用其同名函数,而自动在初始化类时就会调用,而也有喜欢用构造函数的,但是同时出现有什么现象呢,发现是构造函数调用了,但是同类名函数没有被调用。如下:
root@116.255.139.240:/home/admin/php# php class.php
verify class auto run test.processid=911
而加入function __construct()后,如下:
root@116.255.139.240:/home/admin/php# php class.php
auto run function.
可以参考:http://blog.k-sya.com/2011/09/20/13.html
类的学习:
http://wenku.baidu.com/view/58f351360b4c2e3f572763e8.html
参考题目:
http://wenku.baidu.com/view/e0e18b7d1711cc7931b716fe.html
function __construct(){}
或者:function 类名(){}
---
有人喜欢不用构造,而是申明一个同名的函数,这样就可以调用其同名函数,而自动在初始化类时就会调用,而也有喜欢用构造函数的,但是同时出现有什么现象呢,发现是构造函数调用了,但是同类名函数没有被调用。如下:
root@116.255.139.240:/home/admin/php# php class.php
verify class auto run test.processid=911
而加入function __construct()后,如下:
root@116.255.139.240:/home/admin/php# php class.php
auto run function.
可以参考:http://blog.k-sya.com/2011/09/20/13.html
类的学习:
http://wenku.baidu.com/view/58f351360b4c2e3f572763e8.html
参考题目:
http://wenku.baidu.com/view/e0e18b7d1711cc7931b716fe.html
昨日家乡一远亲打来电话,向我咨询一个法律上的问题,情况如下:他现为乡下一养鸡专业户,由于这两年鸡蛋和肉鸡的价格疯长,获利颇丰。日前乡镇领导和他商谈,希望其扩大规模,带动当地经济发展,而他也恰有此意。然而按照乡镇“大型养鸡场”的嘱托,其手头的存款是远远不够的。乡镇领导答应无偿为他划出场地,并帮他摆平贷款一事,故其欲知:倘若此项目不成功,债务是否可以请求乡镇政府代为清偿?
听闻此事我颇为惊讶,于是告诉他,政府是不能作为债务担保人的,即使将来“鸡飞蛋打”,债务仍将由其个人承担。同时嘱告他,现在鸡价高涨,其后必定回落,因此当前建大型养鸡场的风险是很大的。放下电话我叹息再三,忽然想到了数日前看到的北京大学李零教授的“大学养鸡场”论。李君此言从大学养鸡场式的管理入手,痛批当前的大学管理模式,当时读来颇感畅快,然而回思方才电话中故亲所言才突然明白:在政府和大学管理者的眼中,大学本来就是一个养鸡场罢了!
从教育产业化到大学扩招,数年来中国的高等教育真可谓“茁壮成长”。不论看大学规模还是在校人数,中国的大学都已经达到了“世界一流水平”。然而国人始终郁闷的是:为什么我们的教育就做不出世界一流的学问,产生不了世界一流的人才?其实答案很简单,我们的大学不过是一个“大型养鸡场”罢了,他的目标已经变成了养鸡卖肉,而不是生产世界一流的“鸡”了!
回看中国大学的扩张之路,与远亲的养鸡场扩大之路是何等的相似:都有社会需求,都有利润可图,都有政府支持,都有沽名钓誉之心……既然如此,那就在政府的“担保”之下引入资金,增加鸡舍面积,扩大养鸡规模。每天数着鸡笼里的鸡下了多少蛋,同时预计还可以再多养多少只鸡,轰轰烈烈的朝“大型养鸡场”的目标前进。
或许有人会问,这样的盲目发展难道不会导致生产过剩吗?同时如此大规模的发展,又如何保证鸡肉的营养和质量呢?如果生产过剩,是否会导致鸡场破产呢?而如果鸡肉质量降低,是否会导致社会对整个养鸡事业的鄙夷呢?
上面的问题使我不禁开始构想:终于有一天,人们发现鸡蛋多得卖不完了,发现鸡肉不是那么有营养了,于是整个社会都开始一致的谴责养鸡人,认为这种规模化的生产是对鸡场的亵渎,严重的影响了中国养鸡事业的发展,需要其停业整顿或者破产还债,恐怕“养鸡场的主人”真的要问一句:这是在政府的主导下进行的,能不能请他们代为清偿债务啊?
来源:http://blog.sina.com.cn/s/blog_4ae683bb010009tr.html
1.“大型养鸡场”与“大学养鸡场” http://blog.sina.com.cn/s/blog_4ae683bb010009tr.html
2.[经济学案例]大型养鸡场为什么赔钱 完全竞争市场 http://www.hainu.edu.cn/zy_jingpinkecheng/asp_hainu_show.asp?id=45836
主要是推手,有这人此个需求,和真的去做,所以,后果得自己承担,这就是市场经济。
听闻此事我颇为惊讶,于是告诉他,政府是不能作为债务担保人的,即使将来“鸡飞蛋打”,债务仍将由其个人承担。同时嘱告他,现在鸡价高涨,其后必定回落,因此当前建大型养鸡场的风险是很大的。放下电话我叹息再三,忽然想到了数日前看到的北京大学李零教授的“大学养鸡场”论。李君此言从大学养鸡场式的管理入手,痛批当前的大学管理模式,当时读来颇感畅快,然而回思方才电话中故亲所言才突然明白:在政府和大学管理者的眼中,大学本来就是一个养鸡场罢了!
从教育产业化到大学扩招,数年来中国的高等教育真可谓“茁壮成长”。不论看大学规模还是在校人数,中国的大学都已经达到了“世界一流水平”。然而国人始终郁闷的是:为什么我们的教育就做不出世界一流的学问,产生不了世界一流的人才?其实答案很简单,我们的大学不过是一个“大型养鸡场”罢了,他的目标已经变成了养鸡卖肉,而不是生产世界一流的“鸡”了!
回看中国大学的扩张之路,与远亲的养鸡场扩大之路是何等的相似:都有社会需求,都有利润可图,都有政府支持,都有沽名钓誉之心……既然如此,那就在政府的“担保”之下引入资金,增加鸡舍面积,扩大养鸡规模。每天数着鸡笼里的鸡下了多少蛋,同时预计还可以再多养多少只鸡,轰轰烈烈的朝“大型养鸡场”的目标前进。
或许有人会问,这样的盲目发展难道不会导致生产过剩吗?同时如此大规模的发展,又如何保证鸡肉的营养和质量呢?如果生产过剩,是否会导致鸡场破产呢?而如果鸡肉质量降低,是否会导致社会对整个养鸡事业的鄙夷呢?
上面的问题使我不禁开始构想:终于有一天,人们发现鸡蛋多得卖不完了,发现鸡肉不是那么有营养了,于是整个社会都开始一致的谴责养鸡人,认为这种规模化的生产是对鸡场的亵渎,严重的影响了中国养鸡事业的发展,需要其停业整顿或者破产还债,恐怕“养鸡场的主人”真的要问一句:这是在政府的主导下进行的,能不能请他们代为清偿债务啊?
来源:http://blog.sina.com.cn/s/blog_4ae683bb010009tr.html
1.“大型养鸡场”与“大学养鸡场” http://blog.sina.com.cn/s/blog_4ae683bb010009tr.html
2.[经济学案例]大型养鸡场为什么赔钱 完全竞争市场 http://www.hainu.edu.cn/zy_jingpinkecheng/asp_hainu_show.asp?id=45836
主要是推手,有这人此个需求,和真的去做,所以,后果得自己承担,这就是市场经济。
在css里面定义字体为微软雅黑但在Firefox下的显示就无效了,
请问这个有办法解决吗?css要怎么定义才能把浏览器默认字体强制改过来?
如果可以改的话是不是构成侵犯用户自主选择权?
在css里编写:
body{font-family:设置你的字体 : font-family: 微软雅黑 !important;
这个是因为你火狐浏览器设置的字体的问题。
1,点击浏览器上“工具”——“选项”。
2,然后点击选项弹出框里面的“字体&颜色”后面的“高级”按钮。
3,在点击以后弹出的字体弹出框中勾选“允许页面选择显示字体而无需使用上面的设置”前面的复选框。
然后点确定就ok啦。这样你用样式设置的css的字体才可以在ff中显示。
当然你要保证有微软雅黑和设置了使用微软雅黑。
来源:http://www.douban.com/group/topic/16603778/
请问这个有办法解决吗?css要怎么定义才能把浏览器默认字体强制改过来?
如果可以改的话是不是构成侵犯用户自主选择权?
在css里编写:
body{font-family:设置你的字体 : font-family: 微软雅黑 !important;
这个是因为你火狐浏览器设置的字体的问题。
1,点击浏览器上“工具”——“选项”。
2,然后点击选项弹出框里面的“字体&颜色”后面的“高级”按钮。
3,在点击以后弹出的字体弹出框中勾选“允许页面选择显示字体而无需使用上面的设置”前面的复选框。
然后点确定就ok啦。这样你用样式设置的css的字体才可以在ff中显示。
当然你要保证有微软雅黑和设置了使用微软雅黑。
来源:http://www.douban.com/group/topic/16603778/
方法一:
CODE:
方法二:
CODE:
来自:http://www.linuxdiyf.com/viewarticle.php?id=203102
Unix及FreeBSD的密码生成情况:
自动更改口令由两部分组成.即自动口令生成,及口令设置.
1. 口令生成.口令生成比较简单,你可以根据时间、日期、IP、MAC等进行一系统的换算然后取其中一些字符即可。
2.口令设置
Linux下的口令设置比较简单.因为LINUX下的passwd支持stdin参数,即可以从标准输入接收口令.
如要更改口令为 1234.即可做如下操作:
cat "1234" > pass.file
passwd root --stdin < pass.file
这样,root口令即在无干扰情况下被更改,
BSD下可能会比较复杂.因为BSD下的passwd不支持stdin或类似参数.可以只能考虑其它方式.
UNIX类操作系统的的口令加密一般会使用crypt 函数进行的加密算法.其使用方法如下:
char *crypt(const char *key, const char *salt);
其一个使用实例如下:
crypt("mypassword", "$1$ZsQMTk6T$e");
这样你输入原始口令后,通过这个函数即可产出密文.
在/etc/passwd文中,在特定的位置保存着密文.这时,我们只要把得到的密文通过文件操作,换掉原来的密文即可.
由于BSD等BSD类UNIX系统,其并不直接使用/etc/passwd,而且使用一个数据库文件,所以还需要执行pwd_mkdb来生成DB文件.
参考代码如下:
//genpasswd (脚本)
#!/bin/sh
IP=`ifconfig eth0|grep "inet addr"|awk '{print $2}'|awk -F ":" '{print $2}'`
echo `date` $IP $1 >/tmp/pass
md5sum /tmp/pass.1
expr substr `cat /tmp/pass.1|awk '{print $1}'` 3 10
genpass.c //用于根据原始密码生成密文
int main(int argc, char **argv)
{
if (argc != 2) {
printf("Usage: %s pass\n");
return -1;
}
printf("%s\n", crypt(argv[1], "$1$ZsQMTk6T$e"));
}
用于更改密码:(脚本)
#!/bin/sh
if [ $# -ne 1 ];then
echo "Usage: "
exit
fi
password=`/usr/sbin/genpasswd $1`
passwd=`/usr/bin/genepass $password`
username=`grep -i -w $1 /etc/passwd|awk -F: '{print $1}'`
echo $username
echo $1 $username $password >>/root/mychpass.log
exit
cat /etc/master.passwd | awk -v user=$username -v pass=$passwd -F: '{if ($1 == user) {print $1 ":" pass":" $3 ":" $4 ":" $5 ":" $6 ":" $7 ":" $8 ":" $9 ":" $10} else {print}}' /etc/master.passwd > /tmp/master.passwd.tmp
mv /tmp/master.passwd.tmp /etc/master.passwd
/usr/sbin/pwd_mkdb /etc/master.passwd
这样,新密码即生效了.
当然,以上方法稍作修改也可以用于LINUX类操作系统.
来自:http://hbaolong.bokee.com/960891.html
CODE:
方法二:
CODE:
来自:http://www.linuxdiyf.com/viewarticle.php?id=203102
Unix及FreeBSD的密码生成情况:
自动更改口令由两部分组成.即自动口令生成,及口令设置.
1. 口令生成.口令生成比较简单,你可以根据时间、日期、IP、MAC等进行一系统的换算然后取其中一些字符即可。
2.口令设置
Linux下的口令设置比较简单.因为LINUX下的passwd支持stdin参数,即可以从标准输入接收口令.
如要更改口令为 1234.即可做如下操作:
cat "1234" > pass.file
passwd root --stdin < pass.file
这样,root口令即在无干扰情况下被更改,
BSD下可能会比较复杂.因为BSD下的passwd不支持stdin或类似参数.可以只能考虑其它方式.
UNIX类操作系统的的口令加密一般会使用crypt 函数进行的加密算法.其使用方法如下:
char *crypt(const char *key, const char *salt);
其一个使用实例如下:
crypt("mypassword", "$1$ZsQMTk6T$e");
这样你输入原始口令后,通过这个函数即可产出密文.
在/etc/passwd文中,在特定的位置保存着密文.这时,我们只要把得到的密文通过文件操作,换掉原来的密文即可.
由于BSD等BSD类UNIX系统,其并不直接使用/etc/passwd,而且使用一个数据库文件,所以还需要执行pwd_mkdb来生成DB文件.
参考代码如下:
//genpasswd (脚本)
#!/bin/sh
IP=`ifconfig eth0|grep "inet addr"|awk '{print $2}'|awk -F ":" '{print $2}'`
echo `date` $IP $1 >/tmp/pass
md5sum /tmp/pass.1
expr substr `cat /tmp/pass.1|awk '{print $1}'` 3 10
genpass.c //用于根据原始密码生成密文
int main(int argc, char **argv)
{
if (argc != 2) {
printf("Usage: %s pass\n");
return -1;
}
printf("%s\n", crypt(argv[1], "$1$ZsQMTk6T$e"));
}
用于更改密码:(脚本)
#!/bin/sh
if [ $# -ne 1 ];then
echo "Usage: "
exit
fi
password=`/usr/sbin/genpasswd $1`
passwd=`/usr/bin/genepass $password`
username=`grep -i -w $1 /etc/passwd|awk -F: '{print $1}'`
echo $username
echo $1 $username $password >>/root/mychpass.log
exit
cat /etc/master.passwd | awk -v user=$username -v pass=$passwd -F: '{if ($1 == user) {print $1 ":" pass":" $3 ":" $4 ":" $5 ":" $6 ":" $7 ":" $8 ":" $9 ":" $10} else {print}}' /etc/master.passwd > /tmp/master.passwd.tmp
mv /tmp/master.passwd.tmp /etc/master.passwd
/usr/sbin/pwd_mkdb /etc/master.passwd
这样,新密码即生效了.
当然,以上方法稍作修改也可以用于LINUX类操作系统.
来自:http://hbaolong.bokee.com/960891.html
参加过SETI@HOME?那么你一定听说过WOW!信号。它于1977年8月15日晚(美国的晚上,公历)被“大耳朵”(Big Ear)射电望远镜发现。Jerry Ehman,Franklin大学的教授,当晚他为这个项目值班。当计算机把信号的代码打印出来后,这哥们看到第二列有诸如“6EQUJ5”这样的代码,惊恐万状,用笔把这几个字符圈了起来,并在旁边写下“WOW!”表示他的惊叹。诺,信号的代码并教授的“评价”就在这张图上:阅读全文
在网上没有买到火车票,登录了好多次,都说是连接数已满,登录不进去,好不容易进去了,说是网银付款只支持IE,不支持Firefox,我X,只好买了飞机票,在微博客上有很多有文采的人写的,摘录意淫一下也未尝不可:
铁道部说:12036崩溃是因为访问量过大。马化腾笑了;铁道部马上改口说:是因为存在大量在线交易。马云笑了;铁道部最后说:是因为同时处理太多时间和车次搜索信息。李彦宏笑了。无奈之时铁道部只好请杨幂给12036做宣传,杨幂说:这是一个比58同城还要神奇的网站!
--------------------------------------------------------------------------------------------------------
其实,07年奥运购票系统瘫痪时,百度的李彦宏也写过一小段博文,摘录如下:
北京奥运购票系统瘫痪随想
2007-11-01 9:37
昨天,北京奥组委票务中心在奥运新闻中心召开新闻发布会,就北京奥运会第二阶段销售工作暂停进行了情况说明。北京奥组委票务中心主任容军表示,目前票务中心正在对门票销售系统进行容量扩充和升级工作。除技术上升级之外,还将适当调整“先到先得”的销售政策,综合这两方面做出的解决方案将于11月5日公布。
“从目前境内公众参与购票的趋势和规模来看,票务销售系统必须进行升级和扩容。但是仅仅从技术一个角度去扩容的话,很难估计再次启动的时候是每小时800万次的流量还是更多,所以票务中心将从技术的扩容更新升级和售票政策的必要调整两个方面来综合考虑,制定解决方案。”发布会上,容军用这样一句话回答了记者的提问,也道出了北京奥组委票务中心在解决第二阶段奥运门票销售问题时的基本方向。
看了这个消息,真是感觉心痛。每小时800万次的流量,我们的奥运系统就撑不住了。百度在过去的7年中积累了大量的经验,对于大访问量,大数据量,实时更新的系统的理解非常深刻。不要说800万次,就是每小时8000万次,对百度来说,也只是a piece of cake.
以上博文文字来源:http://hi.baidu.com/liyanhong/blog/item/362ed42aeb8db398033bf6a4.html/index/3
最后,我的总结是,让子弹飞里的经典台词:这种事,你花点钱啊~!,花不了几个钱。。。以铁道部的要有风有风,要有肉有肉;要有火锅就有火锅的国企来说,对于此次事件,我想是件好事,让领导也好见识到做网站还是需要一丁点技术加经验的,不是随便找几个人就能摆平的(我估计有不少领导可能觉得做网站这事可能根本就不是问题,随便找个人就能做,价格还贼便宜),同时竞标体制,肥水不留外人田的思考方式也是其内在罂粟,最终导致这次事件的发生。于此同时铁道部在增强自身相关的能力的同时也要加强在互联网浪潮下的服务意识才行,本是想方便购票,做成了给购票人骂的笑柄,成为网民饭后谈资,娱乐了大众,我想也是一次全新的感受啊。EOF。
铁道部说:12036崩溃是因为访问量过大。马化腾笑了;铁道部马上改口说:是因为存在大量在线交易。马云笑了;铁道部最后说:是因为同时处理太多时间和车次搜索信息。李彦宏笑了。无奈之时铁道部只好请杨幂给12036做宣传,杨幂说:这是一个比58同城还要神奇的网站!
--------------------------------------------------------------------------------------------------------
其实,07年奥运购票系统瘫痪时,百度的李彦宏也写过一小段博文,摘录如下:
北京奥运购票系统瘫痪随想
2007-11-01 9:37
昨天,北京奥组委票务中心在奥运新闻中心召开新闻发布会,就北京奥运会第二阶段销售工作暂停进行了情况说明。北京奥组委票务中心主任容军表示,目前票务中心正在对门票销售系统进行容量扩充和升级工作。除技术上升级之外,还将适当调整“先到先得”的销售政策,综合这两方面做出的解决方案将于11月5日公布。
“从目前境内公众参与购票的趋势和规模来看,票务销售系统必须进行升级和扩容。但是仅仅从技术一个角度去扩容的话,很难估计再次启动的时候是每小时800万次的流量还是更多,所以票务中心将从技术的扩容更新升级和售票政策的必要调整两个方面来综合考虑,制定解决方案。”发布会上,容军用这样一句话回答了记者的提问,也道出了北京奥组委票务中心在解决第二阶段奥运门票销售问题时的基本方向。
看了这个消息,真是感觉心痛。每小时800万次的流量,我们的奥运系统就撑不住了。百度在过去的7年中积累了大量的经验,对于大访问量,大数据量,实时更新的系统的理解非常深刻。不要说800万次,就是每小时8000万次,对百度来说,也只是a piece of cake.
以上博文文字来源:http://hi.baidu.com/liyanhong/blog/item/362ed42aeb8db398033bf6a4.html/index/3
最后,我的总结是,让子弹飞里的经典台词:这种事,你花点钱啊~!,花不了几个钱。。。以铁道部的要有风有风,要有肉有肉;要有火锅就有火锅的国企来说,对于此次事件,我想是件好事,让领导也好见识到做网站还是需要一丁点技术加经验的,不是随便找几个人就能摆平的(我估计有不少领导可能觉得做网站这事可能根本就不是问题,随便找个人就能做,价格还贼便宜),同时竞标体制,肥水不留外人田的思考方式也是其内在罂粟,最终导致这次事件的发生。于此同时铁道部在增强自身相关的能力的同时也要加强在互联网浪潮下的服务意识才行,本是想方便购票,做成了给购票人骂的笑柄,成为网民饭后谈资,娱乐了大众,我想也是一次全新的感受啊。EOF。
1、首先是Linux要支持汉字字符集:一般UTF-8。CentOS在etc/sysconfig/i18n中,Suse Enterprises Linux在 /etc/sysconfig/language中。
把LANG改成支持UTF-8的字符集
如:
LANG=”zh_CN.utf8″或者LANG=”en_US.utf8″
查看服务器字符集1、查看当前服务器字符集 #locale ,查看服务器支持的字符集 #locale -a。
让设置的字符集生效:source 文件名,另也可在 /etc/profile (全局) 或者 ~/.bashrc (单个用户)设置 Linux 系统的环境变量。
2、再当然就是在SecureCRT下功夫;菜单下有:选项->会话选项->外观->字符编码:选择UTF-8
到这里的时候发现我的汉字还是乱码:字体选择支持汉语的字体。选择好字符集就搞定了!
Eof
实战开始,CentOS和Suse Enterprises Linux下的实际操作如下:
一:检查系统是否支持上文说的两种字体:
locale -a|grep zh_CN.utf8
zh_CN.utf8
或者:
locale -a|grep en_US.utf8
en_US.utf8 两种都支持,选一种即可。
二:设定如下:
(1)CentOS:
vi /etc/sysconfig/i18n
#LANG="en_US.UTF-8"
LANG="zh_CN.utf8"
以上设定:LANG就全部变成了:zh_CN.utf8
再:source /etc/sysconfig/i18n
(2)Suse Enterprises,而这个得两个变量,如下:
vi /etc/sysconfig/language
LC_ALL=zh_CN.utf8
LANG=zh_CN.utf8
export LC_ALL LANG
source /etc/sysconfig/language
(3)查看两个系统的配置是否生效,以下说明都生效了。
root@116.255.139.240:/home/jackxiang/download# locale
LANG=zh_CN.utf8
LC_CTYPE="zh_CN.utf8"
LC_NUMERIC="zh_CN.utf8"
LC_TIME="zh_CN.utf8"
LC_COLLATE="zh_CN.utf8"
LC_MONETARY="zh_CN.utf8"
LC_MESSAGES="zh_CN.utf8"
LC_PAPER="zh_CN.utf8"
LC_NAME="zh_CN.utf8"
LC_ADDRESS="zh_CN.utf8"
LC_TELEPHONE="zh_CN.utf8"
LC_MEASUREMENT="zh_CN.utf8"
LC_IDENTIFICATION="zh_CN.utf8"
LC_ALL=zh_CN.utf8
WEB_39_74_sles10sp1:/home/jackxiang/download # locale
LANG=zh_CN.utf8
LC_CTYPE="zh_CN.utf8"
LC_NUMERIC="zh_CN.utf8"
LC_TIME="zh_CN.utf8"
LC_COLLATE="zh_CN.utf8"
LC_MONETARY="zh_CN.utf8"
LC_MESSAGES="zh_CN.utf8"
LC_PAPER="zh_CN.utf8"
LC_NAME="zh_CN.utf8"
LC_ADDRESS="zh_CN.utf8"
LC_TELEPHONE="zh_CN.utf8"
LC_MEASUREMENT="zh_CN.utf8"
LC_IDENTIFICATION="zh_CN.utf8"
LC_ALL=zh_CN.utf8
最后,看中文显示是否正常:(输入中文是否正常,删除中文是否一次可以删除一个中文,用vim是否可以输入中文,查看是否正常,及下载后Windows下是否正常显示)
root@116.255.139.240:/home/jackxiang/download# ls 审批流程SQL.txt
审批流程SQL.txt
...
27 update t_process set f_Status = 'error' where f_Id = 181
28 jack=向东阳 (中文输入正常,删除也正常)
下载后打开是否正常:
root@116.255.139.240:/home/jackxiang/download# sz 审批流程SQL.txt
editplus打开:jack=向东阳 正常。
本文件是Utf8,别存为ANSI后,再rz上去测试看显示及修改是否正常:
CentOS正常显示:jack=向东阳 正常
vim显示版本 7.0.237 :set fileencoding
fileencoding=euc-cn 显示正常,而Suse EnterPrise下Vim 版本 6.4.6 显示不正常:jack=Ïò¶«Ñô Õý³£
set fileencoding 为:
fileencoding=latin1
很显然是由于vim的默认配置有些问题,可能你也需要做下配置修改,如下:
vi ~/.vimrc
加入或者修改:
再用vim查看时:jack=向东阳 正常显示。删除也是一次删除一个中文,添加一个中文,sz下来后查看:
jack=向东阳 正常吗?
其实这个新宋体的字体也可以换的,我换成了:Yahei Mono ,网上下的,也不不错,中文也没有问题。
说明都是OK的,回顾一下,系统编码,vim编辑器编码,以及SecureCRT的编码,
如果再来个Mysql呢?Utf8的还好这样就Ok了(character_set_database utf8),我们设置的都是Utf8,但是要是GBK的编码呢?怎么办呢?晕了吧,如下:
show variables like 'char%';
mysql> show variables like 'char%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
这种情况的话一看就是Mysql的默认编码latin1,这各情况得确保连接参数(就是你的SecureCRT)与这个字段字符集一致。
尽管可以用 set names 'charsetname' 来改变设置,比如, set names 'gbk';
这条命令会同时修改 character_set_client,character_set_connection,character_set_results
例如:SecureCRT设置的字符编码为 UTF-8,则需要用 set names 'utf8';才能保证SecureCRT既能显示中文,也可以使用带有中文的SQL命令。
话这样说,在实际中,还真有GBK的默认,这下就不好搞了,你再怎么设置也无济于事,所以这种情况得开两个secureCRT,一个兼容utf8,一个兼容GBK。
这块涉及到中文查询,返回,多个字符集的转化,还涉及到系统SecureCRT等的转化,淘宝DBA团队前好像写过一篇文章,也收录了,当时看明白了,但忘记了:http://jackxiang.com/post/1387/,呵呵,这块好像还是有点薄弱,希望有能统一的兄弟给研究一下,谢谢。
但是,这样还是会乱码,得修改SecureCRT的编码为默认:再当然就是在SecureCRT下功夫;菜单下有:选项->会话选项->外观->字符编码:选择默认。
mysql> select * from t_project \G; 中文正常了,ProjectName: 临时产品 ...
中文查询:
mysql> select * from t_project where ProjectName='项目234'\G;
*************************** 1. row ***************************
f_Id: 72
ProjectName: 项目234
查询Ok,应该插入也不成问题。。。EOF
后记摘抄自同事的说法:
使用mysql好久了,经常被中文乱码搞的很郁闷,在经历了N久的折磨后,现将解决乱码的流程共享出来:
1.首先要确认连接数据库的字符集是否一致。
2.查询前,要确认与表的字符集一致。
3.如果表里面的字符集确实不对应,尝试使用CONVERT()函数
4.检查你的页面编码、meta 声明、数据库连接方式(SET NAMES)是否一致,如果你的页面和meta设置为gb2312,但是却在程序中设置 SET NAMES utf8,同样会导致乱码。原因是如果页面设置为 gb2312 ,那么表单中的数据也是按照 gb2312 提交,但是程序却要求按照 utf8 去处理,结果自然是乱码。
5.检查你的文件存储编码是否和 meta 声明的一致,假如你的文件是按照 utf-8 编码存储,但是 meta 却声明为 gb2312 ,将导致乱码。
确认以上三点,基本上可以解决90%的乱码问题。
把LANG改成支持UTF-8的字符集
如:
LANG=”zh_CN.utf8″或者LANG=”en_US.utf8″
查看服务器字符集1、查看当前服务器字符集 #locale ,查看服务器支持的字符集 #locale -a。
让设置的字符集生效:source 文件名,另也可在 /etc/profile (全局) 或者 ~/.bashrc (单个用户)设置 Linux 系统的环境变量。
2、再当然就是在SecureCRT下功夫;菜单下有:选项->会话选项->外观->字符编码:选择UTF-8
到这里的时候发现我的汉字还是乱码:字体选择支持汉语的字体。选择好字符集就搞定了!
Eof
实战开始,CentOS和Suse Enterprises Linux下的实际操作如下:
一:检查系统是否支持上文说的两种字体:
locale -a|grep zh_CN.utf8
zh_CN.utf8
或者:
locale -a|grep en_US.utf8
en_US.utf8 两种都支持,选一种即可。
二:设定如下:
(1)CentOS:
vi /etc/sysconfig/i18n
#LANG="en_US.UTF-8"
LANG="zh_CN.utf8"
以上设定:LANG就全部变成了:zh_CN.utf8
再:source /etc/sysconfig/i18n
(2)Suse Enterprises,而这个得两个变量,如下:
vi /etc/sysconfig/language
LC_ALL=zh_CN.utf8
LANG=zh_CN.utf8
export LC_ALL LANG
source /etc/sysconfig/language
(3)查看两个系统的配置是否生效,以下说明都生效了。
root@116.255.139.240:/home/jackxiang/download# locale
LANG=zh_CN.utf8
LC_CTYPE="zh_CN.utf8"
LC_NUMERIC="zh_CN.utf8"
LC_TIME="zh_CN.utf8"
LC_COLLATE="zh_CN.utf8"
LC_MONETARY="zh_CN.utf8"
LC_MESSAGES="zh_CN.utf8"
LC_PAPER="zh_CN.utf8"
LC_NAME="zh_CN.utf8"
LC_ADDRESS="zh_CN.utf8"
LC_TELEPHONE="zh_CN.utf8"
LC_MEASUREMENT="zh_CN.utf8"
LC_IDENTIFICATION="zh_CN.utf8"
LC_ALL=zh_CN.utf8
WEB_39_74_sles10sp1:/home/jackxiang/download # locale
LANG=zh_CN.utf8
LC_CTYPE="zh_CN.utf8"
LC_NUMERIC="zh_CN.utf8"
LC_TIME="zh_CN.utf8"
LC_COLLATE="zh_CN.utf8"
LC_MONETARY="zh_CN.utf8"
LC_MESSAGES="zh_CN.utf8"
LC_PAPER="zh_CN.utf8"
LC_NAME="zh_CN.utf8"
LC_ADDRESS="zh_CN.utf8"
LC_TELEPHONE="zh_CN.utf8"
LC_MEASUREMENT="zh_CN.utf8"
LC_IDENTIFICATION="zh_CN.utf8"
LC_ALL=zh_CN.utf8
最后,看中文显示是否正常:(输入中文是否正常,删除中文是否一次可以删除一个中文,用vim是否可以输入中文,查看是否正常,及下载后Windows下是否正常显示)
root@116.255.139.240:/home/jackxiang/download# ls 审批流程SQL.txt
审批流程SQL.txt
...
27 update t_process set f_Status = 'error' where f_Id = 181
28 jack=向东阳 (中文输入正常,删除也正常)
下载后打开是否正常:
root@116.255.139.240:/home/jackxiang/download# sz 审批流程SQL.txt
editplus打开:jack=向东阳 正常。
本文件是Utf8,别存为ANSI后,再rz上去测试看显示及修改是否正常:
CentOS正常显示:jack=向东阳 正常
vim显示版本 7.0.237 :set fileencoding
fileencoding=euc-cn 显示正常,而Suse EnterPrise下Vim 版本 6.4.6 显示不正常:jack=Ïò¶«Ñô Õý³£
set fileencoding 为:
fileencoding=latin1
很显然是由于vim的默认配置有些问题,可能你也需要做下配置修改,如下:
vi ~/.vimrc
加入或者修改:
再用vim查看时:jack=向东阳 正常显示。删除也是一次删除一个中文,添加一个中文,sz下来后查看:
jack=向东阳 正常吗?
其实这个新宋体的字体也可以换的,我换成了:Yahei Mono ,网上下的,也不不错,中文也没有问题。
说明都是OK的,回顾一下,系统编码,vim编辑器编码,以及SecureCRT的编码,
如果再来个Mysql呢?Utf8的还好这样就Ok了(character_set_database utf8),我们设置的都是Utf8,但是要是GBK的编码呢?怎么办呢?晕了吧,如下:
show variables like 'char%';
mysql> show variables like 'char%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
这种情况的话一看就是Mysql的默认编码latin1,这各情况得确保连接参数(就是你的SecureCRT)与这个字段字符集一致。
尽管可以用 set names 'charsetname' 来改变设置,比如, set names 'gbk';
这条命令会同时修改 character_set_client,character_set_connection,character_set_results
例如:SecureCRT设置的字符编码为 UTF-8,则需要用 set names 'utf8';才能保证SecureCRT既能显示中文,也可以使用带有中文的SQL命令。
话这样说,在实际中,还真有GBK的默认,这下就不好搞了,你再怎么设置也无济于事,所以这种情况得开两个secureCRT,一个兼容utf8,一个兼容GBK。
这块涉及到中文查询,返回,多个字符集的转化,还涉及到系统SecureCRT等的转化,淘宝DBA团队前好像写过一篇文章,也收录了,当时看明白了,但忘记了:http://jackxiang.com/post/1387/,呵呵,这块好像还是有点薄弱,希望有能统一的兄弟给研究一下,谢谢。
但是,这样还是会乱码,得修改SecureCRT的编码为默认:再当然就是在SecureCRT下功夫;菜单下有:选项->会话选项->外观->字符编码:选择默认。
mysql> select * from t_project \G; 中文正常了,ProjectName: 临时产品 ...
中文查询:
mysql> select * from t_project where ProjectName='项目234'\G;
*************************** 1. row ***************************
f_Id: 72
ProjectName: 项目234
查询Ok,应该插入也不成问题。。。EOF
后记摘抄自同事的说法:
使用mysql好久了,经常被中文乱码搞的很郁闷,在经历了N久的折磨后,现将解决乱码的流程共享出来:
1.首先要确认连接数据库的字符集是否一致。
2.查询前,要确认与表的字符集一致。
3.如果表里面的字符集确实不对应,尝试使用CONVERT()函数
4.检查你的页面编码、meta 声明、数据库连接方式(SET NAMES)是否一致,如果你的页面和meta设置为gb2312,但是却在程序中设置 SET NAMES utf8,同样会导致乱码。原因是如果页面设置为 gb2312 ,那么表单中的数据也是按照 gb2312 提交,但是程序却要求按照 utf8 去处理,结果自然是乱码。
5.检查你的文件存储编码是否和 meta 声明的一致,假如你的文件是按照 utf-8 编码存储,但是 meta 却声明为 gb2312 ,将导致乱码。
确认以上三点,基本上可以解决90%的乱码问题。
PHP: quick and dirty
python:quick and clean, but not convenient for web development
ruby:code for fun and quick for web
j2ee: too heavy
python:quick and clean, but not convenient for web development
ruby:code for fun and quick for web
j2ee: too heavy
今天,在家太冷,不方便出去,于是参考了一下杜洋老师的这个URl教学,想也试一下,最后,才发现看起来简单,真要做还是蛮辛苦的,特别是那线,接起来超级费劲,可以说心灵手巧锻炼到了,后来安上Usb转串口驱动,打开:STC_ISP_V488.exe,随便整上一个hex文件上去,发现提示: 仍在连接中, 请给 MCU 上电...
(ASP5模块是杜洋工作室研发的STC单片机辅助下载工具。众所周知,STC单片机在下载程序时需要先点击下载按钮,然后拨下电源线再插上,使单片机冷启动一次才可以进行下载: http://bbs.doyoung.net/forum.php?mod=viewthread&tid=230)
参考Url:http://www.doyoung.net/tool/STC_ISP_USB/index.html
后面找了老半天,原来是这样烧录,这种细节都不透露,写成书后,毕竟会让读者不会理解,可能也就失去了兴趣,如下:
结论:下载是先断开5V电源 点击下载 当提示要接给MCU上电时在把5V电源接上 STC 单片机都是这样。
我先断开这个5V的线,后再插上,Ok了。如果没有写,作为一个新手,估计会找来找去的找原因。。。阅读全文
(ASP5模块是杜洋工作室研发的STC单片机辅助下载工具。众所周知,STC单片机在下载程序时需要先点击下载按钮,然后拨下电源线再插上,使单片机冷启动一次才可以进行下载: http://bbs.doyoung.net/forum.php?mod=viewthread&tid=230)
参考Url:http://www.doyoung.net/tool/STC_ISP_USB/index.html
后面找了老半天,原来是这样烧录,这种细节都不透露,写成书后,毕竟会让读者不会理解,可能也就失去了兴趣,如下:
结论:下载是先断开5V电源 点击下载 当提示要接给MCU上电时在把5V电源接上 STC 单片机都是这样。
我先断开这个5V的线,后再插上,Ok了。如果没有写,作为一个新手,估计会找来找去的找原因。。。阅读全文