背景:调一个多进程程序,发现中间挂了,可我自己写的代码的父亲进程又拉起来了,无法调试到挂的原因,在当前目录下找不到coredump文件怎么办?修改Linux操作系统生成core dump文件的默认路径?最后,子进程死了父亲进程拉起,crack这块可能是return退出了,自己打印是crack,导致并不是真正的crack了,也就不是coredump了,特别注意这个问题。

gdb --core=core.9128
(gdb) file ./a.out

巡视:再看看默认的一些参数,注意core file size是个0,程序出错时不会产生core文件了, 如下:
[root@test log]# ulimit -a
core file size          (blocks, -c) 0
实践:没有找到core文件,我们改改ulimit的设置,让它产生。1024是随便取的,要是core文件大于1024个块,就产生不出来了。
$ ulimit -c 1024

$ ulimit -a
core file size (blocks, -c) 1024
ulimit -S -c unlimited > /dev/null 2>&1

[root@test multepoolserver]# ulimit -c 1024
[root@test multepoolserver]# ulimit -a
core file size          (blocks, -c) 1024
修改路径:
/sbin/sysctl -w kernel.core_pattern=/var/log/%e.core.%p
kernel.core_pattern = /var/log/%e.core.%p

————————————————————————————————————————————————————————————————
经过分析发现系统默认的core文件生成路径是/var/logs,但/var/logs目录并非系统自带的,系统初始安装默认自带的是/var/log,最终导致该系统出现core dump后并没能生成core文件,因此如何查询和修改系统默认的core dump文件生产路径呢?方法如下:
一. 查询core dump文件路径:
方法1:
# cat /proc/sys/kernel/core_pattern

方法2:
# /sbin/sysctl kernel.core_pattern

二. 修改core dump文件路径:
方法1:
临时修改:修改/proc/sys/kernel/core_pattern文件,但/proc目录本身是动态加载的,每次系统重启都会重新加载,因此这种方法只能作为临时修改。
/proc/sys/kernel/core_pattern
例:echo ‘/var/log/%e.core.%p’ > /proc/sys/kernel/core_pattern

方法2:
永久修改:使用sysctl -w name=value命令。
例:/sbin/sysctl -w kernel.core_pattern=/var/log/%e.core.%p为了更详尽的记录core dump当时的系统状态,可通过以下参数来丰富core文件的命名:
%% 单个%字符
摘自:http://m.blog.csdn.net/blog/bytxl/9786347
http://www.nginx.cn/1521.html



Linux CentOs6.2下下如何生成core dump文件及用GDB调试方法及设置
http://baidutech.blog.51cto.com/4114344/904419

在软件开发的过程中,无论如何努力,bug几乎都是必不可少的。当某些bug发生时,该进程会产生coredump文件。通过这个coredump文件,开发人员可以找到bug的原因。但是coredump的产生,大都是因为程序crash了。
1. 死锁
   有些bug是不会导致进程crash的,比如死锁——这时,程序已经不正常了,可是却没有coredump产生。如果环境又不允许gdb调试,难道我们就束手无策了吗?针对这种情况,一般情况下,对于这样的进程,可以利用watchdog监控它们,当发现这些进程很长时间没有更新其heartbeat时,可以给这些进程发送可以导致其产生coredump的信号。根据linux的信号默认的处理行为,SIGQUIT,SIGABRT, SIGFPE和SIGSEGV都可以让该进程产生coredump文件。这样我们可以通过coredump来得知死锁是否发生。当然,如果进程添加了这些信号的处理函数,那么就不会产生coredump了。
2.获取指定位置快照:
   还有一种情况,进程并没有死锁或者block在某个位置,但是我们需要在某个指定位置进行调试,获取某些变量或者其它信息。但是,有可能是客户环境或者生产环境,不允许我们进行长时间的检测。那么,我们就需要通过coredump来获得进程在运行到该点时的快照。
这个时候,可以利用gdb来产生手工产生coredump。在attach上这个进程时,在指定位置打上断点,当断点触发时,使用gdb的命令gcore,可以立即产生一个coredump。这样,我们就拿到了这个位置的进程快照。1. 欲查看多线程程序中所有线程的调用栈信息====================================
     gdb attach xxx
     set height 0
      thread apply all bt
      detach
      q
2. CPU占用率过高问题分析方法
====================================
shell下执行:ps -eLfP 找出cpu占用率高的线程
UID        PID  PPID   LWP PSR  C NLWP STIME TTY          TIME
root      1431  1270  1751   5 90   64 Dec24 ?        00:00:00
                      ^^^^  ^^ ^^
                    thread core cpurate
