背景:在Raspberry Pi上装了一个FreeBSD,之前是linux,用ssh连接时出现问题,这个ssh其实linux上也是一样的,于是按linux上的办法解决了该问题,重启动sshd后,用我的手机重新ssh到Raspberry pi上,提示error消失,连接正常。
root@rpi2:/usr/local # Feb 18 03:50:39 rpi2 sshd[4917]: error: Could not load host key: /etc/ssh/ssh_host_dsa_key
魅族手机ssh访问:
Feb 18 03:50:41 rpi2 sshd[4917]: error: PAM: authentication error for root from meizu-mx4-pro.lan

Could not load host key: /etc/ssh/ssh_host_dsa_key,那就生成这个key:
root@rpi2:/usr/local # ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
The key fingerprint is:
SHA256:0gV9unsS+HmqgE0j45aqtNQVhVsYNUiX2pgBbbmBLbM root@rpi2
The key's randomart image is:
+---[DSA 1024]----+
|   .*oB=o.       |
|   + @oo... .    |
|    =.@   .o     |
|   E *.o ..      |
|    o.+ S. .     |
|  ...B o. o      |
| o .= o  . +     |
|o .o   .  = o    |
|.o.     ...=     |
+----[SHA256]-----+

重新启动ssh服务:
root@rpi2:/usr/local # /etc/rc.d/sshd restart
Performing sanity check on sshd configuration.
Could not load host key: /etc/ssh/ssh_host_dsa_key
Stopping sshd.
Waiting for PIDS: 799.
Performing sanity check on sshd configuration.
Could not load host key: /etc/ssh/ssh_host_dsa_key
Starting sshd.



参考自:http://blog.163.com/zhengjiu_520/blog/static/3559830620118851822482/
配置FreeBSD下的Wifi主要参考这两篇文章即可,树莓派下的也大体一样一样的没有什么大的区别:
http://www.111cn.net/sys/freebsd/59534.htm
国外有一个文章在后面有写。
总之,按这样来配置连接上了家里的路由器。

Raspberry Pi Model B+ Run FreeBSD11+Apache+PHP+MySQL+Webmin+Wordpress:
http://www.bigsea.com.cn/archives/1393/

ifconfig -a时没有wlan0,是因为没有配置及没有启动服务:service netif start
root@rpi2:~ # ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 3c:46:d8:8e:7d:dc
        inet6 fe80::3e46:d8ff:fe8e:7ddc%wlan0 prefixlen 64 tentative scopeid 0x3
        groups: wlan
        ssid HiWiFi_256ECA channel 4 (2427 MHz 11g) bssid d4:ee:07:25:6e:ca
        country US authmode WPA2/802.11i privacy ON deftxkey UNDEF
        AES-CCM 2:128-bit txpower 0 bmiss 7 scanvalid 60 bgscan
        bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
        wme roaming MANUAL
        media: IEEE 802.11 Wireless Ethernet DS/1Mbps mode 11g
        status: associated
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

其中“status: associated”表示无线网络已经连接,可以上网冲浪了。
固定你的 resolv.conf
如果你用DHCP,有一个问题可能会不断地搔扰你,就是/etc/resolv.conf里所记录的 DNS 会时不时地被修改。当然除了暴力地
代码如下  复制代码
#chflags schg /etc/resolv.conf

让它不能被修改外,还可以很简单地解决此问题,就是往/etc/dhclient.conf里添加
代码如下  复制代码

prepend domain-name-servers 8.8.8.8, 8.8.4.4;
# See ``man 5 dhclient.conf'' for details.
修改成自己的:
prepend domain-name-servers 114.114.114.114, 123.125.81.6;
# See ``man 5 dhclient.conf'' for details.
详细配置WIFI可查看FreeBSD官方文档。

=========================================================================
USB硬件信息:
root@rpi2:~ # dmesg | grep urtwn0
urtwn0: <Realtek 802.11n NIC, class 0/0, rev 2.00/0.00, addr 4> on usbus0
urtwn0: MAC/BB RTL8188EU, RF 6052 1T1R
urtwn0: at uhub1, port 3, addr 4 (disconnected)
urtwn0: <Realtek 802.11n NIC, class 0/0, rev 2.00/0.00, addr 4> on usbus0
urtwn0: MAC/BB RTL8188EU, RF 6052 1T1R

