背景:自从PHP引入了一个叫OPcache的扩展,那么如何看OPcache呢,这儿有一个扩展分析PHP代码的性能叫VLD。

需要分析PHP代码的性能,或者说实现同样功能的代码到底哪个更好呢?或者说想知道底层的实现可以使用VLD查看opcode
下载与安装VLD
# wget http://pecl.php.net/get/vld-0.11.2.tgz
# tar zxvf vld-0.11.2.tgz
# cd ./vld-0.11.2
# /usr/local/php/bin/phpize              或者直接phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-vld
# make && make install
---------------------------------
编辑php.ini文件激活vld扩展:
php.ini位置
#cd /usr/local/php/lib
增加
extension=vld.so

重启Apache:
# /usr/local/apache2/bin/apachectl restart
---------------------------------
查看phpinfo()信息


--------------------------------
至此,VLD就安装完了。写个简单的test.php
[php] view plain copy
$a='123';  
echo $a;  



# php -dvld.active=1 ./test.php
如果没有设置php环境变量的话

#/usr/local/php/bin/php  -dvld.active=1  test.php

查看结果
。。。。
下面是举例说明怎么看...
更多请转向:http://blog.csdn.net/21aspnet/article/details/7002644
背景:一同学说是想把照片变成卡通效果,我也不会啊,查了下还真有类似效果,不过呢,想自己涂鸦还得有色彩感才行。

美图秀秀如何把照片变成动漫效果?按这个就成:
http://jingyan.baidu.com/article/380abd0a7478051d90192ca6.html

你看这个,这个是自己涂鸦的,你下个美图秀秀自己怎么图都成:
http://www.gezila.com/tutorials/3280.html
背景:有时候需要比对一下文件,再就是如何快速的跳转到下一个不同,及从一个文件拷贝不同到另一个文件,这些在vimdiff支持到,截取部分备用。