使用gdb:
gdb attach 1431        <==== 登录cpu占用率高的进程
set height 0
i thread               <==== 打印该进程的所有线程
找到 : LWP 1751 线程
17 Thread 855356656 (LWP 1751)  0x2ac30994 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
^^                   ^^^^^^^^
打出cpu占用率高的 任务的调用栈:
thread 17   <============  切换到该线�

Linux生成core文件、core文件路径设置:
——————————————————————————————————————————————————————————————
在Linux下产生并调试core文件 先看看我用的是个什么机器:

$ uname -a
Linux dev 2.4.21-9.30AXsmp #1 SMP Wed May 26 23:37:09 EDT 2004 i686 i686 i386 GNU/Linux

再看看默认的一些参数,注意core file size是个0,程序出错时不会产生core文件了。


$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) 4
max memory size (kbytes, -m) unlimited
open files (-n) 2048
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 7168
virtual memory (kbytes, -v) unlimited

写个简单的程序,看看core文件是不是会被产生。

$ more foo.c

#include <stdio.h>

static void sub(void);

int main(void)
{
sub();
return 0;
}

static void sub(void)
{
int *p = NULL;

/* derefernce a null pointer, expect core dump. */
printf("%d", *p);
}

$ gcc -Wall -g foo.c
$ ./a.out
Segmentation fault

$ ls -l core.*
ls: core.*: No such file or directory

没有找到core文件,我们改改ulimit的设置,让它产生。1024是随便取的,要是core文件大于1024个块,就产生不出来了。

$ ulimit -c 1024

$ ulimit -a
core file size (blocks, -c) 1024
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) 4
max memory size (kbytes, -m) unlimited
open files (-n) 2048
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 7168
virtual memory (kbytes, -v) unlimited

$ ./a.out
Segmentation fault (core dumped)
$ ls -l core.*
-rw------- 1 uniware uniware 53248 Jun 30 17:10 core.9128

注意看上述的输出信息,多了个(core dumped)。确实产生了一个core文件,9128是该进程的PID。我们用GDB来看看这个core。

$ gdb --core=core.9128
GNU gdb Asianux (6.0post-0.20040223.17.1AX)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-asianux-linux-gnu".
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0 0x08048373 in ?? ()
(gdb) bt
#0 0x08048373 in ?? ()
#1 0xbfffd8f8 in ?? ()
#2 0x0804839e in ?? ()
#3 0xb74cc6b3 in ?? ()
#4 0x00000000 in ?? ()

此时用bt看不到backtrace,也就是调用堆栈,原来GDB还不知道符号信息在哪里。我们告诉它一下:

(gdb) file ./a.out
Reading symbols from ./a.out...done.
Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) bt
#0 0x08048373 in sub () at foo.c:17
#1 0x08048359 in main () at foo.c:8

此时backtrace出来了。

(gdb) l
8 sub();
9 return 0;
10 }
11
12 static void sub(void)
13 {
14 int *p = NULL;
15
16 /* derefernce a null pointer, expect core dump. */
17 printf("%d", *p);
(gdb)

在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。

1.core文件的生成开关和大小限制
---------------------------------
1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。
2)使用ulimit -c filesize命令,可以限制core文件的大小(filesize的单位为kbyte)。若ulimit -c unlimited,则表示core文件的大小不受限制。如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的core文件。在调试此core文件的时候,gdb会提示错误。

2.core文件的名称和生成路径
----------------------------
core文件生成路径:
输入可执行文件运行命令的同一路径下。
若系统生成的core文件不带其他任何扩展名称,则全部命名为core。新的core文件生成将覆盖原来的core文件。

1)/proc/sys/kernel/core_uses_pid可以控制core文件的文件名中是否添加pid作为扩展。文件内容为1,表示添加pid作为扩展名,生成的core文件格式为core.xxxx;为0则表示生成的core文件同一命名为core。
可通过以下命令修改此文件:
echo "1" > /proc/sys/kernel/core_uses_pid

2)proc/sys/kernel/core_pattern可以控制core文件保存位置和文件名格式。
可通过以下命令修改此文件:
echo "/corefile/core-%e-%p-%t" > core_pattern,可以将core文件统一生成到/corefile目录下,产生的文件名为core-命令名-pid-时间戳
以下是参数列表:
%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加当前uid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加命令名

3.core文件的查看
-----------------
core文件需要使用gdb来查看。
gdb ./a.out
core-file core.xxxx
使用bt命令即可看到程序出错的地方。
以下两种命令方式具有相同的效果,但是在有些环境下不生效,所以推荐使用上面的命令。
1)gdb -core=core.xxxx
file ./a.out
bt
2)gdb -c core.xxxx
file ./a.out
bt