root@rpi2:~ # cat /var/log/messages | grep urtwn0
Feb 17 11:19:16 rpi2 kernel: urtwn0: <Realtek 802.11n NIC, class 0/0, rev 2.00/0.00, addr 4> on usbus0
Feb 17 11:19:16 rpi2 kernel: urtwn0: MAC/BB RTL8188EU, RF 6052 1T1R
Feb 17 11:39:37 rpi2 kernel: urtwn0: <Realtek 802.11n NIC, class 0/0, rev 2.00/0.00, addr 4> on usbus0
Feb 17 11:39:37 rpi2 kernel: urtwn0: MAC/BB RTL8188EU, RF 6052 1T1R
Feb 17 14:15:35 rpi2 kernel: urtwn0: at uhub1, port 3, addr 4 (disconnected)
Feb 17 14:20:14 rpi2 kernel: urtwn0: <Realtek 802.11n NIC, class 0/0, rev 2.00/0.00, addr 4> on usbus0
Feb 17 14:20:14 rpi2 kernel: urtwn0: MAC/BB RTL8188EU, RF 6052 1T1R

启动时信息提示:
root@rpi2:~ # ifconfig wlan create wlandev urtwn0
ieee80211_load_module: load the wlan_amrr module by hand for now.
wlan0: Ethernet address: 3c:46:d8:8e:7d:dc
wlan0


拔下无线Wifi的USB时提示:
root@rpi2:~ # ugen0.4: <Realtek> at usbus0 (disconnected)
urtwn0: at uhub1, port 3, addr 4 (disconnected)


查看网络:
root@rpi2:~ # ifconfig wlan0 up scan
wlan0: ieee80211_new_state_locked: pending INIT -> SCAN transition lost
SSID/MESH ID    BSSID              CHAN RATE    S:N     INT CAPS
123456          b8:55:10:1a:9d:05    6   54M  -77:-95   100 EP   RSN HTCAP WME
ChinaNet-iYDT   fc:e3:3c:54:b8:ec   11   54M  -93:-95    98 EP   HTCAP WPS WPA WME
CALT            40:16:9f:55:33:2c    7   54M  -90:-95   100 EPS  RSN WPA WME HTCAP ATH WPS
ChinaNet-Kjvz   60:b6:17:79:14:b7    2   54M  -89:-95   100 EP   HTCAP WPA WME
CU_VGSU         88:cf:98:dd:fa:18    3   54M  -91:-95   100 EP   HTCAP RSN WME
HiWiFi_256ECA   d4:ee:07:25:6e:ca    4   54M  -69:-95   100 EP   HTCAP WPA RSN WME
jiaweiyi        8c:be:be:2f:ae:5b    8   54M  -93:-95   100 EP   RSN HTCAP WPS WPA WME
ChinaNet-qePR   60:b6:17:78:89:3e   10   54M  -79:-95   100 EP   HTCAP WPA WME


service netif start     # 这个能自动帮你连接无线获取IP地址,当然如果配置正确的话,开机就可以自动连接上无线了。

实践来源:http://jackxiang.com/post/7492/



—————————————————————————————————————————————————————————————
Setting up USB WiFi under FreeBSD is not a very hard task.
We can use official handbook.
But in my opinion it’s too complex.
Here is a simple guide how to configure USB WiFi.
Our goal is to configure WiFi interface to connect and use available wireless network.
I use Miniature WiFi Module from Adafruit.
This is in reality Realtek RTL8188CUS.
elinux.org says this is a problem adapter.
And I had some problems with it under Raspbian.
There was no driver for this adapter in FreeBSD-10.0-RELEASE.
Driver for this adapter appears in stable images in March.
This is good for us, so we don’t need to adding it into kernel.
During boot we can see our adapter:
点击在新窗口中浏览此图片
After boot we can see it in interfaces list:
点击在新窗口中浏览此图片
If we try to up this interface we will see some warning and error messages:
urtwn-rtl8192cfwT: You need to read the LICENSE file in /usr/share/doc/legal/realtek/.
urtwn-rtl8192cfwT: If you agree with the license, set legal.realtek.license_ack=1 in /boot/loader.conf.
module_register_init: MOD_LOAD (urtwn-rtl8192cfwT_fw, 0xc2aa24f0, 0) error 1
urtwn-rtl8192cfwT: could not load firmware image, error 8
urtwn0: failed loadfirmware of file urtwn-rtl8192cfwT
点击在新窗口中浏览此图片
We need to add this two strings to file /boot/loader.conf:
legal.realtek.license_ack=1
if_urtwn_load="YES"
点击在新窗口中浏览此图片
After reboot we can continue.
Next step is creating wlan interface:
ifconfig wlan0 create wlandev urtwn0
Then we can to up this wlan interface and scan available wireless networks:
ifconfig wlan0 up scan
点击在新窗口中浏览此图片
For permanent use WiFi connection we need to add this two strings to file /etc/rc.conf:
wlans_urtwn0="wlan0"
ifconfig_wlan0="WPA DHCP"
点击在新窗口中浏览此图片
And we need to configure authentication in file /etc/wpa_supplicant.conf
点击在新窗口中浏览此图片
After reboot we can check network connection:
点击在新窗口中浏览此图片
It works!