光标移动
接下来试试在行间移动光标,可以看到左右两侧的屏幕滚动是同步的。这是因为"scrollbind"选项被设置了的结果,vim会尽力保证两侧文件的对齐。如果不想要这个特性,可以设置:
:set noscrollbind
可以使用快捷键在各个差异点之间快速移动。跳转到下一个差异点:
]c
反向跳转是:
[c
如果在命令前加上数字的话,可以跳过一个或数个差异点,从而实现跳的更远。比如如果在位于第一个差异点的行输入"2]c",将越过下一个差异点,跳转到第三个差异点。
回页首
文件合并
文件比较的最终目的之一就是合并,以消除差异。如果希望把一个差异点中当前文件的内容复制到另一个文件里,可以使用命令
dp (diff "put")
如果希望把另一个文件的内容复制到当前行中,可以使用命令
do (diff "get",之所以不用dg,是因为dg已经被另一个命令占用了)
如果希望手工修改某一行,可以使用通常的vim操作。如果希望在两个文件之间来回跳转,可以用下列命令序列:
Ctrl-w, w
在修改一个或两个文件之后,vimdiff会试图自动来重新比较文件,来实时反映比较结果。但是也会有处理失败的情况,这个时候需要手工来刷新比较结果:
:diffupdate
如果希望撤销修改,可以和平常用vim编辑一样,直接
<ESC>, u
但是要注意一定要将光标移动到需要撤销修改的文件窗口中。


来自:https://www.ibm.com/developerworks/cn/linux/l-vimdiff/
背景:把mysql换成mysqli时出现,连接数过多,其实际上并不是,原因是我挪动了一下php的sock文件位置导致,因这几个socket修改没有修改完全,于是出现了too many connections ,从mysql里show processlist并没有发现真的有连接,其实用tshark抓下包估计能看到(http://jackxiang.com/post/7458/),并没有发出请求,而估计是mysqli的客户端自己报出来的,别看这个问题小,搞了老半天,都想重新安装Php了,发现原来是路径写错了同时mysqli的客户端提示连接数过多的误提示导致方向走错了。如下:


修改后记得重启动php-fpm:
[root@iZ25z0ugwgtZ etc]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done

还会出现在localhost时连接找不到sock时提示诡异,如下:Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in
开始的回答有点不严谨,估计也没有解决问题,修改了答案,解决办法如下,或配置php.ini,参考:http://jackxiang.com/post/8499/

问题出现的原因:
当主机填写为localhost时MySQL会采用 unix domain socket连接,当主机填写为127.0.0.1时MySQL会采用TCP/IP的方式连接。使用Unix socket的连接比TCP/IP的连接更加快速与安全。这是MySQL连接的特性,可以参考官方文档的说明4.2.2. Connecting to the MySQL Server:

On Unix, MySQL programs treat the host name localhost specially, in a way that is
likely different from what you expect compared to other network-based programs.
For connections to localhost, MySQL programs attempt to connect to the local server
by using a Unix socket file. This occurs even if a --port or -P option is given to
specify a port number. To ensure that the client makes a TCP/IP connection to the
local server, use --host or -h to specify a host name value of 127.0.0.1, or the IP
address or name of the local server. You can also specify the connection protocol
explicitly, even for localhost, by using the --protocol=TCP option.
这个问题有以下几种解决方法:

使用TCP/IP代替Unix socket。即在连接的时候将localhost换成127.0.0.1。
修改MySQL的配置文件my.cnf,指定mysql.socket的位置:
/var/lib/mysql/mysql.sock (你的mysql.socket路径)。
直接在php建立连接的时候指定my.socket的位置(官方文档:mysqli_connect)。比如:
$db = new MySQLi('localhost', 'root', 'root', 'my_db', '3306', '/var/run/mysqld/mysqld.sock')
如果哪里没有说清楚或者说错了,欢迎提出了~~
______________________排查要点如下_______________________________
warning: mysqli::real_connect(): (hy000/1040): too many connections in:
出现场景 :手动编译安装mysql,并制定安装位置,php以localhost方式连接mysql
原因分析 :手动编译安装制定位置后所有的mysql文件都在制定的目录或者data目录下面,php默认只会寻找/temp/mysql.sock找这个sock文件,所以会导致sock文件无法找到。
解决方法 :
1.给sock文件做个软链


ln -s /data/mysqldb/mysql.sock /tmp/mysql.sock;
或者
2.修改php的默认mysql.sock连接地址


mysql.default_socket=/data/mysqldb/mysql.sock
3.使用tcp socket的方式进行连接


mysql('127.0.0.1','username','passwod');

来自:http://ju.outofmemory.cn/entry/144221
背景:mysqli连接数据库,pdo连接mysql都有,这块很多老代码都是用的mysql,为此,伴随PHP7的强制升级,对mysql不再支持了。So,对mysqli这块可以研究研究是很有必要的:-),demo代码如下:

运行结果:
[root@iZ25z0ugwgtZ mysql]# php test.php
Array
(
    [0] => 001
    [1] => jackX
)
Array
(
    [0] => 001
    [1] => jackX
)
Array
(
    [0] => 001
    [1] => jackX
)

——————————————————————————————————————————————————————————————
问题一:当用localhost时出现 mysql数据库 Too many connections
出现这种错误明显就是 mysql_connect 之后忘记 mysql_close;
当大量的connect之后,就会出现Too many connections的错误,mysql默认的连接为100个,而什么情况下会出现这种错误呢?

正常的mysql_connect 之后调用 mysql_close()关闭连接
但在连接错误时,会者mysql_real_query()出现错误退出时,可能忘记mysql_close();
所以在程序return 之前一定要判断是否close(),最稳妥的方法就是在写任何函数时都只有一个出口!
还有可以通过修改mysql配置文件来加大允许连接的数量!

有时你的服务器是经常出现这样的错误呢:
错误信息如下:
Can not connect to MySQL server

Error: Too many connections
Errno.: 1040

Similar error report has beed dispatched to administrator before.

从官方文档知道linux上面编译安装的mysql默认的连接为100个
文档:http://dev.mysql.com/doc/refman/5.0/en/too-many-connections.html

mysql官方告诉我们需要修改max_connections的值,那么我们怎么去修改呢?有两种方法
1、修改配置文件文件
修改/etc/my.cnf这个文件,在[mysqld] 中新增max_connections=N,如果你没有这个文件请从编译源码中的support-files文件夹中复制你所需要的*.cnf文件为到 /etc/my.cnf。我使用的是my-medium.cnf,中型服务器配置。例如我的[mysqld]的内容如下
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
key_buffer = 160M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
max_connections=1000

由于对mysql还不是很熟悉,所以很多参数没有修改。哈哈。。

2、非使用mysqld脚本自动启动的用户。
修改$MYSQL_HOME/bin/mysqld_safe文件
例如:/usr/local/mysql/bin/mysqld_safe这个文件
grep -n ‘max_connection’ $MYSQL_HOME/bin/mysqld_safe
修改对应行号的max_connections参数值

来自:http://www.2cto.com/database/201306/218126.html



问题二:当在测试时出现[root@iZ25z0ugwgtZ mysql]# php  test.php
PHP Warning:  mysqli::mysqli(): (HY000/2002): No such file or directory in /data/codesdev/testdemo/mysql/test.php on line 2
Connect failed: No such file or directory
将'localhost'修改为'127.0.0.1'之后链接正常!
当主机填写为localhost时MySQL会采用 unix domain socket连接,当主机填写为127.0.0.1时MySQL会采用TCP/IP的方式连接。使用Unix socket的连接比TCP/IP的连接更加快速与安全。这是MySQL连接的特性,可以参考官方文档的说明4.2.2. Connecting to the MySQL Server:

On Unix, MySQL programs treat the host name localhost specially, in a way that is
likely different from what you expect compared to other network-based programs.
For connections to localhost, MySQL programs attempt to connect to the local server
by using a Unix socket file. This occurs even if a --port or -P option is given to
specify a port number. To ensure that the client makes a TCP/IP connection to the
local server, use --host or -h to specify a host name value of 127.0.0.1, or the IP
address or name of the local server. You can also specify the connection protocol
explicitly, even for localhost, by using the --protocol=TCP option.
这个问题有以下几种解决方法:

使用TCP/IP代替Unix socket。即在连接的时候将localhost换成127.0.0.1。
修改MySQL的配置文件my.cnf,指定mysql.socket的位置:
/var/lib/mysql/mysql.sock (你的mysql.socket路径)。
直接在php建立连接的时候指定my.socket的位置(官方文档:mysqli_connect)。比如:
$db = new MySQLi('localhost', 'root', 'root', 'my_db', '3306', '/var/run/mysqld/mysqld.sock')
如果哪里没有说清楚或者说错了,欢迎提出了~~

来自:https://segmentfault.com/q/1010000000328531
解决Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future:
mysqli 更严谨 安全 高效

php 5个版本,5.2、5.3、5.4、5.5,怕跟不上时代,新的服务器直接上5.5,但是程序出现如下错误:Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in,看意思就很明了,说mysql_connect这个模块将在未来弃用,请你使用mysqli或者PDO来替代。

解决方法1:
禁止php报错
display_errors = On
改为
display_errors = Off

鉴于这个服务器都是给用户用的,有时候他们需要报错(…都是给朋友用的,^_^),不能这做,让他们改程序吧,看方案2.

解决方法2:
<?php
error_reporting(E_ALL ^ E_DEPRECATED);

以上来自:http://www.cnblogs.com/bjxing/p/3555929.html
————————————————————————————————————————————————————————————



解决The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in 报错
很明显的提示 mysql扩展模块就要被放弃使用了,所以请使用mysqli代替

这个说明你的php版本过高造成的。

解决方法:
把mysql的相关模块全都改为mysqli就行了。
比如:
1、mysql_connect 改为mysqli_connect

2、mysql_query 改为mysqli_query

3、mysql_close 改为 mysqli_close

4、mysql_select_db 改为 mysqli_select_db

5、mysql_error 改为 mysqli_error

等等!
来自:http://www.inbeijing.org/archives/1017


———————————————————————————————————
mysql_select_db  ==> mysqli_select_db:


来自:http://www.runoob.com/php/func-mysqli-select-db.html


用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): too many connections in :
https://jackxiang.com/post/8500/
最近新版火狐打开很多https连接都报错:(错误码: ssl_error_no_cypher_overlap)
一直还在叨叨火狐的问题,后来多方搜索才发现是因为火狐使用的dns被墙了
修改hosts文件即可解决,加入以下内容:

来自:http://www.aknife.cn/zhuanzai/firefox-ssl-error.html
背景:linux长时间无动作会断掉,此时需要发送点东西保持活动,这个ping估计是有点类似于SecureCRT里终端,发送协议NO-OP每[10]秒。
防止ssh时断连.bat
背景:之前配置成功过,找了很多文章,特别是国外的,现在国内也有兄弟在做这个,于是做一个转载,配置热点有好处,可以连接上去操作树莓派。

     本文是基于在某东购买的usb无线网卡(RTL8188CUS芯片)来制作无线热点。本来想制作一个一键脚本,不过先把实现的过程记录下来。
参考文章
Turn Your Raspberry Pi Into a WiFi Hotspot with Edimax Nano USB EW-7811Un (RTL8188CUS chipset)
Why won’t dnsmasq’s DHCP server work when using hostapd?阅读全文
碰到问题一:



安装了MySQL,然后用 telnet ip 3306,端口后报BHost '127.0.0.1' is not allowed to connect to this MySQL serverConnection closed by foreign host,虽然自己以前也碰到过,后来解决了,但是觉得还是值得贴出来,估计会有很多人同样碰到过,贴个解决办法:

MySQL>UPDATE MySQL.user SET Host='%' WHERE Host='localhost';  
MySQL>GRANT ALL PRIVILEGES  