4.开发板上使用core文件调试
-----------------------------
如果开发板的操作系统也是linux,core调试方法依然适用。如果开发板上不支持gdb,可将开发板的环境(依赖库)、可执行文件和core文件拷贝到PC的linux下。
在 PC上调试开发板上产生的core文件,需要使用交叉编译器自带的gdb,并且需要在gdb中指定solib-absolute-prefix和 solib-search-path两个变量以保证gdb能够找到可执行程序的依赖库路径。有一种建立配置文件的方法,不需要每次启动gdb都配置以上变量,即:在待运行gdb的路径下建立.gdbinit。
配置文件内容:
set solib-absolute-prefix YOUR_CROSS_COMPILE_PATH
set solib-search-path YOUR_CROSS_COMPILE_PATH
set solib-search-path YOUR_DEVELOPER_TOOLS_LIB_PATH
handle SIG32 nostop noprint pass
来自:http://www.nginx.cn/1521.html
日常应用中,我们经常会在php里面用到基于文件系统直接输出一个文件的方法,例如:阅读全文
想对Php代码作跳转,其实有一个叫openctags的插件生成一个openctags.tags的,可以用在Editplust里,跳转还不错。
我在Linux的生产环境下,执行:

如果是openctags则直接也可以在vim里命令行设定:

找到了 ctags 中文手册:
    使用 ctags 命令生成 tags 文件 (我生成了 VS 的整个 Solution)
    使用 vi 能够找到生成的 tags 文件(修改 _vimrc 文件,增加 set tags=文件完整路径,就可以找到生成的文件了)
    使用 CTRL + ] 或 CTRL + T 就可以跳转了(可以在方法间跳转,无法转到变量的定义处)
    这一篇文章还以为是一个真正的比较,后来加了一个Url:Swoole-真正的PHP Web开发框架,大概了解了一下,感觉还是不错的,这个框架的思想以实用,借鉴,不落后,不争先,集成事件,服务等。。。阅读全文
PHP Dio扩展新函数dio_fdopen参数返回--bad file descriptor的分析:
昨天准备做一个程序,PHP的串口扩展程序,用来做串口打开的,于是用dio_fdopen来新建一个文件:

每个打开的文件都会被分配一个文件描述符.[1]stdin, stdout, 和stderr的文件描述符分别是0, 1, 和 2. 对于正在打开的额外文件, 保留了描述符3到9. 在某些时候将这些格外的文件描述符分配给stdin, stdout, 或者是stderr作为临时的副本链接是非常有用的.

返回:Bad file descriptor。
查看PHP扩展的源代码,如下:
PHP的最新扩展:dio_open代码片段摘录。

返回错误在这一块,如下:

这儿涉及到fcntl函数的调用返回有问题,查其相关参数:
F_GETFL : 用来读取open系统调用第二个参数设置的标志,即文件的打开方式(O_RDONLY,O_WRONLY,O_APPEND等),它不需要第三个参数。实际上上这时函数返回的是file结构中的flags域。

其相当于只是创建了一个文件,并未确定这个文件的状态。在C里会补上一个 O_RDWR,
fd = open ("hole", O_CREAT, S_IRWXU | S_IRWXG) ;  
变为:
fd = open ("hole", O_CREAT | O_RDWR, S_IRWXU | S_IRWXG) ;  

fcntl这个系统调用功能比较多,可以执行多种操作,其内核函数在fs/fcntl.c中定义:
1.入口参数:
(1)fd:欲访问文件的文件描述符
(2)cmd:要执行的操作的命令,这个参数定义了10个标志,下面介绍其中的5个,
F_DUPFD、F_GETFD、F_SETFD、F_GETFL和 F_SETFL
(3)arg:可选,主要根据第二个命令来决定是否需要
2.出口参数:根据第二个参数的不同,这个返回值也不一样。
3.函数功能:
第二个参数是F_DUPFD,则进行复制文件描述符的操作。它需要用到第三个参数arg,这时arg是一个文件描述符,fcntl(fd,F_DUPFD,arg)在files_struct结构中从指定的arg开始搜索空闲的文件描述符,找到第一个后,将fd的内容复制进来,然后将新找到的文件描述符返回。
第二个参数是F_GETFD,则返回files_struct结构中close_on_exec的值。无需第三个参数。
第二个参数是F_SETFD,则需要第三个参数,若arg最低位为1,则对close_on_exec置位,否则清除close_on_exec。
第二个参数是F_GETFL,则用来读取open系统调用第二个参数设置的标志,即文件的打开方式(O_RDONLY,O_WRONLY,O_APPEND等),它不需要第三个参数。实际上上这时函数返回的是file结构中的flags域。
第二个参数是F_SETFL,则用来对open系统调用第二个参数设置的标志进行改变,但是它只能对O_APPEND和O_NONBLOCK标志进行改变,这时需要第三个参数arg,用来确定如何改变。函数返回0表示操作成功,否则返回-1,并置一个错