option+command+I,后调出:Command+Shift+P:Capture full size screenshot
http://www.renniaofei.com/fenxiang/chrome-capture-screen.html
https://jingyan.baidu.com/article/1974b289342468f4b1f77428.html



Capture full size screenshot:实践证明是截取长图,整个网页。
5款好用的Chrome截图扩展推荐用GoFullPage,可以整个页面截图,比上面这个操作更方便,不需要登录,还能直接将图转成PDF
再就是一个DIV里面的滚动条是无法截取到滚动条下面的,即使用了截取整个页面。尤其是没有地址栏的页面怎么办?用option+command+I,找到DIV的部分后存到Dreamwaver里面后再用GoFullPage就能存为PDF的整张图片了,成功实现截图。
Nimbus Capture,GoFullPage,Fireshot,Awesome Screenshot,Eagle。


背景:近来国家防火墙对chrome的封锁,直接在chrome的扩展里下截图插件不行了,想找个这样的都不行,特别是整个网页截图,要是一般的QQ截图都成,Chrome扩展好像要重启一下chrome浏览器才能用,伴随这个chrome升级有些截图插件也用不了,最后用了遨游浏览器自带的网页面存为图片解决了该问题:-)。

     捕捉网页截图 - FireShot,它还能保存为PDF,相当好使哟~
     在Chrome中安装了网页截图插件以后,当用户打开任何一个网页的时候都可以通过Chrome右上角的网页截图插件按钮来启动截图功能,当点击按钮以后该插件会提示用户选择部分截图还是网页截图,进而完成自己的网页截图操作。总得来说截图功能可以分下面几个步骤完成:
1.点击截图插件按钮来选择是部分截图还是全屏截图。
2.选取需要截图的范围(全屏截图不需要)。
3.对截取成功的图片进行编辑操作,其中支持文字、箭头、注释等操作、
4.保存相应的图片到本地计算机中(也可以把截取的图片通过截图插件进行分享)。
网页截图(Webpage Screenshot)不仅提供了简单的网页截图功能,用户同样可以在截图的过程中就对图片进一步处理,比如编辑文字、画上箭头标识、写上图片的备注信息等。
Chrome截图插件
在使用截图插件进行全屏截图的时候,用户只需要选择全屏截图即可快速地把当前网页的所有画面都保存成图片(包括不可见部分),在截图完成以后,用户同样可以使用其中的文字和图画对截图进一步地修改。
截图插件
使用Webpage Screenshot截图以后,用户可以使用波浪形、文字、马赛克、矩形、圆形、箭头、再此截图对该图片进行编辑,在截图完成以后用户可以快速地通过社交网站进行分享和保存。
Chrome截图打印
通过网页截图插件不仅可以对当前截图下来的图片进行保存和分享操作,用户还可以对当前截图的页面直接调用快速打印的功能,用户可以现在直接打印部分网页的截图信息和用户对图片的相关注释。
如果您对Chrome浏览器的截图功能非常感兴趣,这里可以为您推荐另一款好用的Chrome截图插件:Chrome快速打印和截图插件:Save the trees (print & screenshot)。
点击转到网页截图 - Webpage Screenshot下载页面:
http://chromecj.com/blogging/2014-08/30/download.html

来自:http://chromecj.com/blogging/2014-08/30.html
背景:FiddlerHook这个小工具的插件在Firefox下配置后很方便,近来升级Firefox居然给禁用了,提示扩展未被验证而被禁用,要配置这个fiddler还得去Firefox的工具->选项->网络->连接->配置 Firefox 如何连接至国际互联网里的手工配置代码->127.0.0.1 8888,是不是太麻烦了,有这个fiddler2提供的Firefox插件多方便:use fidder automatic。

在 扩展 页面 点击右上角的 齿轮 状 的按钮,选择 “检查更新”,将扩展更新到最新版,
如果扩展已是最新版,请向该发布该扩展的公司反馈,请该公司尽快将扩展上传至 火狐的扩展中心,进行签名。

已经和以上公司反馈过,但一直没有提交扩展签名
目前绕过签名校验的方法:about:config 中 xpinstall.signatures.required 设置为false。
背景:今天在swoole群里贴了一个nodejs和swoole的形象区别,于是出现了两派互相不服的文字争论,nodejs高大上的部署方式-PM2和swoole自带的一个辩论。