这样搞如果该服务器在外网,有可能不安全,因为%的意思是谁都都可以连接的意思,最好是指定IP地址能连接,如问题二所示。

碰到问题二:


处理方法有二个
1、(如何解决客户端与服务器端的连接(mysql) :xxx.xxx.xxx.xxx is not allowed to connect to this mysql serv
) 授权法。例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。

GRANT ALL PRIVILEGES ON *.* TO ‘myuser’@'%’ IDENTIFIED BY ‘mypassword’ WITH GRANT OPTION;
如果你想允许用户myuser从ip为192.168.1.3的主机连接到mysql服务器,并使用mypassword作为密码

GRANT ALL PRIVILEGES ON *.* TO ‘root’@’192.168.1.3′ IDENTIFIED BY ‘mypassword’ WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO ‘root’@’10.10.40.54′ IDENTIFIED BY ’123456′ WITH GRANT OPTION;

2、 改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称”%”
这个是因为权限的问题,处理方式如下:

shell>mysql --user=root -p
输入密码

mysql>use mysql
mysql>GRANT SELECT,INSERT,UPDATE,DELETE ON [db_name].* TO [username]@[ipadd] identified by '[password]';

[username]:远程登入的使用者代码
[db_name]:表示欲开放给使用者的数据库称
[password]:远程登入的使用者密码
[ipadd]:IP地址或者IP反查后的DNS Name,此例的内容需填入'60-248-32-13.HINET-IP.hinet.net' ,包函上引号(')

(其实就是在远端服务器上执行,地址填写本地主机的ip地址。)

也可以这样写

mysql -u root -pvmwaremysql>use mysql;mysql>update user set host = ‘%’ where user = ‘root’;mysql>select host, user from user;

分别来自:
http://database.51cto.com/art/201006/204016.htm
http://www.111cn.net/database/mysql/42040.htm
背景:Nginx直接连接redis,不用php的扩展连接,一定程序上提高了redis性能,但是在程序逻辑的可控制上会弱一点,用来做一些单纯的高并发登录没有问题,逻辑重点这种玩法并不能带来很大的提升。
需要下载第三方模块ngx_http_redis-0.3.2.tar.gz,并需要重新编译nginx。
注意要注释掉ngx_http_redis_module.c文件的145行
/*static ngx_str_t  ngx_http_redis_db  = ngx_string("redis_db");*/
否则会报错,意思是这个定义的redis_db在程序里没有使用,算是个警告报错,注释掉安装即可

./configure --user=nginx --group=nginx  --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/software/module/ngx_http_redis-0.3.2


配置
location / {
    set $redis_key $uri;

    redis_pass     name:6379;
    default_type   text/html;
    error_page     404 = /fallback;
  }

$redis_db
The number of redis database (required for < 0.3.2).
For ngx_http_redis >= 0.3.2 is not obligatory, default value is "0" if not defined.
这个$redis_db可以不配,默认是0database。
更多官方的资料请参考:http://wiki.nginx.org/HttpRedis2Module

更多参考之Keepalived+nginx+redis主从+tomcat一机多实例实现会话共享:
http://lovelace.blog.51cto.com/1028430/1550198
https://www.nginx.com/resources/wiki/modules/redis2/
背景:阿里云没备案会不让配置host访问的,被拦截,直接用ip访问呢?应该没啥吧。
   比如我服务器ip是192.168.1.1,两个域名为user.a.com,manage.a.com都映射到了该ip上。nginx里如何配置,当我用ip访问时默认打开user.a.com;而另一个域名manage.a.com又不影响呢?

这样就可以了

  

nginx.conf里写:
include vhosts/*.conf;

ls /usr/local/nginx/conf/vhosts/
10.70.37.2*.conf  default.conf
———————————————
10.70.37.2*.conf
server_name 10.70.37.24;//写成IP

default.conf
server_name 127.0.0.1;

来自:http://www.dewen.io/q/2760
背景:批量修改多台机器里的密码,怎么办,一台机器知道后,拷贝到另外机器上的办法,采用第三种较好。
1)新建用户:useradd -m 用户名 //-m是建一个home
2)设置密码:passwd 用户名
3)一般需要修改/etc/passwd 下面的bash
4)将用户加入sudo组。

总之,一个同样的Unix/Linux的密码,经过一次后,其生成的密码shadow是不一样的,实践如下所示可证明:

但是你批量替换时,完全可以选一个就成,如:


接近博文的正题了:
多台机器要批量加时,可用secureCRT,或大公司用zookeeper结合shell实现conf前端web系统进行海量机器的密码新增:

————————————————介绍修改用户密码三种方法————————————————
第一种:
echo "123456"|passwd --stdin root
优点:方便快捷
缺点:如果你输入的指令能被别人通过history或者其他方式捕获,那么这样的方式是很不安全的,更重要的是如果密码同时含有单引号和双引号,那么则无法通过这种方法修改。


第二种:
a.首先将用户名密码一起写入一个临时文件.
cat chpass.txt
root:123456
zhaohang:123456
b.使用如下命令对用户口令进行修改:
chpasswd<chpass.txt
c.可以使用 123456 来登录系统,密码修改完毕.
优点:可以很快速方便的修改多个用户密码
缺点:明文密码写在文件里仍然显得不够安全,但是避免了第一种修改方式不能有特殊字符串密码的情况.


第三种:
a.用 openssl passwd-1 来生成用户口令(这块有一台后,其它就不用再生成了,直接:chpasswd -e < chpass.txt),连同用户名一起写入文件.
cat chpass.txt
root:$1$ri2hceVU$WIf.firUBn97JKswK9ExO0
zhaohang:$1$i/Gou7.v$Bh2K6sXmxV6/UCxJz8N7b.
b.使用如下命令对用户口令进行修改:
chpasswd -e < chpass.txt
c.可以使用 123456 来登录系统,密码修改完毕.
优点:可以很快速方便的修改多个用户密码
缺点:和上面两种相比大大增强了安全性

附加介绍:
openssl passwd -1 命令可以输出shadow里面的密码,把这个命令生成的秘串更改为你shadow里的密码,那么下次你登录系统就可以用你的生成密码的口令来登录了,使用这个命令,即使口令一样,多次执行生成的密码串也不一样。那个hash值对应的密码是完全随机的基于64位字符编码的28位长,因此要破解它是非常困难的,只要不用那些密码已经公布出来的hash值创建账号,即使这些密码文件被公布也还是比较安全的。使用旧的unix哈希可以去掉 -1 参数。

[root@WEB01~]# openssl passwd -1
Password:123456
Verifying-Password:123456
$1$ri2hceVU$WIf.firUBn97JKswK9ExO0

也可以直接使用如下命令来直接生成:
[root@WEB01 ~]# openssl passwd -1 123456

来自:http://blog.chinaunix.net/uid-561779-id-166621.html
背景:由于数据库服务器安装在数据库机上,因此,在linux中只需安装mysql的客户端库就可以了。那么这个PHP下的mysql client要不要安装?再就是如果想在这台机器上连接mysql  server,客户端要不要安一个呢,当然要,且只安mysql的client客户端。
方法一:从编译好的包里释放安装:
一)有rpm包的情况:
MySQL-client-5.0.22-0.i386.rpm //mysql -uroot 这个client的一个包 标准MySQL客户程序。你可能总是需要安装这个包。
MySQL-devel-5.0.22-0.i386.rpm  //要想用c去连接这个mysql的lib库
(安装好以后,在 /usr/include/mysql/ 目录中存放有libmysqlclient的头文件mysql.h,在 /usr/lib/mysql/ 目录中存放有mysql的库文件,但只有.a结尾的(即静态库)库文件(包括libmysqlclient.a),没有.so(共享库)文件。)
键入以下命令安装:

#rpm -ivh MySQL-client-5.0.22-0.i386.rpm
#rpm -ivh MySQL-devel-5.0.22-0.i386.rpm

使用如下命令编译一个简单的测试程序(代码在本文结尾处给出):
#gcc -c -I/usr/include/mysql mysql-test.c
此命令成功生成了目标文件mysql-test.o。
继续键入以下命令。
#gcc -o --static mysql-test mysql-test.o -L/usr/lib/mysql -lmysqlclient

注意参数的顺序,gcc有时会因为某些参数顺序不对而报错,某些相关参数的具体顺序应该如何,还望高人指点。
以上命令确给出了数不清的“引用未定义符号”的错误信息,引用未定义符号的是libmysqlclient.a
带着希望折腾了许久,最后决定从源码包安装mysql客户端程序库。

卸载MySQL-client与MySQL-devel:
#rpm -e MySQL-client
#rpm -e MySQL-devel

二)yum 安装,其实是一样的,只是在网上安装,看来centos7上新的db数据库会向mariadb转的趋势啊:
[root@iZ25z0ugwgtZ logs]# yum search mysql|grep dev
mysql++-devel.x86_64 : MySQL++ developer files (headers, examples, etc.)
mariadb.x86_64 : A community developed branch of MySQL
mariadb-devel.i686 : Files for development of MariaDB/MySQL applications
mariadb-devel.x86_64 : Files for development of MariaDB/MySQL applications


方法二:从源码里通过参数只编译安装客户端:
[root@iZ25dcp92ckZ vhost]# ldconfig -v|grep mysql
/usr/lib64/mysql:  这个路径在哪儿配置的呢?在:vi /etc/ld.so.conf  自己加上想要找的动态链接库:/usr/local/inotify-tools-3.14/lib
        libmysqlclient.so.18 -> libmysqlclient.so.18.0.0
从源码包安装mysql客户端程序库。
#tar -zxvf mysql-5.0.22.tar.gz (mysql-5.0.22.tar.gz位于/root目录)
#cd mysql-5.0.22
进入mysql-5.0.22目录,阅读 INSTALL-SOURCES 文件,并看到几个关键选项:
1、--without-server
只编译安装客户端程序库,不编译mysql服务器程序,这在本机只需要libmysqlclient时很有用。

Mysql高版本用了boost和cmake(MySQL 5.5版本以后,使用CMake编译工具)参数是这样和./configure对应的,参见链接,http://www.linuxeye.com/Linux/MySQL-cmake-options.html,-DWITH_SERVER=0,总之,这个cmake有些参数不支持和configure还不太一样,这个DWITH_SERVER 是臆想出来的:


2、--enable-thread-safe-client
让libmysqlclient中的例程具有线程安全性,要编写多线程的mysql客户端程序时就少不了了,这要求本地拥有多线程库。
3、--prefix 指定安装目录
启动configure脚本:
#mkdir /usr/local/mysql
#./configure --without-server --enable-thread-safe-client --prefix=/usr/local/mysql
大概6分钟后,configure脚本生成好所有的Makefile后退出。
当前目录下执行make进行编译:
#make
这个过程除了时间长一点以外没有别的,大概一个钟头后make完成编译任务。
安装:
#make install
这个过程也比较快,约两三分钟。
安装完成以后,mysql.h文件在 /usr/local/mysql/include/mysql/目录中(这里include目录中还有一个mysql子目录)。
以lib开头的库文件在/usr/local/mysql/lib/mysql/目录中(与mysql.h的情况一样,这里lib目录中还有一个mysql子目录)。
此时再来链接测试程序的目标文件:
#gcc -o mysql-test mysql-test.o -L/usr/lib/mysql -lmysqlclient
OK,一切正常,链接成功。
执行一下:
#./mysql-test
系统这时又发出错误提示:Loading libmysqlclient.so.15 Error; No Such File!
将/usr/local/mysql/lib/mysql/目录中的libmysqlclient.so.15.0.0复制到/usr/lib/目录下:
#cp /usr/local/mysql/lib/mysql/libmysqlclient.so.15.0.0 /usr/lib/libmysqlclient.so.15
#./mysql-test
屏幕打印出:mysql_init() successed.后就不动了.
约莫90秒后打印libmysqlclient的提示信息:Can not connect to mysql server(110)
这时在windows xp的msdos控制台键入:
>netstat -na
看到了系统已经打开了3306端口,即mysql server确实在运行。
最后注意到xp中启用了系统防火墙, 禁用系统防火墙后回到linux的ppty键入:
#./mysql-test
这时,黎明的曙光终于出现了,提示信息告诉我,它已经连接上了XP中的mysql server。

以上主要参考:http://blog.chinaunix.net/uid-26466663-id-3358199.html

mysql中的两个包 libmysqlclient-devel和mysql-devel 有什么区别啊,为什么安装了mysql-devel就不能安装 libmysqlclient-devel了?
MySQL服务器。除非你只是想要与运行在其他机器上MySQL服务器连接,否则你将需要它。
背景:大前研一是我的偶像,其出书太多,看过《思考的技术》、《OFF学》、《专业主义》,最近好像又出一个《精益精神》,没买纸质的,网上抄了下读后心得体会,如下:
读《精益精神》心得体会
阅读全文
背景:刚解决前面的svn client版本太新问题http://jackxiang.com/post/8476/,又出现一新的问题,如下.

is not known to exist in the repository and is not part of the commit,yet its child:
  在把写好的代码提交到svn上面时,遇到了一个错误如下:
svn: Commit failed (details follow):
svn: 'D:\eclipse\StatusInquiry\src\com\cnjmwl\scm\policy' is not under version control and is not part of the commit, yet its child 'D:\eclipse\StatusInquiry\src\com\cnjmwl\scm\policy\policyActivity.java' is part of the commit
        仔细看错误的原文,翻译成中文大致的意思就是要提交的代码不在版本控制之下,并且不是提交的一部分,他的子文件也不是提交的一部分,我自个儿琢磨着就是要先提交父文件夹,然后再提交父文件夹的子文件,然后我先提交了父文件夹,然后提交其中的子文件,最后把问题解决了。。
        PS:如果上面的方法不行的话,试试看吧要提交的文件先备份一下,然后把源文件删除了,然后再拷回来,再提交。。我这样屡试不爽,能解决问题的。。      

摘自:http://blog.csdn.net/lufeng20/article/details/7641093
背景:一外包说是svn没权限,一截图根据里面的提示,感觉是svn client版本太新。

因为SVN客户端版本为1.8以上,太新,跟服务器端不匹配。请卸载,安装1.7版,并重启。
请在新的目录中重新checkout代码,原workspace目录请废弃,不要在其中再执行SVN操作。


来自:http://blog.sina.com.cn/s/blog_4c81e6230101e18a.html
背景:Nginx代理到tomcat时出现504 Gateway Time-out。

如果是设置IP直接proxy则设置在nginx的http{ 里面即可,不用设置在server里。

摘自:http://www.ha97.com/5194.html

超时有问题不光是超时,更有可能是被反向代理的出现了500的内部服务器错误:
背景:对于java和tomcat结合的程序,其实还是一个服务器,可能会有各种线程啥的如上传分片文件时会合并,这种对于PHP来讲是个问题,但是对于java来讲是能实现的边上传边合并的,也是非常好的,但是呢,这种办法如果写得不够好,很可能出现一些问题,假死、僵死,还不如用PHP写个上传,后台用那个守护进程进行合并来得更稳定。
阅读全文
背景:在一个Java分片上传时发现其CPU idle为98.5,以为值越高越危险,于是查了下,表明"System Idle Process" 中的 idle 是“空闲”得很。
sar -n DEV查看网卡网络流量:


cpu ide 是 cpu 的一个命令,cpu 见到这个命令,就停止工作一个指令。变相的可以降低功耗和休息一下。
对于系统来说,如果调度程序没有可以让 cpu 执行的任务,那么就自动发送 ide 命令让 cpu 休眠一个指令。
估计你的程度运行出现了冲突,导致大部分时间都在等待。

在CPU空闲的时候,发出一个IDLE命令,使CPU挂起(暂时停止工作),可有效的降低CPU内核的温度,在操作系统服务里面,都没有禁止它的选项;默认它是占用除了当前应用程序所分配的处理器(CPU)百分比之外的所有占用率;一旦应用程序发出请求,处理器会立刻响应的。在这个进程里出现的CPU占用数值并不是真正的占用而是体现的CPU的空闲率,也就说这个数值越大CPU的空闲率就越高,反之就是CPU的占用率越高。


当“System Idle Process”进程占用资源为2%时,说明机器目前只有2%的资源是空闲的,即机器可能感染了病毒或被其他程序占用了98%的资源。换句话说,“System Idle Process”进程占用资源占用资源越大则系统可用资源越多,其字面意思是“系统空闲进程”。


用sar进行CPU利用率的分析
[root@wh-appserver413 its]# sar -u 2 10
Linux 2.6.18-92.el5 (wh-appserver413)   01/29/2016

10:53:17 AM       CPU     %user     %nice   %system   %iowait    %steal     %idle
10:53:19 AM       all      0.06      0.00      1.00      0.00      0.00     98.94
10:53:21 AM       all      0.56      0.00      0.56      0.25      0.00     98.62
10:53:23 AM       all      0.00      0.00      0.06      0.62      0.00     99.31
10:53:25 AM       all      0.06      0.00      0.25      2.87      0.00     96.81      

我的个人博客:
Linux 4.4.0-1.el7.elrepo.x86_64 (iZ25dcp92ckZ)  2016年01月29日  _x86_64_        (1 CPU)
10时54分45秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
10时54分47秒     all      0.00      0.00      0.00      0.00      0.00    100.00
10时54分49秒     all      0.00      0.00      0.00      0.50      0.50     99.00
10时54分51秒     all      0.50      0.00      0.00      0.00      0.00     99.50
平均时间:     all      0.17      0.00      0.00      0.17      0.17     99.50

%idle:CPU空闲时间百分比。
        在所有的显示中,我们应主要注意%iowait和%idle,%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

参考:http://blog.itpub.net/8554499/viewspace-580300/
背景:作为swoole顾问,当然需要对新版本发布作下相关的描述,一直想rango推rpc,此次暂搁置了,底层实现对RPC性能提升没有多大意义,swoole应该专注php的弱点,而不是把所有的东西都封装到底层,成为大杂会。觉得能用PHP实现的不再实现,定位上只是对PHP功能的增强。总之,1.8.0 是一个里程碑的版本。

最好要在PHP版本V5.4以上运行,对各种DB和缓存及服务器客户端的异步支持以高效利用IO:
增加原生异步 MySQL 客户端
增加原生异步 Redis 客户端,基于 Redis 官方提供的 hiredis 库
增加原生异步 Http 客户端
增加原生异步 WebSocket 客户端支持
——————————————————————————————————————————
....各种优化及bug修改相关特性融入内核....
重构底层 swClient,异步 TCP 客户端实现放到 swoole 内核中
增加 swoole_client->reuse 属性,SWOOLE_KEEP 长连接模式下标识是否为复用的连接
修改Bug:重构定时器,修复after、tick定时器偶然出现的core dump的问题
新加特性:异步Redis客户端
预告一下:1.8.1 版本,即将增加 命名空间的类别名
计划搁置:RPC暂时没有开发计划,因为这个东西PHP代码就能实现,没必要底层去支持。
——————————————————————————————————————————
Swoole-1.8.0版本增加了对异步Redis客户端的支持,基于redis官方提供的hiredis库实现。Swoole提供了__call魔术方法,来映射绝大部分Redis指令。

编译安装hiredis

使用Redis客户端,需要安装hiredis库。下载hiredis源码后,执行

make -j
sudo make install
sudo ldconfig
hiredis下载地址:https://github.com/redis/hiredis/releases
启用异步Redis客户端

编译swoole是,在configure指令中加入--enable-async-redis

./configure --enable-async-redis
make clean
make -j
sudo make install

来自:http://wiki.swoole.com/wiki/page/521.html
更多:http://www.oschina.net/news/70266/swoole-1-8-0
背景:阿里上买了一小vps,空间本来就小,居然发现一个大文件,442M    /var/log/cron,于是想把它干掉,以减少占用的磁盘空间。
我的vps是一个文件:
echo "" >  /var/log/cron
du -sh /var/log/cron
而有的那个机器是一个目录,目录怎么办,一样删除,如下:
最近刚好有一个小任务 - 由于产品产生的Log很多,而且增长很快,所以需要用脚本(Bash scripts)删除过期的Log文件 。

使用Linux下的Cron Job可以很好的解决这个问题。

   什么是Cron Job?
   建立Cron Job需要用到命令crontab,维基百科定义: crontab 命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令 。
查阅了一些资料(发现技术查询还是要用Google)参考后,期间也遇到很多问题,通过摸索和学习,实现步骤如下:

一. 写一个Bash shell script,作用: 检索日志文件夹下的所有log文件,查询每个文件的日期,如果日期过期,则删除这个log文件   


二. 新建一个Cron Job,周期性的执行上面的脚本
命令:


注意:
1. 这里我用的是 sudo crontab -e ,不是crontab -e,这样做是使用root的crontab,可以使用sudo,获取root某些权限。
2. Cron Job的格式如下:


具体可参见http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/,Cron Job的用法讲解很详细。

3. 如何通过日志查看Cron Job的执行情况?

" >> /home/user/cron_job.log 2>&1 "的作用是可以方便的将Cron Job执行情况的日志记录到自己指定的Log文件中,方便查看Job执行情况。另外还可通过下面这个命令,查看Job执行的一些其他信息,感觉主要还是看自己指定的日志文件,如果执行出错,如Permisson Denied错误,在里面记录的很清楚。


三. 小结

经过以上的步骤,就可以很轻松的在Linux中建立起一个Cron Job,用于周期性的做某些事情,如删Log等。

四. 赔偿是参考资料和摘自:
原文  http://www.cnblogs.com/KevinSong/p/3816981.html
分页: 20/248 第一页 上页 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 下页 最后页 [ 显示模式: 摘要 | 列表 ]