这个文件句柄的操作感觉还大有学问在里面,有什么同步,异步等等。
参看:http://blog.csdn.net/wallwind/article/details/7281700



回家了解:
点评:值得借鉴其方法,所以转载如下:
   以前习惯用 echo,print_r 等方法来测试php输出,这样多多少少会影响到代码的正常运行,现改成“把测试变量输出到文本”的形式,可实现日志形式的调试,代码如下:

主要是用到“File_writefile”函数,对上面的 “File_writefile”函数再包装一下:


应用如下:


输出结果:


来自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/12/02/2272161.html
尝试方法:进入控制面板--程序--程序功能--打开或关闭windows功能--勾选.Net3.5,这个包含了2.0版本。然后等待下载完成即可,这种方法可以解决多数朋友经常遇到的win8程序无响应的问题。

小知识:. NET 是 Microsoft XML Web services 平台。XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。Microsoft .NET 平台提供创建 XML Web services 并将这些服务集成在一起之所需。对个人用户的好处是无缝的、吸引人的体验。
微软免费杀毒软件MSE(Microsoft Security Essentials)当前的最新版本是4.0,日前MSE预发布项目提供了最新版MSE供用户体验测试,新版为MSE 4.1预发布版(具体版本号4.1.204.0),这也意味着MSE 4.1即将发布,想要提前体验MSE 4.1的用户不妨安装此预发布版。

MSE 4.1修复了之前版本中存在的Bug,完善了性能,还包括以下新功能:

— 一键整合的Windows Defender Offline:只需一键,用户就可以轻松地使用Windows Defender Offline删除恶意软件,无需从单独的引导媒体重新启动。

— 云清洁修复:增强恶意软件清理,从云端下载清洁版本从而修复恶意软感染过的系统文件。

— 重新设计的网络防护引擎,提供了更好的防护性、可扩展性和性能;

— 完善启动体验。

MSE 4.1预发布版当前仅提供了英文版本,官方下载:

32位(10.2MB):http://download.microsoft.com/download/2/8/5/2859559A-3A1B-4331-AC88-4F59D789F9B9/mse_x86_prerelease_install.exe

64位(12.5MB):http://download.microsoft.com/download/2/8/5/2859559A-3A1B-4331-AC88-4F59D789F9B9/mse_x64_prerelease_install.exe
今天,遇到:... Firebug 达到了 Post 请求大小限制。 ...

   今天在做post表单提交多个textarea控件中的内容时,出现一些意外情况,为了避免以后再出现这种情况,有个清晰的思路,特此写下以下琐碎细节。测试环境为windows的iis。
        以下内容针对一个textarea输入内容测试遇到的问题。当提交数据量比较小时,保存正常。当提交数据量为一篇文章时(大约30k左右),点击保存出现白页现象,没有任何反应。通过firebug查看网络查看表单提交情况,post选项中出现“... Firebug 达到了 Post 请求大小限制。 ...”这样的提示。
总结:
(1)post提交表单数据量限制为100k左右,超过将无法提交。
(2)在iis6.0中表单最大传输大小为200k,因此需要通过以下方式修改配置文件,实现大数据传输
     1. 关闭 IIS Admin Service 服务
     2. 打开 %WinDir%\system32\inetsrv\metabase.xml
     3. 修改 AspMaxRequestEntityAllowed 的值为自己需要的, 默认为 204800,AspBufferingLimit也改成相同值,
    4. 启动 IIS Admin Service
(3)在iis5.1以下post   方法限制传递的数据为2M
(3)get最大提交数据量为4k左右
(4)表单控件(如textarea)最大提交的数据量为30k左右,超过将出现以上异常情况,导致表单无法提交成功.
来自:http://blog.csdn.net/zouqingfang/article/details/7220229
    前言,近来fastCGI流行,也有人提出了相反的看法,并作出了原因解释,觉得有道理,So。。。
    php群里的兄弟:
    nginx这么厉害吗?答:我测试,10000次,10次并发 机器,就是不死 65%cpu了,还不死。。。nginx防盗链牛逼可以根据参数加密。
    php-fpm确实,听蛋疼的 5个进程,每个占12% 我操,cpu干不了别的了,php-fpm是相当的不行 cpu占用太厉害.用apache啊.apache有些特性不行。。。
    Nginx 502:
  fast_cgi设置
   fastcgi_connect_timeout 30;
    fastcgi_send_timeout 30;
    fastcgi_read_timeout 30;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    Php-fpm设置
   <value name="listen_address"> /dev/shm/php-fpm.sock </value>
   <value name="max_children">128</value>
   <value name="request_terminate_timeout">10s</value>
   <value name="request_slowlog_timeout">5s</value>
   <value name="slowlog">/path/to/slow.log</value>
   <value name="rlimit_files">65535</value>

    
    php(fastcgi)不够稳定,经常出现502错误,生成相对复杂的页面没有优势,反而会使php-cgi进程变为僵尸进程.
    安全性,多用户多站点权限问题.php(fastcgi)在应对多用户多站点往往捉襟见肘,不易于实施.
    整合其他开发语言,apache表现得游刃有余.资源利用恰到好处.