下面3点摘自:http://blog.csdn.net/leftfist/article/details/41891407
1)CPU密集型任务存在短板
如上所述,nodejs的机制是单线程,这个线程里面,有一个事件循环机制,处理所有的请求。如图所示。在事件处理过程中,它会智能地将一些涉及到IO、网络通信等耗时比较长的操作,交由worker threads去执行,执行完了再回调,这就是所谓的异步IO非阻塞吧。但是,那些非IO操作,只用CPU计算的操作,它就自己扛了,比如算什么斐波那契数列之类。它是单线程,这些自己扛的任务要一个接着一个地完成,前面那个没完成,后面的只能干等。因此,对CPU要求比较高的CPU密集型任务多的话,就有可能会造成号称高性能,适合高并发的node.js服务器反应缓慢。结论是:NodeJS适合运用在高并发、I/O密集、少量业务逻辑的场景。

2)无法利用CPU的多核
最开始,线程只是用于分配单个处理器处理时间的一种机制。但假如操作系统本身支持多个CPU/内核,那么每个线程都可以得到一个不同自己的CPU/内核,实现真正的“并行运算”。在这种情况下,多线程程序可以提高资源使用效率。Node.js是单线程程序,它只有一个event loop,也只占用一个CPU/内核。现在大部分服务器都是多CPU或多核的,当Node.js程序的event loop被CPU密集型的任务占用,导致有其它任务被阻塞时,却还有CPU/内核处于闲置的状态,造成资源的浪费。

解决方案
利用原生模块或第三方模块,开辟进程或子进程,用于处理这些特殊的任务。
3)如果有异常抛出,因为是单线程,整个项目将不可用。但这归根到底是代码的问题,糟糕的代码,不管什么体系,都会有问题,即使不崩溃。解决办法是用pm2等工具来运行?

说到密集型计算:其实PHP也好不到哪儿去,这块还得c和c++,解释性的语言对于密集型计算都好不到哪去,这块即使是nginx也可能出现事件队列出现阻塞的情况,(见:http://jackxiang.com/post/8433/):
       nodejs的机制是单线程,这个线程里面,有一个事件循环机制,处理所有的请求。如图所示。在事件处理过程中,它会智能地将一些涉及到IO、网络通信等耗时比较长的操作,交由worker threads去执行,执行完了再回调,这就是所谓的异步IO非阻塞吧。但是,那些非IO操作,只用CPU计算的操作,它就自己扛了,比如算什么斐波那契数列之类。它是单线程,这些自己扛的任务要一个接着一个地完成,前面那个没完成,后面的只能干等。因此,对CPU要求比较高的CPU密集型任务多的话,就有可能会造成号称高性能,适合高并发的node.js服务器反应缓慢。
=======================================================================================
附录,对话记录,QQ及Email均*替代,保留昵称:
回忆未来-向东-Jàck(********7693) 15:48:05
作为顾问,必须把这个swoole形象化,
swoole解决了nodejs的这样一个问题:
点击在新窗口中浏览此图片
无聊咔咔(*******) 15:51:47
用swoole就不用部署啊阅读全文
背景:像webserver啥的开机启动其他程序的shell脚本,链接:https://jackxiang.com/post/7433/ 里写到:  /etc/rc.d/rc.local ,而后做了软连接,/etc/rc.local -> rc.d/rc.local,而这样久后,就以为写在/etc/rc.local就成了,导致开机还真没启动,得注意这个问题。
方法一:
直接建立新文件之后,建立软链接,source文件一定得放在/etc/rc.d里面。
1)vi /etc/rc.d/rc.local
2)ln  软链接,ln [options] source dist, cd /etc ;ln -s  rc.d/rc.local  /etc/rc.local    ==>形成: /etc/rc.local -> rc.d/rc.local  


方法二:
更标准一些,根据开机启动级别是3进行配置(/etc/rc.d/rc3.d 里面去指向/etc/rc.local也行,总之得有一个在/etc/rc.local里自启动才行)
操作如下:

引用:
到后来,有几台服务器突然被重启了,这时候领导问,怎么开机启动的脚本没起作用,还被批了一顿,哎,做事虎头蛇尾,活该!
然后去查,一直没查到原因,
手动执行都是正确的,在排除了权限原因和脚本问题后,很郁闷,怎么放到开机启动项目中就无法执行了呢。
于是去查linux开机启动过程信息。google下,看了下关于一些开机启动启的资料,发现了开机启动程序的级别为3.
果断顺藤莫瓜,找到了这个目录 /etc/rc.d/rc3.d,进去一看恍然大悟。