为什么采用nginx做前端,apache作为后端的方案?nginx在处理静态内容上较apache是几倍或几十倍的差异,因而放在前面过滤静态内容是最为恰当的.同时nginx也是一个负载均衡器,低资源消耗,高性能转发是它的特点.经过nginx在前面的过滤,后端的apache需要处理的内容相对就比较少了.只需负责处理动态内容就可以了.在性能与稳定性的权衡下,使用nginx+apache搭配会让它们在各自擅长的领域展现自身的价值.
http://www.vpser.net/build/nginx-apache-guide.html
响应消息的第一行为下面的格式:

HTTP-Version SP Status-Code SP Reason-Phrase CRLF

HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。

Status-Code是一个三个数字的结果代码。

Reason-Phrase给Status-Code提供一个简单的文本描述。Status-Code主要用于机器自动识别,Reason-Phrase主要用于帮助用户理解。Status-Code的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:

1xx:信息响应类,表示接收到请求并且继续处理

2xx:处理成功响应类,表示动作被成功接收、理解和接受

3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理

4xx:客户端错误,客户请求包含语法错误或者是不能正确执行

5xx:服务端错误,服务器不能正确执行一个正确的请求

响 应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和Request-URI进一步的信息。响应头域包含Age、 Location、Proxy-Authenticate、Public、Retry-After、Server、Vary、Warning、WWW- Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。

典型的响应消息:

HTTP/1.0200OK

Date:Mon,31Dec200104:25:57GMT

Server:Apache/1.3.14(Unix)

Content-type:text/html

Last-modified:Tue,17Apr200106:46:28GMT

Etag:”a030f020ac7c01:1e9f”

Content-length:39725426

Content-range:bytes554554-40279979/40279980

上例第一行表示HTTP服务端响应一个GET方法。棕色的部分表示响应头域的信息,绿色的部分表示通用头部分,红色的部分表示实体头域的信息。

Location响应头

Location响应头用于重定向接收者到一个新URI地址。

Server响应头

Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。


来自:http://yhjhappy234.blog.163.com/blog/static/31632832201131483532764/
Linux下开发的兄弟有福了:
SecureCRT for MAC :SecureCRT-6.7.1-188.osx_x86.dmg
1.上官网下载SecureCRT for MAC
2.因为试用期有30天,等到差不多到期时,就可以删除文件“SecureCRT_eval.lic ”

rm Users/用户名/Library/Application Support/VanDyke/SecureCRT/Config/SecureCRT_eval.lic

3.SecureCRT Version 6.7.1 (build 188) - Official Release  测试通过^0^

PS:写个crontab或开机自动运行sh程序一劳永逸,不过每次打开软件都后会显示还有多少天到期有点烦哈:)
Demo:
查看:
tail -f /tmp/jack.txt

一:tee
方法一、配置文件
在服务器上的/etc/my.cnf中的[client]加入
tee =/tmp/client_mysql.log即可.


方法二、命令行
1.mysql -uroot --tee=/tmp/client_mysql.log

2.这个类似于sqlplus的spool功能,可以将命令行中的结果保存到外部文件中。如果指定已经存在的文件,则结果会附加到文件中。
mysql> tee client_mysql.log
Logging to file 'client_mysql.log '
或者
mysql> \T client_mysql.log
Logging to file 'client_mysql.log '

mysql> notee
Outfile disabled.
或者
mysql> \t
Outfile disabled.

二:mysql pager、tee、prompt说明:

当表中数据行很多,一页看不完时,可以使用pager [cmd]更改mysql的查询输出,cmd为linux的标准命令,如:
mysql> pager less;
mysql> select * from test.dept;
查询输出都是通过管道传给less命令,可以实现分页浏览
mysql> nopager;即可回到标准输出stdout
还可使用如下语句将输出发送到文件中:
mysql> pager cat>/home/pw/osq.txt;

less说明:
退出:“:q”
下一页:“F”
上一页:“B”
查询

向前搜索
/ - 使用一个模式进行搜索,并定位到下一个匹配的文本
n - 向前查找下一个匹配的文本
N - 向后查找前一个匹配的文本
向后搜索
? - 使用模式进行搜索,并定位到前一个匹配的文本
n - 向后查找下一个匹配的文本
N - 向前查找前一个匹配的文本

tee说明
mysql>tee filename
可以将之后在mysql的所有输入输出操作记录到filename中。

prompt说明
用于修改mysql提示符
[mysql]
prompt=(
来自:http://blog.sina.com.cn/s/blog_45722cc00100z5wm.html
阅读全文
1:在终端下:mysql -V。 以下是代码片段:

[shengting@login ~]$ mysql -V
mysql Ver 14.7 Distrib 4.1.10a, for redhat-linux-gnu (i686)


    2:在mysql中:mysql> status;

以下是代码片段:

mysql> status;
--------------
mysql Ver 14.7 Distrib 4.1.10a, for redhat-linux-gnu (i686)

Connection id:          416
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         3.23.56-log
Protocol version:       10
Connection:             Localhost via UNIX socket
Client characterset:    latin1
Server characterset:    latin1
UNIX socket:            /tmp/mysql_3311.sock
Uptime:                 62 days 21 hours 21 min 57 sec

Threads: 1 Questions: 584402560 Slow queries: 424 Opens: 59664208 Flush tables: 1 Open tables: 64 Queries per second avg: 107.551


3:在help里面查找

以下是代码片段:

[shengting@login ~]$ mysql --help | grep Distrib
mysql Ver 14.7 Distrib 4.1.10a, for redhat-linux-gnu (i686)


    4:使用mysql的函数

以下是代码片段:

mysql> select version();
+-------------+
| version()   |
+-------------+
| 3.23.56-log |
+-------------+
1 row in set (0.00 sec)

来自:http://www.cnblogs.com/end/archive/2011/10/18/2216461.html
[实践Ok]在CentOS6.2下安装DNS并快速配置实例,共八步,心路历程如下:
背景介绍:
在日常的开发中,往往会在测试机和外网的Http的Url实际接口是不一样的,在测试机一个Url地址,在外网中又是一个地址。
这样在我们在开发时,在上线时就会去修改一下接口,在线下测试时用线下的Url接口,最后的情况是,在SVN的管理中会变得
很混乱,也就是在上线上的版本和线下测试的版本在改动上来回切换,版本号不段的切换,为此,为了解决这个问题,必须引入
自己建立一套内网测试系统的DNS来实现其和外网一样的环境,进而在实际开发中就不会出现因URL的接口包含的不同域名而导致
了代码版本管理的版本号不段攀升。

实际操作:
在Linux下尤其是CentOS这样的免费系统上有Yum这样的包管理工具来安DNS服务器,但是我在实践中发现其并不理想,可能是打出的Rpm包多少有些
不太让人满意,我试过用直接运行:yum install bind bind-utils bind-libs bind-chroot caching-nameserver,但后来在配置DNS时出现这样那样的问题.
找不到配置文件?(loading from master file 225.168.192.in-add.arpa failed: file not found)我X,什么权限问题都试了,但就是搞不定,于是否,
改用源码安装,这样来得更保险此些,操控性也强很多,有人问我,你的人生由谁来操盘:我操!

我的上手安装和配置如下:
一:开始安装DNS服务器Bind:
下载 bind  http://www.isc.org,解压bind-9.9.1-P1.tar.gz。
tar -zxvf bind-9.9.1-P1.tar.gz
进入 bind-9.9.1-P1.tar.gz文件夹
cd bind-9.9.1-P1
创建安装目录,我是安装在 /usr/local/named
mkdir /usr/local/named
编译,指定安装目录,指定man目录,开启多线程支持(测试环境也就没有必要搞多线程了,要整看帮助。)
./configure --prefix=/usr/local/named
Make 大约需要几分钟,只要不报错就继续下去。
make
Make install 安装
make install
没有报错,就表示安装成功了。
创建以下目录以备用
mkdir /usr/local/named/namedb

二:开始配置bind
创建 rndc.conf文件,用bind自带程序生成
cd /usr/local/named/
sbin/rndc-confgen > etc/rndc.conf   //一直死在这儿了,只得强制终止。
查原因,在网上搜索:linux安装dns,rndc-confgen没反应,哈,有一篇文章说到点上了,
Url:http://www.nginxs.com/linux/43.html,他说是,摘录如下:
在官方网站上看到这么一条信息
You must use the keyboard to create entropy, since your system is lacking
/dev/random (or equivalent)

start typing:
rndc-confgen: generate key: out of entropy

大概意思就是服务器上没有random产生器,这种情况下我们就手动伪造一个文件代替/dev/random的功能
###新建一个 random 文件随即输入一串数字“记得要长~~
shell $> vim random
asdkfjalsjdflajsldfjlasjdflajsldfjalsjdflajslfjalsjflasjfl
###查看 rndc-confgen 帮助
shell $> ../sbin/rndc-confgen –help
rndc-confgen: invalid argument –
Usage:
rndc-confgen [-a] [-b bits] [-c keyfile] [-k keyname] [-p port] [-r randomfile] [-s addr] [-t chrootdir] [-u user]
  -a:           generate just the key clause and write it to keyfile (/usr/local/named/etc/rndc.key)
  -b bits:      from 1 through 512, default 128; total length of the secret
  -c keyfile:   specify an alternate key file (requires -a)
  -k keyname:   the name as it will be used  in named.conf and rndc.conf
  -p port:      the port named will listen on and rndc will connect to
  -r randomfile: a file containing random data
  -s addr:      the address to which rndc should connect
  -t chrootdir: write a keyfile in chrootdir as well (requires -a)
  -u user:      set the keyfile owner to “user” (requires -a)
,上面这一句是核心,自己整个Random文件是桥梁。
tail -10 rndc.key | head -9 | sed 's/# //g' > named.conf
把这个named.conf放在etc的文件夹子下:/usr/local/named/etc/named.conf。
ok 问题解决了,接下来我们配置 我们的 域名服务器吧。

三:配置篇
编辑named.conf
# vi  /usr/local/named/etc/named.conf
写入以下内容:我的Ip:192.168.225.128 ,注意:225.168.192.in-add.arpa是Ip的反解,刚好倒过来。


退出,保存。
创建并编辑 localhost.zone 文件
vi  /usr/local/named/localhost.zone
写入以下内容:


创建并编辑 localhost.rev 文件
# vi /usr/local/named/localhost.rev


因前面在,51test.com这个是在其他网页上抄过来的简单示例,于是也就顺便把文件也贴上:
vi  /usr/local/named/51test.com.zone


再不是51test.com的反解配置文件:
vi /usr/local/named/225.168.192.in-add.arpa

配置注意事项:
配置文件中的 "@" 符号前不能有任何空白字符
配置文件中的 "IN" 字符前必须有空格或TAB
到此,配置大功告成。

四:
下载一个named.root 到/usr/local/named/下
ftp://ftp.rs.internic.net/domain/named.root
Ftp失效,从这儿下载:
http://www.smth.edu.cn/bbsgcon.php?board=FreeBSD&num=1209
特别注意:bind的配置文档是区分大小写的,因现在那个FTP好像下载不了,于是我也贴下面。
vi /usr/local/named/named.ca


五:运行Bind程序,如下方式加载配置文件启动,加上调试信息参数:

如果运行结果最后一行显示Running
表明安装并启动成功。

最后需要注意的内容是不要忘了是否真正的开启服务器端口(以下是named.conf文件中端口的设置语句,可以看到端口号是 53:telnet x.x.x.x 53)
当然也可以用:nmap localhost ,没有yum安装,这种小工具问题不大用yum来做。
yum install nmap
Total download size: 2.3 M
Installed size: 7.5 M
Is this ok [y/N]: y
Downloading Packages:
root@192.168.225.128:/usr/local/named# nmap localhost
Starting Nmap 5.21 ( http://nmap.org ) at 2012-06-18 03:09 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000033s latency).
Hostname localhost resolves to 2 IPs. Only scanned 127.0.0.1
Not shown: 994 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
53/tcp   open  domain
80/tcp   open  http
111/tcp  open  rpcbind
3306/tcp open  mysql
9000/tcp open  cslistener

端口号是 53就是DNS Bind的端口。

六:停止及启动:
root@192.168.225.128:/usr/local/named# ps aux|grep name
root     19024  0.0  1.2  10624  6216 pts/0    T    03:00   0:00 /usr/local/named/sbin/named -gc /usr/local/named/etc/named.conf
root@192.168.225.128:/usr/local/named# kill -9 19024
root@192.168.225.128:/usr/local/named# ps aux|grep name
[2]+  已杀死               /usr/local/named/sbin/named -gc /usr/local/named/etc/named.conf

七:本机测试,外部机器测试是否dns生效:
vi /etc/resolv.conf
加上,去掉注释其他Dns的Ip值:
nameserver 192.168.225.128
启动Dns后,清楚Bind服务器上的Dns缓存:
root@192.168.225.128:/usr/local/named# ./sbin/rndc flush

root@192.168.225.128:/usr/local/named# ping www.51test.com
PING www.51test.com (192.168.225.128) 56(84) bytes of data.
64 bytes from 192.168.225.128: icmp_seq=1 ttl=64 time=0.025 ms
64 bytes from 192.168.225.128: icmp_seq=2 ttl=64 time=0.058 ms

八:将服务设置为开机自启,把named 添加到启动项,随操作系统一起启动即可:

但是,我们现在是源码的安装,So,得这样子喔。
修改来自Apache里的启动shell(参看一下自启动的标准),也可以不用修改,直接如下也成,内容如下:

1)保存为/etc/init.d/dns
脚本执行权限添加:
2)chmod -R a+x /etc/init.d/dns  //env: /etc/init.d/dns: 权限不够 ,必须给加上。
3)把脚本拷贝至/etc/init.d/目录下,执行命令:
ln -s /etc/init.d/dns /etc/rc.d/rc3.d/S61dns
ln -s /etc/init.d/dns /etc/rc.d/rc4.d/S61dns
ln -s /etc/init.d/dns /etc/rc.d/rc5.d/S61dns
再执行:
chkconfig --add dns  //解释:相当于Windows下的自动启动服务,特别要注意:chkconfig –add dns的时候,出现dns服务不支持chkconfig。
如果想让服务支持chkconfig,必须定义服务的启动级,启动优先级,关闭优先级,还有描述,如上,必须得加上描述等。
chkconfig --levels dns345 on //也成
开机启动设置完毕:
service dns start
-----------------------------------------------