我的rc.local文件是在 /etc/rc.local中(网上都是说写在这里,我是按照网上来弄的),
而我查看了系统指向rc.local文件的路径是 /etc/rc.d/rc.local,
后来把开机启动的脚本配置到/etc/rc.d/rc.local中(或者把S99local指向 /etc/rc.local也行),重启检查,成功!

总结:主要还是对linux系统不熟悉,这是个漫长的过程,有时间得多看看这方面的书籍。

法二来自:http://www.cnblogs.com/montya/archive/2011/09/09/2172001.html



linux下rc.local中的服务开启失败分析:
linux下可以在rc.local中设置开机启动任务。开机时,系统会根据 /etc/inittab中设置的运行级别,开启/etc/rc.d下相应的服务。如多用户启模式为3,则系统会开启/etc/rc.d/rc3.d/下的服务。

/etc/rc.d/rc3.d/的目录列表:

20140323164552

其中K表示需关闭的服务,S表示开启服务,后面的数据表示关闭或开启的顺序。/etc/rc.d/rc3.d/下的服务一般通过软连接,指向到/etc/init.d中。


S99local一般会通过软链接指到/etc/rc.d/rc.local

ls -al /etc/rc.d/rc3.d/S99local
lrwxrwxrwx. 1 root root 11 Dec 17 2012 /etc/rc.d/rc3.d/S99local ->../rc.local
ls -al /etc/rc.local
lrwxrwxrwx. 1 root root 13 Dec 17 2012 /etc/rc.local -> rc.d/rc.local
ls -al /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 149 Mar 21 13:17 /etc/rc.d/rc.local

如果在rc.local中添加了服务,但开机时未能所开启。则可以通过方排查:
1. 根据运行级别查看rc.local文件链接指是否正确。
2. rc.local文件有没执行限制,导致执行失败,给 chmod +x 给 rc.local添加执行权限。
3. 查看/var/log/boot.log有没报错信息,是不是执行出错了, rc.local中的服务要写 sheel命令的绝对路径, 如Erlang服务,不能直接写 erl,需添加绝对路径/usr/local/bin/erl。
4. 因为rc.local是等待 /etc/init.d的服务都开启后才执行的,所以如果/etc/init.d中的服务未开启完成,rc.local是不会执行的。如启动了firstboot服务,将会导致多用户模式下rc.local不能执行, 可通过 chkconfig –del 把 firstboot服务去除。服务开启时都会写启动日志,可通过/var/log/boot.log查看服务启动与否,再结合/etc/rc.d/rcx.d/下服务启动顺序排查哪些服务阻塞了。可结合 ps awux | grep ServerName 一起排查。

From:http://www.kongqingquan.com/archives/152
问题如下:
2016/02/16 16:29:05 [error] 11925#0: *50 recv() failed (104: Connection reset by peer) while reading response header from upstream

解决办法:
Nginx出现502 Bad Gateway 错误,
查了Nginx的错误日志为:
2014/08/02 16:14:31 [error] 17029#0: *17941 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 210.61.12.2, server: blog.lixiphp.com, request: “POST /api/1.0 HTTP/1.1″, upstream: “fastcgi://127.0.0.1:9000″, host: “blog.lixiphp.com”2014/08/02 16:24:52 [error] 29615#0: *3 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 58.220.197.35, server: blog.lixiphp.com, request: “GET /404 HTTP/1.1″, upstream: “fastcgi://127.0.0.1:9000″, host: “blog.lixiphp.com”
不要使用php-fpm的request_terminate_timeout,最好设成request_terminate_timeout=0;
vi /etc/php-fpm.d/www.conf
修改为:
; The timeout for serving a single request after which the worker process will
; be killed. This option should be used when the ‘max_execution_time’ ini option
; does not stop script execution for some reason. A value of ’0′ means ‘off’.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
request_terminate_timeout = 0
因为这个参数会直接杀掉php进程,然后重启php进程,这样前端nginx就会返回104: Connection reset by peer。这个过程是很慢,总体感觉就是网站很卡。
重启 php-fpm 和 Nginx 一切正常。
service nginx restart
killall php-fpm
php-fpm
再打开就OK了。

来自:http://www.th7.cn/Program/php/201408/254237.shtml
背景:自从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
背景:有时候需要比对一下文件,再就是如何快速的跳转到下一个不同,及从一个文件拷贝不同到另一个文件,这些在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/
分页: 43/272 第一页 上页 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 下页 最后页 [ 显示模式: 摘要 | 列表 ]