下次一开机也就会运行这个脚本,以启动自己定义的Dns服务器。

启动后,查看是否自己就启动了呢?如下:

果然,又启动起来了,大功告成,整完收工。
Dns服务器从安装到调试配置并测试完成,Eof。Write and Opt  By:jackxiang 2012/06/17 20:30:00


后来,我自己配置了一个新的域名:naimanqi.com.cn ,我的Linux机器IP是:192.168.1.105
修改配置文件:
1)共用如下:



3)反向解析文件:

4)正向解析的文件:

注意这一行:          IN      A       192.168.1.105
这个目的是把浏览器访问:naimanqi.com.cn这个域名也给解析到IP: 192.168.1.105上来,跟在后面的www  IN      A       192.168.1.105 这个是对www解析的,其实它是一个二级域名和admin 这种二级域名是一个意思:admin     IN      A      192.168.1.105 。。。EOF。

最后,可以这样玩这个DNS,这个CentOs6.3的Linux 不是建立在这个NAT下的嘛,后修改为Bridge(桥连),这样后,反正是在一个网段内(路由器下),把自己外网的这台Windows下的机器的DNS由192.168.1.1修改为:192.168.1.105,这样既可以调试刚才配置的内部DNS进行调试,也可 以访问外网,为什么呢?是因为:

是因,内部DNS没有找到那个地址后,它自动转给上一级DNS去了,后得到那个外部网站的IP地址了。但修改为NAT后,好像启动Centos里的DNS后,再在Windows上修改IP为桥连后的IP好像DNS解析不了,在Linux自己修改 /etc/resolve.conf后是可以的,所以,建议用桥连方式来开发,少用NAT方式,这样可以在一个路由器下的电脑都可以配置上这个Dns来访问该网站和开发网部(samba),很是方便,而DNS设置后,如果没有这个网站在内网,它便会访问外网,这种机制也是很好的。
虚拟机默认启动Mysql,发现没有启动得了,于是,看了下Mysql的启动日志,如下:



解决办法:
这主要是没有权限读取,给个权限就OK了
1: 初始化数据库做了没有?
/usr/local/mysql/bin/mysqld_install_db --user=mysql
2:权限问题
chown -R root.mysql /usr/local/mysql/
chown -R mysql /usr/local.mysql/var/
调整lib库路径:
echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf
重新加载配置
ldconfig
启动mysql
/usr/local/mysql/bin/mysql_safe --user=mysql &
查看是否启动了
netstat -ntpl | grep 3306
MySQL 命令自动补齐功能
实践得知,这个只是在本服务器上,且在是自己的client连接自己的db时有这个补全,但是呢,这有个问题是补全并不很智能。
      
方法一、
vi /etc/my.cnf
[mysql]
#no-auto-rehash
auto-rehash         #添加auto-rehash
默认是:


[mysql]              [mysql]
no-auto-rehash     auto-rehash

在重启一下mysql服务,补全命令按 TAB 建,效果如下
mysql> select co

code                     comment                commentCount     consumeAmount    content                country                connect
方法二、
在mysql启动时加参数auto-rehash
mysqld_safe --user=mysql --auto-rehash &

http://blog.chinaunix.net/uid-11327712-id-165736.html
分页: 102/271 第一页 上页 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 下页 最后页 [ 显示模式: 摘要 | 列表 ]