存档

2011年3月 的存档

RHEL /CentOS yum源的安装

2011年3月30日 没有评论

方法一:

中科大的源:

参考网址:http://centos.ustc.edu.cn/

——————————————————————————————————————————————————————————
方法二:

首先察看一下本RHEL的发行版本:

cat /proc/redhat-release

1。确保RHEL5中已经安装了yum。

2。修改源配置文件 #gedit /etc/yum.repos.d/CentOS-Base.repo

在其中加入以下内容

3. 导入key

4. 运行,测试

在安装软件的时候,会出现key失效,或者key太老的警告。

解决方法:

1、关闭验证,也就是把gpgcheck=0

2、将这两个导入,就可以了。
rpm –import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
rpm –import http://quattor.web.lal.in2p3.fr/packages/os/sl520-x86_64/base/RPM-GPG-KEYs/RPM-GPG-KEY-CentOS-5

分类: linux 标签:

sed单行处理命令 输出文本中的偶数和奇数行

2011年3月30日 2 条评论

原文:http://blogold.chinaunix.net/u2/77727/showart_2043370.html

下面就把这些方法总结下来。

awk实现:

一:

二:(这是直接将偶数行和奇数行分别打印到了file2和file1中,这种方法有缺陷就是在file2中始终会打印
最后一行,这个应该改进。不过这也是一种思想,我就把这种方法放在这里了。)

三:

四:

五:

解释:

一:sed实现

二:(这种方法更通用一点)

分类: shell 标签: ,

another app is currently holding the yum lock;waiting for it to exit…

2011年3月30日 没有评论

问题:

another app is currently holding the yum lock;waiting for it to exit…

解决:

有时用yum升级一些文件时,会出现以下情况:
another app is currently holding the yum lock;waiting for it to exit…
可以通过强制关掉yum进程:
#rm -f /var/run/yum.pid
然后就可以使用yum了。
分类: linux 标签:

系统引导管理器GRUB,为初学者指南

2011年3月30日 2 条评论

系统引导管理器GRUB,为初学者指南

作者:北南南北
来自:LinuxSir.Org
摘要: GRUB是多系统引导管理器,简单的说既能引导Linux,同时也能引导Windows;从LinuxSir.Org 讨论区近四年的观察来看,大多初学者并不能在短时间内掌握GRUB的用法,为了解决初学者在最短时间内掌握GRUB,重写GRUB入门文档还是有必要的;

本文重点介绍了GRUB的menu.lst的写法,另外通过GRUB命令行引导系统也做了详述;这些无论是对Windows版本的WINGRUB还是Linux版本的GRUB都是适用的;

原文链接:http://www.linuxsir.org/main/?q=node/129


++++++++++++++++++++++++++++++++++++


一、什么是多重操作系统引导管理器,什么是GRUB;


1、什么是多重操作系统引导管理器及工作原理;

系统启动引导管理器,是在计算机启动后运行的第一个程序,他是用来负责加载、传输控制到操作系统的内核,一旦把内核挂载,系统引导管理器的任务就算完成退出,系统引导的其它部份,比如系统的初始化及启动过程则完全由内核来控制完成;

Briefly, boot loader is the first software program that runs when a computer starts. It is responsible for loading and transferring control to the operating system kernel software (such as the Hurd or the Linux). The kernel, in turn, initializes the rest of the operating system (e.g. GNU).

在X86 架构的机器中,Linux、BSD 或其它Unix类的操作系统中GRUB、LILO 是大家最为常用,应该说是主流;

Windows也有类似的工具NTLOADER;比如我们在机器中安装了Windows 98后,我们再安装一个Windows XP ,在机器启动的会有一个菜单让我们选择进入是进入Windows 98 还是进入Windows XP。NTLOADER就是一个多系统启动引导管理器,NTLOADER 同样也能引导Linux,只是极为麻烦罢了;

在Powerpc 架构的机器中,如果安装了Linux的Powerpc 版本,大多是用yaboot 多重引导管理器,比如Apple机目前用的是IBM Powerpc处理器,所以在如果想在Apple机上,安装Macos 和Linux Powerpc 版本,大多是用yaboot来引导多个操作系统;

因为目前X86架构的机器仍是主流, 所以目前GRUB和LILO 仍然是我们最常用的多重操作系统引导管理器;


2、什么是GRUB;为什么我要选择GRUB;


1)什么是GRUB;

GNU GRUB 是一个多重操作系统启动管理器。GNU GRUB 是由GRUB(GRand Unified Bootloader) 派生而来。GRUB 最初由Erich Stefan Boleyn 设计和应用;

GNU GRUB is a Multiboot boot loader. It was derived from GRUB, GRand Unified Bootloader, which was originally designed and implemented by Erich Stefan Boleyn.


2)“GRUB太不好用”──对GRUB的认识的误区;

GRUB真的不好用吗?不是的,通过LinuxSir.Org 社区近四年来的运行,我发现了大多新手弟兄还是不太了解GRUB;当然这也有中文Linux社区的责任,虽然也有GRUB的中文译本,初学Linux的弟兄可能有点看不懂;

我们欣喜的看到LinuxSir.Org 社区的好多弟兄都曾经或正在写GRUB实践文档,也有的弟兄也总结了GRUB的一些基础知识,比如 probing兄弟的 《GRUB 学习笔记》;由于每个人的写文档时风格不同,可能同一份文档不同的人来写就有不同的风格;所以今天也抖胆也一篇入门级的教程,由于北南不会写高级教程,所 以还得请高手弟兄指教,先谢过;


3)为什么要选择GRUB;

基于在X86架构的CPU而开发操作系统,系统引导管理器不仅仅有GRUB ,而且也有LILO,但对于多重系统引导管理器,你只能选择其一而用;不能两个同时使用;

目前这两个多重系统引导管理器是大家最常用的,也是主流Linux发行版而采用的;有的弟兄喜欢GRUB,比如我个人,有的弟兄喜欢LILO ,比如etony兄(谁是etony,请参见 http://debian.linuxsir.org );

主流发行版 Fedora、Redhat、Centos等基于RPM包的系统,在最新版本中都默认GRUB引导;Slackware 目前仍采用LILO;而Debian发行版目前最新的版本也是采用GRUB;

从目前看来,GRUB有逐渐取代LILO之势,GRUB 2.0正在开发之中;所以我们有理由用GRUB,我也有理由写GRUB使用教程;


二、GRUB软件包版本选择和安装;


1、GRUB的版本选择,Linux版本的GRUB及Windows版本的GRUB的说明;

GRUB不但有Linux版本,也有Windows版本;现我们一一介绍;

如前面所说,目前在在Unix类的操作系统中,大多是都有GRUB;GRUB几乎能引导所有X86架构的操作系统;功能之强,使用简单是GRUB最 大的卖点;由于Windows 操作系统的先入为主的优势,使得大家对Windows的NTLOADER了解的比较多,而对开源社区的GRUB显得有点寞生,由此而带来使用上的“心理恐 惧”;究其初学者对GRUB“恐惧”的主要原因还是对GRUB没有太多的了解和深入;无论是WINGRUB还是Linux版本的GRUB,最方便的还是对 GRUB命令行的操作;一谈到命令行(Command)的操作,可能初学者对此恐惧;其实没有什么难的,象北南这样低级的写手,还能操作得起来,您也应该 能行;


2、GRUB的Windows版本WINGRUB;

请参考:《以WINGRUB 引导安装Fedora 4.0 为例,详述用WINGRUB来引导Linux的安装》


3、GRUB的Linux版本软件包的安装;

其实对于Linux的GRUB,几乎所有的Linux主流发行版都有打包,如果您安装了Linux,并且在开机后出现GRUB字样的,证明您已经安装了GRUB;而无需再次安装;Linux的GRUB软件包安装部份并不是本文的重点;

如果您的Linux系统没有安装GRUB,或者采用的是LILO,而您想用GRUB,可以用系统安装盘自带GRUB软件包来安装,或者到相关发行版本的软件仓库下载后安装;

GRUB 的Linux版本目前在各大发行版中都有打包;比如Fedora/Redhat/Centos/Mandrive/Mandriva/SuSE等以RPM包管理机制的系统,可以通过如下的命令来安装;

请参考《Fedora / Redhat 软件包管理指南》

[root@localhost ~]# rpm -ivh grub*.rpm

如果是Slackware 您可以用如下的办法来安装;

[root@localhost ~]# installpkg grub*.tgz

其它的发行版本请用其自己特色的软件包管理工具来安装;

当然您也可以通过源码包,在任何Linux的发行版上安装;至于源码包的安装方法;

请参考:《如何编译安装源码包软件》

[root@localhost ~]#tar zxvf grub*.tar.gz
[root@localhost ~]#cd grub-xxx
[root@localhost ~]#./configure;make;make install

确认您是否成功安装了GRUB,您可以测试是否有如下两个命令;

[root@localhost ~]# grub
[root@localhost ~]# grub-install

如果您不能找到这两个命令,可能您的可执行程序的路径没有设置;

请参考:《设置可执行程序路径》,当然您可以用绝对路径;比如下面的;

[root@localhost ~]# /usr/sbin/grub
[root@localhost ~]# /usr/sbin/grub-install

如果您还是找不到GRUB软件包安装在哪了;您可以用下面的命令来解决和查找;

[root@localhost ~]# updatedb  注:这个要花很长时间;是索引slocate 的库,然后再通过locate来查找;
[root@localhost ~]# locate grub

比如找到的是有类似如下的;

[root@localhost ~]# locate grub
/sbin/grub-md5-crypt
/sbin/grub
/sbin/grub-install
/sbin/grub-terminfo

在一般情况下,在路径中带有bin或sbin中字样的,这些路径下都是可执行程序;sbin 是超级权限用户才能使用的管理命令;要使用这些命令一般的情况下得切换到root用户下才能使用;比如

[beinan@localhost ~]$ su -  注:切换到root用户,并且切换到其家目录;
Password:
[root@localhost ~]#/sbin/grub  注:用绝对路径来运行grub命令;


三、在Linux中,GRUB的配置中的安装和写入硬盘的MBR;


1、在Linux中,GRUB配置过程中的安装grub-install;

grub-install 命令有何用呢?其实就是把我们前面已经安装的软件包中的一些文件复制到 /boot/grub中;对于新安装GRUB软件包后,也是一个必经的过程;我们前面所说的GRUB软件包的安装;而现在我们说的是GRUB配置的过程中 的安装;虽然在洋文中都是install ,但表达的意思是不一样的;

我们首先要运行 fdisk -l 来确认到底是硬盘的标识;

这个过程主要是确认硬盘的标识是哪个调备,到底是/dev/hda还是/dev/hdb 还是其它的;

[root@localhost ~]# fdisk -l 

Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1         970     7791493+   7  HPFS/NTFS
/dev/hda2             971        9729    70356667+   5  Extended
/dev/hda5             971        2915    15623181    b  W95 FAT32
/dev/hda6            2916        4131     9767488+  83  Linux
/dev/hda7            4132        5590    11719386   83  Linux
/dev/hda8            5591        6806     9767488+  83  Linux
/dev/hda9            6807        9657    22900626   83  Linux
/dev/hda10           9658        9729      578308+  82  Linux swap / Solaris

如果通过fdisk -l 出现有/dev/hda字样的,我们就要用下面的命令来安装;

[root@localhost ~]# grub-install /dev/hda
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'. 

(fd0)   /dev/fd0
(hd0)   /dev/hda

如果是您fdisk -l 出现的有/dev/hdb呢,那就如下运行;

[root@localhost ~]# grub-install /dev/hdb

如果既有/dev/hda和/dev/hdb 就安装到/dev/hda中;

[root@localhost ~]# grub-install /dev/hda

值得注意的是如果您有一个/boot分区,应该用如下的办法来安装;

[root@localhost ~]#grub-install --root-directory=/boot /dev/hda 

[root@localhost ~]#grub-install --root-directory=/boot /dev/hdb

注解:具体是/dev/hda还是/dev/hdb,请以fdisk -l 为准;如果两个都有,就看您把/boot分区是放在第一块硬盘还是第二块硬盘上了,以实际情况为准;


2、设定GRUB的/boot分区并写入MBR;;

在Linux中,GRUB软件包的安装,及在配置过程中安装grub到 /boot中还是不够的, 还要把GRUB,写入MBR才行;有时我们重新安装了Windows,Windows会把MBR 重写,这样GRUB就消失了;如果您出现这样的情况,就要进行这个过程;

[root@localhost ~]# grub

会出现grub>提示符,这是grub命令行模式 ,如果能在开机中出现提示符,没有引导不起来的系统,除非您的系统破坏的极为严重。如果仅仅是GRUB被破坏了,GRUB命令行是能让操作系统引导起来的;

接着看例子,我们要找到 /boot/grub/stage1的,在grub>后面输入;

grub> find  /boot/grub/stage1
(hd0,6)
(fd0)   注:这个是软驱;现在很少用软驱了,如果您有这方面的需要,自己看GRUB的DOC吧;

注解:

(hd0,6) 这是/boot所在的分区;不要误解为是Linux 的/所在的分区,这是值得注意的;
(fd0) 注:这个是软驱;现在很少用软驱了,如果您有这方面的需要,自己看GRUB的DOC吧;

grub>root (hd0,6)    注:这是/boot所在的分区;
grub>setup (hd0)   注:把GRUB写到MBR上;

注解:

上面这步骤是根据 find /boot/stage1而来的,仔细看一下就明白了;现在我们一般安装很少会把/boot分区列为一个单独的分区;不过有的弟兄可能也喜欢这么做;所以还是有必要说一下为好;


四、GRUB的配置文件的menu.lst的写法;

对于GRUB来说,如果没有配置menu.lst,无论是Linux版本的GRUB,还是WINGRUB,都会有命令行可用,通过命令行是一样能把 操作系统引导起来的;有些弟兄总以为menu.lst 配置错了, 或者在机器启动后出现grub>命令行模式就要重新安装系统,其实根本没有这个必要;只要学会GRUB的命令行的用法,根本没有必要重装系统;

menu.lst 位于/boot/grub目录中,也就是/boot/grub/menu.lst 文件;您可以用vi或您喜欢的编辑器来编辑他;如果您不会用vi,还是去学习一下吧;简单的用法怎么也得会,对不对?毕竟这个文档不是讲vi的用法的;

有的弟兄会说,我没有menu.lst怎么办?那就创建一个;用下面的命令;

[root@localhost ~]# touch  /boot/grub/menu.lst

然后我们再做一个/boot/grub/menu.lst 的链接 /boot/grub/grub.conf

[root@localhost ~]# cd /boot/grub
[root@localhost ~]# ln -s menu.lst grub.conf

现在我们来写GRUB的menu.lst了,因为/boot/grub/grub.conf是 /boot/grub/menu.lst的链接文件,改哪个都行。链接文件相当于Windows的快捷方式,这样可能能更好的理解;


1、menu.lst的写法之一;

首先我们看一下我的Fedora 4.0 中的/boot/grub/menu.lst 的内容;

default=0
timeout=5
#splashimage=(hd0,6)/boot/grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.11-1.1369_FC4)
root (hd0,6)
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
initrd /boot/initrd-2.6.11-1.1369_FC4.img
title WinXp
rootnoverify (hd0,0)
chainloader +1

注解:

default=0

default=0 是默认启动哪个系统,从0开始;每个操作系统的启动的定义都从title开始的,第一个title 在GRUB的启动菜单上显示为0,第二个启动为1,以此类推;

timeout=5

注:表示在开机后,GRUB画面出现几秒后开始以默认启动;如果在启动时,移动上下键,则解除这一规则;
#splashimage=(hd0,6)/boot/grub/splash.xpm.gz 注:GRUB的背景画面,这个是可选项;我不喜欢GRUB的背景画面,所以加#号注掉,也可以删除;

hiddenmenu

注解:隐藏GRUB的启动菜单,这项也是可选的,也可以用#号注掉;

一般的情况下对Linux操作系统的启动,一般要包括四行;title 行;root行;kernel 行;initrd 行;


1)在menu.lst中 ,通过 root (hd[0-n],y)来指定/boot 所在的分区;

title XXXXX 注:title 后面加一个空格,title 是小写的,后面可以自己定义;比如FC4,自己定义一个名字就行;
root (hd[0-n],y) ,在本例中,我们看到的是root (hd0,6) ,root (hd[0-n],y)表示的是/boot所在的分区;有时我们安装Linux的时候,大多是不设置/boot的,这时/boot和/所在的同一个分区; 这个root (hd[0-n],y)很重要,因为/boot目录中虽然有grub目录,最为重要的是还有kernel 和initrd文件,这是Linux能启动起来最为重要东西;

有的弟兄会问,root (hd[0-n],y)是怎么来的?

请参考:《在Linux系统中存储设备的两种表示方法》

2)在menu.lst中,kernel 命令行的写法;

kernel 一行,是通指定内核及Linux的/分区所在位置;

比如例子中是;

kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/

在这里以kernel 起始,指定Linux的内核的文件所处的绝对路径;因为内核是处在/boot目录中的, 如果/boot是独立的一个分区,则需要把boot省略;如果/boot是独立的分区,这行要写成:

kernel /vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/

因为/boot所处的分区已经在title 下一行root (hd[0-n],y)中指定了,所以就无需要再指明内核处在哪个分区了;另外Linux系统的硬盘分区的挂载配置文件在/etc/fstab ,原理是通过 mount /dev/hd[a-z]X /boot 来进行的;您可以对照着来理解;

ro 表示只读; root=LABEL=/ 来表示Linux的根所处的分区。LABEL=/ 这是硬盘分区格式化为相应文件系统后所加的标签;如果您不了解什么是标签,也可以直接以/dev/hd[a-z]X 或者/dev/sd[a-z]X来表示;就看您的Linux是根分区是在哪个分区了。比如我的是在/dev/hda7 , 那这里就可以写成root=/dev/hda7;

如果查看系统运行所挂载的分区,请用 df -lh 来查看,就能明白是不是/boot是独立的分区,或者查看/etc/fstab也能知道;

[root@localhost ~]# df -lh
Filesystem            容量  已用 可用 已用% 挂载点
/dev/hda7              11G  9.2G  1.2G  90% /
/dev/shm              236M     0  236M   0% /dev/shm

在这个例子中,我们可以发现 /boot并没有出现只有/dev/hda7,这表示/boot并不是独立的一个分区;所有的东西都包含在/中;于是我们在/boot中查看内核版本;

[root@localhost ~]# ls /boot/vmlinuz*
/boot/vmlinuz-2.6.11-1.1369_FC4   注:看到内核vmlinuz所处的目录;

于是我们就可以这样kernel 这行了;

kernel /boot/vmlinuz-2.6.11-1.1369_FC4  ro root=/dev/hda7


3)initrd 命令行的写法;

如果是/boot独立一个分区,initrd 一行要把/boot中省略;如果/boot不是处于一个分区,而是和Linux的/分区处于同一分区,不应该省略;

比如我们在2)中用的例子;现在拿到这里,我们应该首先查看 /boot中的initrd的文件名到底是什么;

[root@localhost ~]# ls /boot/initrd*
/boot/initrd-2.6.11-1.1369_FC4.img

如果是通过df -lh 得知或查看/etc/fstab 也行, 得知/boot是独立的分区;这时initrd 应该写成;

initrd  /initrd-2.6.11-1.1369_FC4.img

如果是 /boot不是独处一个分区,而是在/同一处一个分区, 则要写成;

initrd  /boot/initrd-2.6.11-1.1369_FC4.img


4)menu.lst第一种写法的总结和实践;

在这里,我们只说重要的,不重要的就一带而过了;

1]用fdisk -l ;df -lh ;more /etc/fstab来确认分区情况;

我们过fdisk -l ;df -lh ; more /etc/fstab 来确认/boot所在的分区,及Linux的根分区所在位置;

比如我们确认/boot和Linux的/分区同处一个分区;

[root@localhost ~]# df -lh
Filesystem            容量  已用 可用 已用% 挂载点
/dev/hda7              11G  9.2G  1.2G  90% /
/dev/shm              236M     0  236M   0% /dev/shm

然后我们/etc/fstab 中,查看/分所在的分区或分区标签是什么;

[root@localhost ~]# more /etc/fstab
# This file is edited by fstab-sync - see 'man fstab-sync' for details
LABEL=/                 /                       ext3    defaults        1 1
/dev/devpts             /dev/pts                devpts  gid=5,mode=620  0 0
/dev/shm                /dev/shm                tmpfs   defaults        0 0
/dev/proc               /proc                   proc    defaults        0 0
/dev/sys                /sys                    sysfs   defaults        0 0
LABEL=SWAP-hda1         swap                    swap    defaults        0 0
/dev/hdc                /media/cdrecorder       auto    pamconsole,exec,noauto,managed 0 0

经过上面的df -lh 和more /etc/fstab 的对照中得知,/boot并是独处一个分区,而是和/在同一个分区;这个Linux系统安装在/dev/hda7上,文件系统(此分区)的标签为 LABEL=/ ,/boot也是处于/dev/hda7 ,/dev/hda7也可以说是 root (hd0,6);

2]查看内核vmlinuz的和initrd文件名的全称;

[root@localhost ~]# ls -lh /boot/vmlinuz*
-rw-r--r--  1 root root 1.6M 2005-06-03  /boot/vmlinuz-2.6.11-1.1369_FC4
[root@localhost ~]# ls -lh /boot/initrd*
-rw-r--r--  1 root root 1.1M 11月 26 22:30 /boot/initrd-2.6.11-1.1369_FC4.img


3]开始写menu.lst ;

我们根据上面所提到的,可以写成如下的样子;

default=0
timeout=5
title FC4
root (hd0,6)
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
initrd /boot/initrd-2.6.11-1.1369_FC4.img

也可以写成;

default=0
timeout=5
title FC4
root (hd0,6)
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7
initrd /boot/initrd-2.6.11-1.1369_FC4.img

注解:上面两个不同之处在于一指定Linux的根/所在的分区时,一个是用了文件系统的标签,另一个没有用标签;

2、menu.lst的写法之二,精简型;

本写法主要是把指定/boot所位于的所分区直接写入kernel 指令行;这样就省略了通过root (hd[0-n],y)来指定/boot所位于的分区;


1)第一种情况:/boot和Linux的/根分区在同一个分区;

有前面的那么多的讲解,menu.lst写法之二就好理解多了;也得分两种情况,咱们先把/boot并不是独处一个分区,而是和Linux的根分区处于同一个分区;我们以 4)menu.lst第一种方法的写法总结 的实例为例子;

default=0
timeout=5
title FC4x
kernel (hd0,6)/boot/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7
initrd (hd0,6)/boot/initrd-2.6.11-1.1369_FC4.img

注解:

title FC4x 注:自己为这个Linux 起个简单的名,以title开头,然后一个空格,后面就自己发挥吧,FC4或FC4x都行;

kernel 空格 (hd0,6)/boot/vmlinuz-2.6.11-1.1369_FC4 空格 ro 空格 root=/dev/hda7

kernel 这行这样理解 kernel (boot所在的分区)/boot/内核文件件全称 ro root=Linux根所位于的分区或标签

initrd 空格 (hd0,6)/boot/initrd-2.6.11-1.1369_FC4.img
initrd 这行可以这样理解 initrd (/boot所在的分区)/boot/内核文件名全称


2)第二种情况:/boot独立一个分区,和Linux的根分区不是同一个分区;

比如我们查看到df -lh 得到的是

[root@localhost ~]# df -lh
Filesystem            容量  已用 可用 已用% 挂载点
/dev/hda6              200M  120M  80M  60% /boot
/dev/hda7              11G  9.2G  1.2G  90% /

我们再进一行查看/etc/fstab 得知;

LABEL=/                 /                       ext3    defaults        1 1
LABEL=/boot             /boot                   ext3    defaults        1 2

所以我们应该写成如下的;

title FC4x
kernel (hd0,5)/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
initrd (hd0,5)/initrd-2.6.11-1.1369_FC4.img

因为Linux的根分区是/dev/hda7,通过/etc/fstab和df -h的内容得知标签为 LABEL=/的分区就是/dev/hda7 ,所以有;

title FC4x
kernel (hd0,5)/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7
initrd (hd0,5)/initrd-2.6.11-1.1369_FC4.img


五、通过GRUB命令行来启动Linux操作系统;

GRUB的命令行才是王道,如果知道怎么用命令行来启动操作系统,那理解menu.lst的写法也不难;也就是说在开机的时候,不用GRUB的菜单,通过GRUB的命令也是一样能把操作系统引导起来。

因为menu.lst的内容就是GRUB的一个一个的指令集合;是不是Linux这玩意很神奇?

1、为什么需要学习GRUB的命令行;

当我们把GRUB的menu.lst写错的时候,或者丢掉了menu.lst的时,比如在开机的时候,GRUB会出现grub>类似的命令提示符,这时需要我们用命令行启动系统;当然您可以不用定义GRUB的菜单 ,直接用命令行来启动系统,比如我现在就是,为了写GRUB的文档,就把menu.lst 删除了,直接用命令来启动系统;

2、用命令行来引导Linux操作系统的步骤;

通过命令行来引导操作系统的流程,也没有什么难的;无非是把指令手工输入到grub>提示符的后面;在这个过程中,tab键的命令补齐功能就显得很重要了。如果您不知道有哪些命令,可以输入help;


1)进入GRUB的命令行模式 grub>

如果开机时,GRUB出现的是grub>,说明你没有/etc/grub/menu.lst ,您需要自己写一个才会GRUB的菜单,让我们来选择进入哪个系统。如果有GRUB的菜单,您可以按Ctrl+c组合键进入GRUB的命令行模式,会出现grub> 提示符;

grub>


2)获取帮助GRUB的 help

只要您在grub>提示符的后面输入help 就能得到GRUB所有的命令提示;

grub> help
blocklist FILE                         boot
cat FILE                               chainloader [--force] FILE
clear                                  color NORMAL [HIGHLIGHT]
configfile FILE                        device DRIVE DEVICE
displayapm                             displaymem
find FILENAME                          geometry DRIVE [CYLINDER HEAD SECTOR [
halt [--no-apm]                        help [--all] [PATTERN ...]
hide PARTITION                         initrd FILE [ARG ...]
kernel [--no-mem-option] [--type=TYPE] makeactive
map TO_DRIVE FROM_DRIVE                md5crypt
module FILE [ARG ...]                  modulenounzip FILE [ARG ...]
pager [FLAG]                           partnew PART TYPE START LEN
parttype PART TYPE                     quit
reboot                                 root [DEVICE [HDBIAS]]
rootnoverify [DEVICE [HDBIAS]]         serial [--unit=UNIT] [--port=PORT] [--
setkey [TO_KEY FROM_KEY]               setup [--prefix=DIR] [--stage2=STAGE2_
terminal [--dumb] [--no-echo] [--no-ed terminfo [--name=NAME --cursor-address
testvbe MODE                           unhide PARTITION
uppermem KBYTES                        vbeprobe [MODE]

如果需要得到某个指令的帮助,就在 help 后面空一格,然后输入指令,比如;

grub>help kernel


3)cat的用法;

cat指令是用来查看文件内容的,有时我们不知道Linux的/boot分区,以及/根分区所在的位置,要查看/etc/fstab的内容来得知, 这时,我们就要用到cat (hd[0-n],y)/etc/fstab 来获得这些内容;注意要学会用tab键命令补齐的功能;

grub> cat (     按tab 键会出来hd0或hd1之类的;
grub> cat (hd0, 注:输入hd0,然后再按tab键;会出来分区之类的;
grub> cat (hd0,6)
Possible partitions are:
Partition num: 0,  Filesystem type unknown, partition type 0x7
Partition num: 4,  Filesystem type is fat, partition type 0xb
Partition num: 5,  Filesystem type is reiserfs, partition type 0x83
Partition num: 6,  Filesystem type is ext2fs, partition type 0x83
Partition num: 7,  Filesystem type unknown, partition type 0x83
Partition num: 8,  Filesystem type is reiserfs, partition type 0x83
Partition num: 9,  Filesystem type unknown, partition type 0x82 

grub> cat (hd0,6)/etc/fstab 注:比如我想查看一下 (hd0,6)/etc/fstab的内容就这样输入;

LABEL=/                 /                       ext3    defaults        1 1
/dev/devpts             /dev/pts                devpts  gid=5,mode=620  0 0
/dev/shm                /dev/shm                tmpfs   defaults        0 0
/dev/proc               /proc                   proc    defaults        0 0
/dev/sys                /sys                    sysfs   defaults        0 0
LABEL=SWAP-hda1         swap                    swap    defaults        0 0
/dev/hdc                /media/cdrecorder       auto    pamconsole,exec,noauto,
managed 0 0

有的弟兄可能会说,我不知道Linux安装在了哪个分区。那根据文件系统来判断一个一个的尝试总可以吧我;只要能cat出/etc/fstab就能为以后引导带来方便;

主要查看/etc/fstab中的内容,主要是Linux的/分区及/boot是否是独立的分区;如果没有/boot类似的行,证明/boot和 Linux的/处于同一个硬盘分区;比如上面的例子中LABEL=/ 这行是极为重要的;说明Linux系统就安在标签为LABEL=/的分区中;

如果您的Linux系统/boot和/没有位于同一个分区,可能cat (hd[a-n],y) 查到的是类似下面的;

LABEL=/                 /                       ext3    defaults        1 1
LABEL=/boot             /boot                   ext3    defaults        1 2


4) root (hd[0-n,y) 指令来指定/boot所在的分区;

其实这个root (hd[0,n],y)是可以省略的,如果省略了,我们要在kerenl 命令中指定;我们前面已经说过 (hd[0-n],y) 硬盘分区的表示方法的用途;主要是用来指定 /boot所在的分区;

比如我们确认/boot和 (hd0,6),所以就可以这样来输入root (hd0,6)

grub> root (hd0,6)

如果发现不对,可以重新来过;没有什么大不了的;


5) kernel 指令,用来指定Linux的内核,及/所在的分区;

kernel 这个指令可能初学者有点怕,不知道内核在哪个分区,及内核文件名的全称是什么。不要忘记tab键的命令补齐的应用;

如果我们已经通过root (hd[0-n],y) 指定了/boot所在的分区,语法有两个:

如果/boot和Linux的/位于同一个分区,应该是下面的一种格式;

kernel /boot/vmlinuz在这里按tab键来补齐,就看到内核全称了 ro root=/dev/hd[a-z]X

如果/boot有自己独立的分区,应该是;

kernel /vmlinuz在这里按tab键来补齐,就看到内核全称了 ro root=/dev/hd[a-z]X

在这里 root=/dev/hd[a-z]X 是Linux 的/根所位于的分区,如果不知道是哪个分区,就用tab出来的来计算,一个一个的尝试;或用cat (hd[0-n],y)/etc/fstab 中得到Linux的/所在的分区或分区的标签;

grub> kernel /boot/在这里按tab键;这样就列出/boot中的文件了;
Possible files are: grub initrd-2.6.11-1.1369_FC4.img System.map-2.6.11-1.1369
_FC4 config-2.6.11-1.1369_FC4 vmlinuz-2.6.11-1.1369_FC4 grubBAK memtest86+-1.55
.1 xen-syms xen.gz 

grub> kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
[Linux-bzImage, setup=0x1e00, size=0x18e473]

注解: root=LABEL=/ 是Linux的/所在的分区的文件系统的标签;如果您知道Linux的/在哪个具体的分区,用root=/dev/hd[a-z]X来指定也行。比如下面的一行也是可以的;

grub> kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7

也可以把/boot所在的分区的指定 root (hd[0-n],y)这行省掉,直接在kernel 中指定/boot所在的分区;所以就在下面的语法;

如果是/boot和Linux的根同处一个分区;

kernel (hd[0-n],y)/boot/vmlinuz ro root=/dev/hd[a-z]X

比如:

grub>kernel

如果是/boot和Linux所在的根不在一个分区;则是;

kernel (hd[0-n],y)/vmlinuz  ro root=/dev/hd[a-z]X
grub> kernel (hd0,6)/boot/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7
[Linux-bzImage, setup=0x1e00, size=0x18e473]

或下面的输入,以cat 出/etc/fstab内容为准;

grub> kernel (hd0,6)/boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
[Linux-bzImage, setup=0x1e00, size=0x18e473]


6)initrd 命令行来指定initrd文件;

grub> initrd /boot/initrd在这里tab 来补齐;
grub> initrd /boot/initrd-2.6.11-1.1369_FC4.img
[Linux-initrd @ 0x2e1000, 0x10e685 bytes]

如果/boot是独立的一个分区,应该是如下样子的语法;比如下面的;

grub> initrd /initrd在这里tab 来补齐;
grub> initrd /initrd-2.6.11-1.1369_FC4.img
[Linux-initrd @ 0x2e1000, 0x10e685 bytes]


7)boot 引导系统;

grub>boot

前面的几个步骤都弄好 。就进入引导;尝试一下就知道了。。

8)引导Linux系统实例全程回放;

实例:/boot和Linux的/处于同一个硬盘分区;

grub> cat (hd0,6)/etc/fstab
# This file is edited by fstab-sync - see 'man fstab-sync' for details
LABEL=/                 /                       ext3    defaults        1 1
/dev/devpts             /dev/pts                devpts  gid=5,mode=620  0 0
/dev/shm                /dev/shm                tmpfs   defaults        0 0
/dev/proc               /proc                   proc    defaults        0 0
/dev/sys                /sys                    sysfs   defaults        0 0
LABEL=SWAP-hda1         swap                    swap    defaults        0 0
/dev/hdc                /media/cdrecorder       auto    pamconsole,exec,noauto,managed 0 0 

grub> root (hd0,6)
Filesystem type is ext2fs, partition type 0x83

grub> kernel /boot/在这里按tab补齐,全列出/boot所有的文件;
Possible files are: grub initrd-2.6.11-1.1369_FC4.img System.map-2.6.11-1.1369_FC4 config-2.6.11-1.1369_FC4 vmlinuz-2.6.11-1.1369_FC4
memtest86+-1.55.1 xen-syms xen.gz

grub> kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7  注:输入
[Linux-bzImage, setup=0x1e00, size=0x18e473]

grub> initrd /boot/在这里按tab补齐
Possible files are: grub initrd-2.6.11-1.1369_FC4.img System.map-2.6.11-1.1369_FC4 config-2.6.11-1.1369_FC4 vmlinuz-2.6.11-1.1369_FC4
memtest86+-1.55.1 xen-syms xen.gz

grub> initrd /boot/initrd-2.6.11-1.1369_FC4.img 注;输入intrd文件名的全名;
[Linux-initrd @ 0x2e1000, 0x10e685 bytes]

grub> boot

我们指定Linux的根时,可以用cat出来的fstab的内容中Linux的/分区文件系统标签来替代;也就是kernel 那行中 root=/dev/hd[a-z]X;

grub> cat (hd0,6)/etc/fstab
# This file is edited by fstab-sync - see 'man fstab-sync' for details
LABEL=/                 /                       ext3    defaults        1 1
/dev/devpts             /dev/pts                devpts  gid=5,mode=620  0 0
/dev/shm                /dev/shm                tmpfs   defaults        0 0
/dev/proc               /proc                   proc    defaults        0 0
/dev/sys                /sys                    sysfs   defaults        0 0
LABEL=SWAP-hda1         swap                    swap    defaults        0 0 

/dev/hdc                /media/cdrecorder       auto    pamconsole,exec,noauto,managed 0 0

grub> root (hd0,6)
Filesystem type is ext2fs, partition type 0x83

grub> kernel /boot/在这里按tab补齐,全列出/boot所有的文件;
Possible files are: grub initrd-2.6.11-1.1369_FC4.img System.map-2.6.11-1.1369_FC4 config-2.6.11-1.1369_FC4 vmlinuz-2.6.11-1.1369_FC4
memtest86+-1.55.1 xen-syms xen.gz

grub> kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
[Linux-bzImage, setup=0x1e00, size=0x18e473]

grub> initrd /boot/在这里按tab补齐
Possible files are: grub initrd-2.6.11-1.1369_FC4.img System.map-2.6.11-1.1369_FC4 config-2.6.11-1.1369_FC4 vmlinuz-2.6.11-1.1369_FC4 grubBAK
memtest86+-1.55.1 xen-syms xen.gz

grub> initrd /boot/initrd-2.6.11-1.1369_FC4.img 注;输入intrd文件名的全名;
[Linux-initrd @ 0x2e1000, 0x10e685 bytes]

grub> boot

如果是/boot和Linux的根分区不在同一个分区,要把kernel和initrd 指令中的/boot去掉,也就是/vmlinuzMMMMMM 或 /initrdNNNN

也可以不用root (hd[0-n]来指定/boot所在分区,要在kernel 和initrd 中指定;比如Linux的/根所位于的分区和/boot所位于的分区都是(hd0,6),并且我们cat出来的/etc/fstab是Linux的/根分 区的文件系统的标签为LABEL=/,引导操作系统的例子如下;

grub>kernel (hd0,6)/boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
grub>initrd (hd0,6)/boot/initrd-2.6.11-1.1369_FC4.img
grub>boot

grub>kernel (hd0,6)/boot/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7
grub>initrd (hd0,6)/boot/initrd-2.6.11-1.1369_FC4.img
grub>boot

如果/boot位于 /dev/hda6,也就是(hd0,5),Linux的根/位于分区/dev/hda7,并且我们cat 出来的/etc/fstab 中/分区的标签为 LABEL=/。下面的两种方法都可以引导;

grub>kernel (hd0,5)/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
grub>initrd (hd0,5)/initrd-2.6.11-1.1369_FC4.img
grub>boot

grub>kernel (hd0,5)/vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda7
grub>initrd (hd0,5)/initrd-2.6.11-1.1369_FC4.img
grub>boot


六、通过GRUB引导Windows操作系统;


1、通过编辑 menu.lst 来引导Windows 系统;

如果您的Windows所处于的分区在(hd0,0),可以在menu.lst 加如下的一段就能引导起来了;

title WinXp
rootnoverify (hd0,0)
chainloader +1

如果您的机器有两块硬盘,而Windows 位于第二个硬盘的第一个分区,也就是(hd1,0)

您可以用grub的map来指令来操作把两块硬盘的序列对调,这样就不用在BIOS中设置了;在menu.lst中加如下的内容,比如下面的;

title WinXp
map (hd0) (hd1)
map (hd1) (hd0)
rootnoverify (hd0,0)
chainloader +1
makeactive

如果Windows的分区不位于硬盘的第一个分区怎么办呢?比如在(hd0,2);

这个也好办吧,把rootnoverify 这行的(hd0,0)改为 (hd0,2)

title WinXp
rootnoverify (hd0,2)
chainloader +1
makeactive

如果Windows的在第二个硬盘的某个分区,比如说是位于(hd1,2),则要用到map指令;

title WinXp
map (hd0) (hd1)
map (hd1) (hd0)
rootnoverify (hd1,2)
chainloader +1
makeactive

如果有多个Windows 系统,怎么才能引导出来呢?应该用hide 和unhide指令操作;比如我们安装了两个Windows ,一个是位于(hd0,0)的windows 98 ,另一个是安装的是位于(hd0,1)的WindowsXP;这时我们就要用到hide指令了;

title Win98
unhide (hd0,0)
hide (hd0,1)
rootnoverify (hd0,0)
chainloader +1
makeactive 

title WinXP
unhide (hd0,1)
hide (hd0,0)
rootnoverify (hd0,1)
chainloader +1
makeactive


2、通过GRUB指令来引导Windows ;

其实我们会写menu.lst了,在menu.lst中的除了title外,都是一条条指令;如果我们启动Windows ,只是输入指令就行了;

比如 Windows的分区在 (hd0,0),我们在开机后,按ctrl+c ,进入GRUB的命令模式;就可以用下面的

grub> rootnoverify (hd0,0)
grub> chainloader +1
grub> boot

其它同理… …

七、GRUB丢失或损坏的应对策略;

如果GRUB是Linux版本才出会这样的问题;WINGRUB可以不写在MBR上;所以不会出现这样的问题。WINGRUB用起来比较简单。menu.lst 和命令行的用法和Linux版本的GRUB是一样的;


1、由于重新安装Windows或其它未知原因而导致GRUB的丢失;

您可以通过系统安装盘、livecd进入修复模式;

请参考:《Linux 系统的单用户模式、修复模式、跨控制台登录在系统修复中的运用》

首先:您根据前面所说grub-install来安装GRUB到/boot所在的分区;要仔细看文档,/boot是不是处于一个独立的分区是重要的,执行的命令也不同;

其次:要执行grub ,然后通过 root (hd[0-n],y)来指定/boot所位于的分区,然后接着执行 setup (hd0),这样就写入MBR了,比如下面的例子;

grub>root (hd0,6)
grub>setup (hd0)
grub>quit

重新引导就会再次出现MBR的菜单了或命令行的提示符了;


2、如果出现GRUB提示符,而不出现GRUB的菜单,如何引导系统;

存在的问题可能是/boot/grub/menu.lst丢失,要自己写一个才行;您可以用命令行来启动系统,进入系统后写一写menu.lst就OK了。前面已经谈过了;

写好后还要建一个grub.conf的链接,如下:

[root@localhost ~]# cd /boot/grub
[root@localhost grub]# ln -s menu.lst grub.conf


八、关于GRUB的未尽事宜;

GRUB有很多内容,比如对BSD的引导,还有一些其它指令的用法,我并没有在本文提到;主要我目前还未用到,如果您需要了解更多,请查看 《GNU GRUB 手册和FAQ》


九、关于本文;

本文前后写了三四天,中间发现并不能把Linux设备的两种表现形式说的清楚,于是被迫写了《在Linux系统中存储设备的两种表示方法》;由于没有BSD系统,所以没有写关于BSD的引导;如果正在用BSD的弟兄如果有时间不妨写一写;写的时候注意文档的结构,这样方便大家的阅读;

GRUB有很多内容,需要大家慢慢的学习和研究;有的弟兄抑制GRUB,说不如NTLOADER,其实这是错误的;如果您想学习和使用Linux就得学习和适应Linux的操作;习惯成自然,如果您抵制学习Linux,那可能您永远会说“Linux不如Windows”;


十、参考文档;

《GNU GRUB 手册和FAQ》

分类: linux 标签:

如何解决firefox打开链接自动跳转至新页面?

2011年3月29日 没有评论

问题:

如何解决firefox打开链接自动跳转至新页面?

解决方法:

方法一:使用鼠标滚轮的中间按键(即把鼠标滚轮按下去)点击链接就会在后台打开,如果这个键没有坏的话。

方法二:如果这个键不能用的话,在地址栏里输入about:config,找到browser.tabs.loadDivertedinbackground 双击它,改为True,就可以了。注意在选项里的标签式浏览最后一项不要打勾

分类: life 标签:

PHP-用户登录代码

2011年3月28日 4 条评论

1.数据库名:login 表名:woyoo
2.字段名 :name password (一共两个)
3.表单里输入框的名字分别为:name password
4.最关键了,login.php页的代码,要求:将用户在表单里填写的name以及password 与 MYSQL数据库中woyoo表中的name以及password分别进行对比,如果一致,打开test.htm页,否则,弹出对话框:密码或用户名不正确!

login.php内容如下:

以下附简单的login.htm内容

用户名

密码

   

上面是WordPress自动把代码给解析了

<html>
<body>
<form name=”login” action=”login.php” method=post>
用户名<input type=text name=”name”>
<p>密码<input type=password name=”password”>
<p>
<input name=”log” type=submit value=”登录”>
</form>
</body>
</html>

分类: PHP 标签:

创建MySQL用户 赋予某指定库表的权限

2011年3月28日 没有评论

mysql安装详解 

本文实例,运行于 MySQL 5.0 及以上版本。

MySQL 赋予用户权限命令的简单格式可概括为:

一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。

或者,用一条 MySQL 命令来替代:

二、grant 数据库开发人员,创建表、索引、视图、存储过程、函数。。。等权限。

grant 创建、修改、删除 MySQL 数据表结构权限。

grant 操作 MySQL 外键权限。

grant 操作 MySQL 临时表权限。

grant 操作 MySQL 索引权限。

grant 操作 MySQL 视图、查看视图源代码 权限。

grant 操作 MySQL 存储过程、函数 权限。

三、grant 普通 DBA 管理某个 MySQL 数据库的权限。

其中,关键字 “privileges” 可以省略。

四、grant 高级 DBA 管理 MySQL 中所有数据库的权限。

五、MySQL grant 权限,分别可以作用在多个层次上。

1. grant 作用在整个 MySQL 服务器上:

2. grant 作用在单个数据库上:

3. grant 作用在单个数据表上:

4. grant 作用在表中的列上:

5. grant 作用在存储过程、函数上:

六、查看 MySQL 用户权限

查看当前用户(自己)权限:

查看其他 MySQL 用户权限:

七、撤销已经赋予给 MySQL 用户权限的权限。

revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可:

八、MySQL grant、revoke 用户权限注意事项

1. grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。

2. 如果想让授权的用户,也可以将这些权限 grant 给其他用户,需要选项 “grant option“

这个特性一般用不到。实际中,数据库权限最好由 DBA 来统一管理。

 ———————————————————————————————-

授权命令GRANT 语句的语法如下:
GRANT privileges (columns)
ON what
TO user IDENTIFIEDBY “password”
WITH GRANT OPTION
对用户授权
mysql>grant rights on database.* to user@host identified by “pass”;
例1:
增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。
grant select,insert,update,delete on *.* to test1@”%” Identified by “abc”;
ON 子句中*.* 说明符的意思是“所有数据库,所有的表”
例2:
增加一个用户test2密码为abc, 让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作。
grant select,insert,update,delete on mydb.* to test2@localhost identified by “abc”;
例子3
增加一个用户custom,他能从主机localhost、server.domain和whitehouse.gov连接。他只想要从 localhost存取bankaccount数据库,从whitehouse.gov存取expenses数据库和从所有3台主机存取customer 数据库。他想要从所有3台主机上使用口令stupid。

为了使用GRANT语句设置个用户的权限,运行这些命令:
shell> mysql –user=root mysql
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON bankaccount.* TO custom@localhost IDENTIFIED BY ‘stupid’;
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON expenses.* TO custom@whitehouse.gov IDENTIFIED BY ‘stupid’;
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON customer.* TO custom@’%’ IDENTIFIED BY ‘stupid’;
==============================================
权限信息用user、db、host、tables_priv和columns_priv表被存储在mysql数据库中(即在名为mysql的数据库中)。
权限 列 Context
select Select_priv 表
insert Insert_priv 表
update Update_priv 表
delete Delete_priv 表
index Index_priv 表
alter Alter_priv 表
create Create_priv 数据库、表或索引
drop Drop_priv 数据库或表
grant Grant_priv 数据库或表
references References_priv 数据库或表
reload Reload_priv 服务器管理
shutdown Shutdown_priv 服务器管理
process Process_priv 服务器管理
file File_priv 在服务器上的文件存取

1.select、insert、update和delete权限 允许你在一个数据库现有的表上实施操作,是基本权限
2.alter权限允许你使用ALTER TABLE
3.create和drop权限允许你创建新的数据库和表,或抛弃(删除)现存的数据库和表 如果你将mysql数据库的drop权限授予一个用户,该用户能抛弃存储了MySQL存取权限的数据库!
4.grant权限允许你把你自己拥有的那些权限授给其他的用户。
你不能明显地指定一个给定用户应该被拒绝存取。即,你不能明显地匹配一个用户并且然后拒绝连接。你不能指定一个用户有权创建立或抛弃一个数据库中的表,也不能创建或抛弃数据库本身。 可以同时列出许多被授予的单个权限。
例如,如果想让用户能读取和修改已有表的内容,但又不允许创建新表或删除表,可按如下授权:
GRANT SELECT,INSERT,DELETE,UPDATE ON samp_db.* TO ‘user’@’%’ IDENTIFIEDBY “pass”

以上是我从别的地方拷贝过来后稍作修改的文字,下面自己写一些需要注意的东西。

为什么使用了Grant all on db.* to user identified by “pass”后,在主机上访问数据库还会出现ERROR 1045 (28000): Access denied for user ‘user’@’localhost’ (using password: YES) 的错误提示?

解答方法如下:运行命令 Grant all on db.* to ‘user’@’localhost’ identified by “pass”

原因是:当不加@选项时,效果与加@’%’是一样的,’%’从名义上包括任何主机,(%必须加上引号,不然与@放在一起可能不会被辨认出。)不过有些时候(有些版本)’%’不包括localhost,要单独对@’localhost’进行赋值

分类: DB 标签:

邮政邮寄药品要出示发票

2011年3月28日 3 条评论

今天去邮局邮寄几盒排毒养颜的药和几瓶维生素片,邮局一定要出示购药发票,以后同学们寄药物方面,记得要拿发票。

    今后邮寄药品,要提交购买发票。记者获悉,近日国家相关部门开展整治非药品冒充药品专项行动,将严厉打击利用邮寄、快递、网络销售假药伪药行为,因此规定个人在邮递药品时须提供药品发票供核对。
  个人邮寄药品作为一种特殊的流通方式,为市民提供了方便、快捷的服务,但一些不法分子却利用寄递渠道销售假药。一些假冒伪劣药品常盗用其他药品的批准文号,在市场上流通。还有一些在网上以“国家级科研单位”为招牌进行销售,虚假宣传疗效,邮寄药品多为异地或远程交易,并且售假者经常变换邮寄地址。由于邮购药品来源复杂,不法分子在某地制造假药,可以通过邮递渠道销往全国。
  日前,国家邮政局和国家食药监管局联合发出通知规定,对确有证据证明相关寄件人销售和寄递假药的,邮政部门将不予收寄。邮政网点、快递企业要落实收寄验收制度,特别要加强对收寄批量药品的验视。对个人交寄零散药品的,应提交购买药品的发票,仔细核对后,方能办理寄递;对长期、大量和集中交寄药品的,邮政、快递企业应要求交寄人提供药品生产企业或经营企业许可证及交寄人身份证明等,不能提供的,可请药品监督管理部门检查后寄递

分类: life 标签:

[Flash游戏:蚂蚁搬蛋糕]-游戏攻略

2011年3月28日 没有评论

 [Flash游戏:蚂蚁搬蛋糕]   是一款很耐玩的Flash小游戏,最近没事一直在玩。它的特点是:武器可以升级,每一种武器的属性不同,所以攻击力和防御能力也各不相同。目前,也就是君君玩到了80多关,我最好成绩也就是70关,今天没事想写一个攻略送给大家,其中大部分是原创,有少部分参考了网上的资料。 阅读全文…

分类: life 标签:

如何下载网页里面的FLASH?

2011年3月25日 1 条评论

初级篇:

想要把喜欢的FLASH贴上来,关键就是要找到这个FLASH的真实地址,而有效的FLASH地址一般都是以http://开头,以.swf结尾的,比如http://flash.cnflash.net/flash/yd/flash2060482563.swf

一般的FLASH网站播的FLASH,都没有把地址隐藏,只需在播发页面的地址栏直接复制粘贴上来就可以了。
有的论坛里的FLASH专区播放的FLASH下面会有‘全屏观看’的字样,你只需用鼠标按右键,点击属性,然后再把出现的地址复制粘贴就行了!

中级篇:

大部分的网站都不会给出真实的FLASH地址, 一般国内的网站及论坛都逃不出这个办法的魔爪~~
首先在你想下”毒”手的FLASH上观察一下,发现初级篇里的办法都不管用,这时你可在FLASH旁的空白地方按鼠标右键(注意不能在FLASH上点哦),然后点‘查看源文件’,这时会出现一个记事本的框框,再点击‘编辑’,按‘查找’,在‘查找内容’中键入‘.swf’(注意swf前有一小点),然后把找到的.swf及前面到http://的地址复制粘贴就OK了!

高级篇:

许多网站即使你找到了源文件里的swf,也不知道地址,WHY? 因为他们使用绝对路径!只在HTML里链接根目录下文件。(做网页的有点阴险吧,hoho )这个时候,简单,把SWF前的那个绝对路径复制下来,/xxx/xxx/xxx.swf 然后粘贴到这个站点后就好了。比如:www.win-club/xxx/xxx/xxx.swf
每个“/”就是一个目录。关键是看SWF文件存放在哪个目录下。一次不行,多试几次好啦~~(最笨的办法,一层目录,一层目录的粘贴复制呀。总会TRY出来的啦。

超级篇:

现在的FLASH以韩国的比较流行,但是韩国佬狡猾大大滴!我还在新加波的一些网站也遇到这种情况:他们的FLASH根本无法通过按右键的办法来打开记事本,因为你按右键后会发现没有查找源文件这一项,那么这时有两种方法:
1、在网站主页上有各个故事的小图标,鼠标指在小图标上按右键,然后按‘在新窗口中打开链接’,这时会在新窗口中播放FLASH,之后再重复第三篇高级篇中的方法就行了。
2、如按右键后无‘在新窗口中打开链接’这一项,那么就直接按左键点击小图标,这时将会弹出一个小窗口播放FLASH,这时在键盘上按ctrl+n,则将会打开一个新的窗口播放FLASH,然后再重复第三篇高级篇中的方法就行了。

上面纯属一堆废话……

想要把喜欢的Flash存到硬盘里去,最简单的办法就是先看一遍Flash,然后再到C:\Documents and Settings\用户名\Local Settings\Temporary Internet Files去找到那个.swf文件,将其拷贝到其他磁盘中去就是了

分类: webapp 标签:

为你的wordpress评论框添加个性背景图片

2011年3月25日 1 条评论

评论框里面插入背景图片

一直也想自己给博客评论框弄的好看点,至少也会单调,弄出点个性还是不错滴,看到菠萝筐大哥很早就弄上了这个背景图片,不过他现在换了个主题,以前也是用和我一样的inove主题。

他的方法很简单,就简单的几个步骤,你肯定会的,下面是具体做法:

找到你所用风格的评论所在文件,我用的也是M12的iNove风格,评论文件就comment.php,打开此文件,发现评论框是用textarea代码来控制,并且textarea文本区域对应的CSS样式表ID为comment,这样我们就到主题样式表style.css里找到#comment代码,这个就是定义评论框的样式的,我们发现原来的代码为:

#comment {width:601px;}

这时,我们就可以通过改这个代码来实现给评论框添加上背景图片,添加后完整代码如下:

#comment {width:601px;background-image:url(img/comment-bg.gif);background-repeat:no-repeat;background-position:right bottom;}

下面对以上代码简单介绍:

width:是定义评论框的宽度;

background-image:url(图片地址),这里的图片可以绝对地址,也可以是相对地址,相对地址是相对style.css文件的,我就是用的相对地址。

background-repeat:no-repeat; 定义图片是不是重复;

background-position:right bottom; 定义图片对齐方式,这里是向右、底对齐。

之后你做个图片上传到你的空间,图片地址要和设置地址一致,建议图片宽度不要大于文本区域宽度,高度在200以内。我做的图是590*100px的,不过你要根据自己的主题评论框大小制作图片。

还有我发现用gif输出的图片质量很低,不过小点的页面打开快点,也就罢了,凑合着用吧~

分类: WordPress 标签: ,

wordpress评论中显示自己的头像

2011年3月25日 1 条评论

1. 打开http://en.gravatar.com/site/signup,在输入框中输入以后评论时需要用到的邮箱,然后点击“Signup”;

2. Gravatar会给你填写的邮箱发一封邮件要求激活。找到这封邮箱,点击其中的激活链接,在新打开的页面中输入你的用户名和密码,然后点击“Signup”。注意,用户名只能用小写字母和数字!

3. 这时,页面会跳转到新的一页,如下图。点击图中红线框出的“Add one by clicking here”为自己添加头像。

gravatar头像

4. 你可以选择本机或者网络上或者直接拍一张或者之前已经上传的图片作为你的头像。

5. 选好图片后,在Gravatar的网页中进行适当的切割,可以放大缩小调整位置,只要是正方形就可以,选择的时候也最好挑选正方形的图片!

6. 大小调整好之后,提交,OK啦!

7. 你还可以重复以上3—6步继续添加头像。

PS: Gravatar是WordPress同属的母公司Automattic推出的网络服务,可以提供给网友设置自己的头像,一般提供给WordPress 的架站者使用。

gravatar头像

后台定义你的WordPress评论图像类型   后台—设置—-讨论里面

gravatar头像

评论测试

gravatar

再次查看头像

WordPress评论自定义头像

分类: WordPress 标签: ,

Fatal error: Out of memory (allocated 解决办法

2011年3月25日 没有评论

Fatal error: Out of memory (allocated 786432) (tried to allocate 98304 bytes) in H:\freehost\zhengbao2\web\includes\lib_common.php on line 744

疑问:786432 是指786432bytes?即:768MB 98304 bytes=96MB 那0.75M是怎么算出来的。

正确答案:786432bytes=768KB=0.75MB 98304bytes=96KB=0.09MB ?

最小是位 <其次字节(byte)<KB<MB<GB<TB
一个字节 =8位
1KB=1024B(字节)
1MB=1024KB
1GB=1024MB
1TB=1024GB

千,1KB=2的10次方=1024B,
兆,1MB=2的20次方=1024*1024B=1024KB,
吉,1GB=2的30次方=1024*1024*1024B=1024MB,
太,1TB=2的40次方=1024*1024*1024*1024B=1024GB,
拍,1PB=2的50次方=1024*1024*1024*1024*1024B=1024TB,
艾,1EB=2的60次方=1024*1024*1024*1024*1024*1024B=1024PB,
泽,1ZB=2的70次方=1024*1024*1024*1024*1024*1024*1024B=1024EB,
尧,1YB=2的80次方=1024*1024*1024*1024*1024*1024*1024*1024B=1024ZB.

今天一个客户的网站出现这样的错误。程序是PHP的。经百度了一下。说明内存不足。中文件翻译的意思是:内存不足(分配786432)(尝试分配98304字节)

意思是尝试分配98MB的内存。但一般php设置为只允许给php程序分配 0.75M内存

解决办法:打开php.ini 修改memory_limit = 的这行
依照服务器配置进行调整
配置的内存使用大小修改后重启iis/apache
问题解决^^

PHP5.2.3-win32这个版本有个非常严重的bug,那就是最大内存设置成1024M,但是PHP实际返回的只有2M,经常返回下面的错误:

PHP Fatal error: Out of memory (allocated 1048576) (tried to allocate 393216 bytes)
PHP Fatal error: Out of memory (allocated 1048576) (tried to allocate 393216 bytes)
PHP Fatal error: Out of memory (allocated 1048576) (tried to allocate 393216 bytes)
PHP Fatal error: Out of memory (allocated 1048576) (tried to allocate 393216 bytes)
PHP Fatal error: Out of memory (allocated 786432) (tried to allocate 393216 bytes)
PHP Fatal error: Out of memory (allocated 1310720) (tried to allocate 393216 bytes)

这是官方的bug报告,该bug只出现于windows版本,linux版本没有这个bug。看来只能等下一次升级的时候修复了。 PHP5.2.3-win32 我的是PHP5.2.8-win32 怎么还是会偶尔出现?

分类: PHP 标签:

产品版本发布基本流程

2011年3月25日 1 条评论

版本发布流程

项目分类及项目经理/负责人:

XX:

XXX:

XXXX:

XXXXX:

软件版本命名规则及发布流程 

相关定义:

  1. 版本:软件或硬件的设计结果;
  2. 发布:指该版本的软件提交给除设计者外的其它人使用时的行为。这些行为包括在软件测试、软件工程试用、软件正式商用对外提交设计结果的行为;

适用范围:

底层软件的版本命名及发布;

涉及岗位:

1、  设计工程师:软件设计者

2、  版本管理员:软件版本的归档资料是否符合规定的审查者,版本管理软件(VSS)的操作者;

3、  项目经理:版本能否提交的审批者;

4、测试工程师:设计验证的执行者

版本命名规则

       设计的任何一次修改,均应形成新的版本编号;

规则:

×××(1)_×(2)_×.××(3)

说明:

(1)、设计名称:由字母及数字组成;一次彻底的重构可以更换新的名字,如IIP1,IIP2;

(2)、阶段编号:A-研发阶段;B-软件试用阶段;R-软件商用阶段;阶段的定义如下,其中质量问题严重级别(A、B、C、D)的定义参见《研发质量管理办法》

阶段定义 已发现A类质量问题解决率 已发现B类质量问题解决率 已发现C类质量问题解决率 已发现D类质量问题解决率
A阶段 不限 不限 不限 不限
B阶段 100% 50% 不限 不限
R阶段 100% 100% 50% 不限

       注:版本发布后,新发现的质量问不会影响到已有的版本编号,但是会影响到版本编号的升级;例如SDP_B_2.01发布后,新发现了A类质量问题,则在该问题解决前是不能升级到SDP_R_1.00的。只能在SDP_B_*.**系列中升级。

软件发布内容(必须):

1、  源代码及工程文件:设计工程师提供;

2、  版本说明:设计工程师提供;必须包含以下内容:

a)         提交时间

b)        适用硬件版本

c)         开发环境(编译器版本)

d)        更改内容:首次设计可以为空

e)         提交者

3、  编译结果:版本管理员提供;根据内容1编译的结果;

4、  测试报告:测试工程师提供;模板参见《研发质量管理办法》,必须包括以下内容:

a)         测试硬件版本

b)        测试项(用例)

c)         测试方法

d)        测试结果

已知质量问题(包括硬件部分

版本发布流程

1、  设计:设计工程师执行;

2、  白盒测试:测试工程师(通常是研发人员自己)执行;

3、  发布资格审批:项目经理执行;通过转向4,不通过转向1;

4、  资料齐套:设计工程师执行;

5、  发布内容审批:版本管理员执行;通过转向6,不通过转向4;

6、  入库:版本管理员执行;

7、  黑盒测试:测试工程师(测试部人员)执行

8、  发布结果审批:项目经理执行;不通过转向1,通过则本流程结束

分类: maintain 标签: ,

linux入侵检测系统构建-chkrootkit

2011年3月25日 没有评论

chkrootkit安装

前言

  所谓 rootkit ,是一类入侵者经常使用的工具。这类工具通常非常的隐秘、令用户不易察觉,通过这类工具,入侵者建立了一条能够常时入侵系统,或者说对系统进行实时控制的途径。所以,我们用自由软件 chkrootkit 来建立入侵监测系统,来保证对系统是否被安装了 rootkit 进行监测。

  chkrootkit 在监测 rootkit 是否被安装的过程中,需要使用到一些操作系统本身的命令。但不排除一种情况,那就是入侵者有针对性的已经将 chkrootkit 使用的系统命令也做修改,使得 chkrootkit 无法监测 rootkit ,从而达到即使系统安装了 chkrootkit 也无法检测出 rootkit 的存在,从而依然对系统有着控制的途径,而达到入侵的目的。那样的话,用 chkrootkit 构建入侵监测系统将失去任何意义。对此,我 们在操作系统刚被安装之后,或者说服务器开放之前,让 chkrootkit 就开始工作。而且,在服务器开放之前,备份 chkrootkit 使用的系统命 令,在一些必要的时候(怀疑系统命令已被修改的情况等等),让 chkrootkit 使用初始备份的系统命令进行工作。

安装chkrootkit

  首先来下载和安装 chkrootkit 工具。

[root@sample ~]# wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz ← 下载chkrootkit

–03:05:31– ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
=> chkrootkit.tar.gz'
Resolving ftp.pangeia.com.br... 200.239.53.35
Connecting to ftp.pangeia.com.br|200.239.53.35|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD /pub/seg/pac ... done.
==> PASV ... done. ==> RETR chkrootkit.tar.gz ... done.
Length: 37,140 (36K) (unauthoritative)

100%[====================================>] 37,140 5.67K/s ETA 00:00

03:05:46 (5.30 KB/s) - chkrootkit.tar.gz’ saved [37140]

[root@sample ~]# tar zxvf chkrootkit.tar.gz  ← 展开被压缩的源代码

[root@sample ~]# cd chkrootkit*  ← 进入chkrootkit源代码的目录

[root@sample chkrootkit-0.46a]# make sense  ← 编译

[root@sample chkrootkit-0.46a]# cd ..  ← 返回上层目录

[root@sample ~]# cp -r chkrootkit-* /usr/local/chkrootkit  ← 复制编译后文件所在的目录到指定位置

[root@sample ~]# rm -rf chkrootkit*  ← 删除遗留的源代码目录及相关文件

 

测试chkrootkit

  然后测试 chkrootkit 是否能够正常运行。

[root@sample ~]# cd /usr/local/chkrootkit  ← 进入chkrootkit的目录

[root@sample chkrootkit]# ./chkrootkit | grep INFECTED  ← 测试运行chkrootkit
稍等片刻…如果没有显示“INFECTED”字样,而直接出现命令行提示符,说明一切OK!

[root@sample chkrootkit]# cd   ← 回到root用户目录

 

让 chkrootkit 的监测自动化

  用Shell Script编写一段脚本,通过这个脚本让chkrootkit的监测自动化。如有rootkit被发现的时候,发送邮件通知root用户,并且将运行结果保存在/var/log/messages文件中。

[root@sample ~]# vi chkrootkit  ← 建立chkrootkit自动运行脚本

#!/bin/bash

PATH=/usr/bin:/bin

TMPLOG=mktemp

# Run the chkrootkit
/usr/local/chkrootkit/chkrootkit > $TMPLOG

# Output the log
cat $TMPLOG | logger -t chkrootkit

# bindshe of SMTPSllHow to do some wrongs
if [ ! -z “$(grep 465 $TMPLOG)” ] && \
[ -z $(/usr/sbin/lsof -i:465|grep bindshell) ]; then
sed -i ‘/465/d’ $TMPLOG
fi

# If the rootkit have been found,mail root
[ ! -z “$(grep INFECTED $TMPLOG)” ] && \
grep INFECTED $TMPLOG | mail -s “chkrootkit report in hostname” root

rm -f $TMPLOG

[root@sample ~]# chmod 700 chkrootkit  ← 赋予脚本可被执行的权限

[root@sample ~]# mv chkrootkit /etc/cron.daily/  ← 将脚本移动到每天自动运行的目录中

 

 chkrootkit 相关的系统命令的备份

  如前言所述,当chkrootkit使用的系统命令被入侵者更改后,chkrootkit对 rootkit的监测将失效。所以,我们事前将chkrootkit使用的系统命令进行备份,在需要的时候使用备份的原始命令,让chkrootkit对 rootkit进行检测。

[root@sample ~]# mkdir /root/commands/  ← 建立暂时容纳命令备份的目录

[root@sample ~]# cp which --skip-alias awk cut echo egrep find head id ls netstat ps strings sed uname /root/commands/  ← (连续输入无换行)备份系统命令到建立好的目录

[root@sample ~]# /usr/local/chkrootkit/chkrootkit -p /root/commands|grep INFECTED  ← 用备份的命令运行chkrootkit

[root@sample ~]# tar cvf /root/commands.tar /root/commands/ ← 将命令打包

[root@sample ~]# gzip /root/commands.tar  ← 将打包的文件压缩
然后将压缩后的commands.tar.gz用SCP软件下载到安全的地方

[root@sample ~]# rm -rf commands*   ← 为安全起见,删除服务器端备份的系统命令及相关文件

  如果以后想通过备份的原始系统命令来运行chkrootkit的时候,只需用SCP软件将备份的命令打包压缩文件上传至服务器端已知位置并解压缩,然后运行在chkrootkit的时候指定相应的目录即可。例如,假设已经将备份上传至root用户目录的情况如下:

[root@sample ~]# tar zxvf /root/commands.tar.gz  ← 解开压缩的命令备份

[root@sample ~]# /usr/local/chkrootkit/chkrootkit -p /root/commands|grep INFECTED ← 用备份的命令运行chkrootkit

  然后在运行后删除相应遗留文件即可。

分类: safe 标签:

linux上远程桌面VNC安装详解

2011年3月25日 没有评论

linux远程桌面vnc安装

VNC简介:

虽然VNC 还有着在Linux下无法按热键呼出中文输入等等小小不足,但仍然无法阻止其在Linux系统中的地位。让我们看下它的魅力吧,首先,复制粘贴做的很随意。本机复制了,直接在远程机器里按粘贴即可。很方便的。

网络遥控技术是指由一部计算机(主控端)去控制另一部计算机(被控端),而且当主控端在控制端时,就如同用户亲自坐在被控端前操作一样,可以执行被控端的应用程序,及使用被控端的系统资源。

VNC(Virtual Network Computing)是一套由AT&T实验室所开发的可操控远程的计算机的软件,其采用了GPL授权条款,任何人都可免费取得该软件。VNC软件主要由两个部分组成:VNC server及VNC viewer。用户需先将VNC server安装在被控端的计算机上后,才能在主控端执行VNC viewer控制被控端。

(在windows中也由一套著名的网络遥控软件――Symantec公司推出的pcAnywhere。

VNC server与VNC viewer支持多种操作系统,如Unix系列(Unix,Linux,Solaris等),windows及MacOS,因此可将VNC server 及VNC viewer分别安装在不同的操作系统中进行控制。如果目前操作的主控端计算机没有安装VNC viewer,也可以通过一般的网页浏览器来控制被控端。

VNC运行的工作流程

(1) VNC客户端通过浏览器或VNC Viewer连接至VNC Server。

(2) VNC Server传送一对话窗口至客户端,要求输入连接密码,以及存取的VNC Server显示装置。

(3) 在客户端输入联机密码后,VNC Server验证客户端是否具有存取权限。

(4) 若是客户端通过VNC Server的验证,客户端即要求VNC Server显示桌面环境。

(5) VNC Server通过X Protocol 要求X Server将画面显示控制权交由VNC Server负责。

(6) VNC Server将来由 X Server的桌面环境利用VNC通信协议送至客户端,并且允许客户端控制VNC Server的桌面环境及输入装置。

VNC的安装与使用

本人的操作环境:被控端 Redhat9.0,主控端Windows XP。

1.下载VNC ServerVNC viewer.

VNC Server下载地址:http://www.Linuxeden.com/download/softdetail.php?softid=744

VNC viewer下载地址:http://download.pchome.net/php/dl.php?sid=2603

2.安装.

rpm –Uvh VNC-3.3.6-2.i386.rpm (如果是源代码请看包里的说明)

当下载了VNC的Linux版本后,可以解压文件到一个文件夹中,例如/home/VNC,然后复制文件VNCserver、VNCpasswd和XVNC到/usr/bin目录中。假如想要能够通过VNC服务器的整合Java界面远程控制Linux电脑,也得需去建立一个子目录/usr/local/VNC/classes。在建立此子目录之后,复制VNCJava.class文件到此目录中。(一般redhat 9.0自带以上文件,所以直接用终端执行就可以)。

在Fedora 8上直接YUM下,巨方便。我从来不看怎么安装,这步骤的。

3.Linux上启动VNC Server

执行VNCserver命令:

[root@Linux root]# VNCserver

You will require a password to access your desktops.

Password: —-为了不想任何人都可以任意遥控此计算机。因此当第1次启动VNC server时,会要求设置网络遥控的密码。这个就是你的登陆VNC的密码一定要够安全。好像哪里的文章上讲可以配置用户的。不过80%的人群不会习惯区分用户的。因为VNC可以虚拟N个桌面的。霍霍,配合Linux的用户很好很强大。

Creating default startup script /root/.VNC/xstartup

Starting applications specified in /root/.VNC/xstartup

Log file is /root/.VNC/Linux:1.log

(经上述步骤后,便已启动了VNC Server。如果你想要更改VNC Server的密码,只要执行VNCpasswd命令即可。)

4.在Microsoft Windows上运行VNC Viewer

直接运行“VNCviewer.exe”,系统会出现”Connection details”对话框。

在“Connection details”对话框中的“VNC server”文本框中输入VNC Server的IP地址(或主机名及显示装置编号,(请看3。在Linux上启动VNC server的这一行,New ‘X’ desktop is Linux:1 得到此信息),例如:192.168.0.1:1(冒号后面的1是执行VNC Server生成的显示装置编号),单击“OK”按钮后,VNC Server即会开始检查所输入的信息,若是信息错误,系统会出现“Failed to connect to server”的错误信息:若是信息正确,则会接着出现“VNC Authentication”对话框。

若是在“VNC Authentication”对话框中输入的密码正确,就可以成功地打开Linux的桌面窗口。

5. 从浏览器远程遥控。

启动VNC Server 后直接打开浏览器,在地址栏中输入被控端的网址或IP地址,并在网址后加上“:5800+显示编号”的端口号即可操控该计算机。

例如:http://192.168.0.1:5801 (如果显示编号为1,一般第一次设置的显示编号都是1,就用5800+1=5801。)

如果看到窗口,就说明你成功,在密码框输入密码,就能远程控制了。

没事谁用浏览器啊。。。。。无聊的一步

6.设置VNCserver启动变量:

为了使VNCserver在每次启动时保持不变的端口号(5901)

在/etc/rc.d/rc.local文件中添加命令:

rm -f /tmp/.X11-unix/X*

rm -f /.VNC/*.pid

rm -f /.VNC/*.log

这样,每次启机,系统会先把上次非正常关机时留下的临时文件删除。

8、结束VNC服务及远程桌面

VNCserver -kill :1

其它更详细的使用请用man查看。

VNC内定的窗口管理器是twm与大家使用的可能不同,通过修改VNC的配置文件可以更换为自己喜欢的,方法如下:

修改用户目录下的 .VNC/xstartup 文件

#!/bin/sh

[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources

xsetroot -solid grey

VNCconfig -iconic &

xterm -geometry 80×24+10+10 -ls -title “$VNCDESKTOP Desktop” &

twm &

将#!/bin/sh后面的内容全部注释掉,改成

~/.Xclients

保存文件

现在可以测试修改是否成功,先kill VNCserver服务

VNCserver -kill :

pa aux|grep XVNC

kill PID

重新启动VNCserver ,用VNCviewer连接远程桌面是不是已经变成自己喜欢的类型了。

在前面有VNC server 设置的文章里, 我们已经可以在一个Linux的服务器上运行VNCserver来进行远程访问了,但需要注意的是:

如果直接使用VNCviewer来进行访问,有两点不利因素:

1. 口令传输是明文,很容易被侦听到.

2. 防火墙需要打开59xx端口,这在通常的单位里是不可能的.

幸运的是,我们有ssh这个强大的工具,象X11 Forwarding(另文论述),我们可以使用ssh隧道来保护通讯过程,下面就进行简单介绍.

假设VNCserver运行在服务器 myserver (ip地址为:192.168.x.x)的屏幕1,也就是侦听 192.168.x.x:5901, 用户名为foo

情形一: VNC客户端为Linux

这种情形很简单,一般的Linux发行版本里面都默认安装了ssh套件.

1. 用ssh登录到服务器

ssh -L 5901:localhost:5901 -l foo myserver

或者直接用ip地址

ssh -L 5901:localhost:5901 -l foo 192.168.x.x

2. 在本机的另外开的终端上,运行VNCviewer (或其它的类似工具)

VNCviewer localhost:1

情形二: VNC客户端为windows

1. 下载一个ssh客户端,个人推荐putty,只有一个程序,不需要安装,简单而功能齐全. 到这里下载http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

下载putty.exe到桌面上直接运行即可。

2. 运行putty,输入服务器的ip地址,输入一个名字,这里myserver作为session的名字,按save保存。见附图一

3. 单击对话框左边的tunnels来选择相关设置,在source port里输入5901,在Destination里输入localhost:5901,按Add添加,如附图二

4. 单击左边session,回到session设置,按save重新保存。按open即可登录到服务器。

5. 运行VNC-viewer (如果没有,到这里下载http://www.realVNC.com/download.html,只要一个 exe的文件就行),在Server里输入localhost:1,见附图三, 输入口令后一个Linux的桌面就会出现在windows里,并且是非常安全的,Cool 能玩到这步骤的都是我崇拜的对象。哈

VNC Q&A

QVNC 是什么?

VNC有两种定义:一种是软件、一种是协议

VNC是 Virtual Network Computing

软件是指是GNU public license下的符合VNC协议的共享软件,.最开始是AT&T的英国实验室 [现在这帮人成立了RealVNC公司] 开发的. 主要是让计算机可以远程控制另外一台计算机。现在很多公司在VNC的基础上开发出了各种各样的VNC. 能够运行在各个操作系统上。

VNC协议。是指控制方和被控制计算机之间的通讯协议。VNC用的协议叫RFB .[很多人不知道吧] RFB 的协议在这里。 http://realVNC.com/docs/rfbproto.pdf

QVNC 的优点?

第一、VNC的最大优点就是跨平台。因为不同的操作系统的界面处理方法都不一样,所以就有人开发了不同的VNC版本,因为都符合VNC协议,所以兼容性比较好。还有人做了Java版的客户端,在能够运行JVM的机器上都能运行客户端。

[ 当然微软/Uinx/Linux等也有自己的解决方案,如Terminal/PcAnywhere/Xceed等等。但是他们不开放代码…]

第二、版本多,开放源代码,每个人都可以不断改进它。

[这是开放的好处]

第三、速度。速度还是挺快的,如果你的网络带宽好的话。

Q. VNC PK MS 终端

VNC : 不用Windows的账户/密码。这样对于一次性的用户很方便。否则每次要在Windows里面加用户可是很不安全的阿。

Windows: 对于Windows Server, 可以多用户登录使用。VNC只能两个人(控制和被控制的计算机)使用。

VNC: 可以让控制和被控制的屏幕同时显示、操作。这样可以做Demo,共享交流等。Windows 没这个功能吧!

Q. 如何以图形界面登录被控端?

编辑~/.VNC/xstartup

#!/bin/sh

# Uncomment the following two lines for normal desktop:

# unset SESSION_MANAGER

# exec /etc/X11/xinit/xinitrc

[ -x /etc/VNC/xstartup ] && exec /etc/VNC/xstartup

[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources

xsetroot -solid grey

VNCconfig -iconic &

#xterm -geometry 80×24+10+10 -ls -title “$VNCDESKTOP Desktop” &

gnome-session & 建议选这个。。。其他的都给它前面加上#

startkde &

twm &

gnome-session是启动Gnome图形界面;startkde是启动KDE图形界面;twm是启动文本界面。三者选其一。

Q. 如何开机时自动启动VNC服务

打开“系统设置”–>”服务器设置”–>”服务”,勾选上VNCserver,“保存”。

修改 /etc/sysconfig/VNCservers

VNCSERVERS=”1:root 2:phred 3:sysadmin” 1代表“桌面1”,root代表用户名;可同时启动多个用户桌面

VNCSERVERARGS[1]=”-geometry 800×600 -alwaysshared -depth 24″

-alwaysshared代表允许多用户同时登录 -depth代为色深,参数有8,16,24,32。

这步有点高深了。。。也复杂点,其实客户端可以完成80%的配置。而我有更好的方法,因为SSH启动是默认的。SSH上去打开VNC就行了。也不过一条命令。更多的是安全。

Q.为什么连接后,不能显示桌面,而只有一个Terminal窗口?

试着修改/root/.VNC/xstartup,把最后一行 twm& 改成 gnome-session& or kde&(据说KDE在目前的VNC Viewer上的表现不太稳定)

Q.为什么重新启动VNC Server后,连接不上了?

因为重新启动VNC Server时,系统会指定一个新的显示编号,需使用此新的编号,否则就无法连接.

查看VNC已启用的桌面号及监听进程

[root@Linux /]# netstat -tlnp |grep VNC

VNCserver 命令带有一些很有用的参数,用VNCserver –help 查看。

简单解释一下:

VNCserver [:] [-name ] [-geometry x] [-depth ]

[-pixelformat format]

VNCserver -kill :display

:

VNC服务的display号,可以自行指定,尽量不要使用系统默认的以保证安全,必须为非0的正整数

VNCserver :99

使用时必须输入正确的display号才能连接;用浏览器要在端口号加上display号,默认端口5800,远程连接输入 XXX.XXX.XXX.XXX:5899

-name 指定VNCserver桌面名字

比如要让名字显示为 “红帽”

VNCserver -name 红帽

-geometry x指定显示桌面的分辨率,默认为1024×768

VNCserver -geometry 800×600

这个命令实际中很有用,例如本地分辨率为1024×768 如果不设定远程VNC服务分辨率就会造成桌面显示不全的问题。

-depth 指定显示颜色,设定范围8~32

VNCserver -depth 16

用16bits颜色显示

-pixelformat 指定色素格式与-depth大致相同,只是表示方法不一样

VNCserver -pixelformat RGB888

用24bits颜色显示

VNCserver -kill :display

分类: linux 标签:

oracle安装配置

2011年3月25日 没有评论

oracle安装全解

1     准备环境。… 1

1.1     在Redhat上配置CentOS的yum.. 1

1.2     VNC安装… 1

1.3     启动vnc. 1

1.4     修改字体… 1

1.5     Oracle安装… 1

1.6     检查内存和磁盘… 1

1.7     OS参数要求vi /etc/sysctl.conf , 在行末添加以下内容… 1

1.8     vi /etc/security/limits.conf 行末添加以下内容… 2

1.9     vi /etc/pam.d/login 行末添加以下内容… 2

1.10   vi /etc/selinux/config 确保以下内容… 2

1.11   vi /etc/profile,在最后加入:… 2

1.12       复制 oracle 10.2.0.1安装文件过来… 2

1.13       因为默认rhel5.2不支持10.2,0.1,修改安装文件… 2

1.14       修改目录权限… 2

2     Oracle安装… 3

2.1     创建和配置用户… 3

2.2     创建安装目录… 3

2.3     $ vi ./.bash_profile. 3

2.4     安装… 3

 

1       准备环境。

1.1 Redhat上配置CentOSyum

修改配置文件

#vi /etc/yum.repos.d/rhel-debuginfo.repo

修改如下

baseurl=http://centos.ustc.edu.cn/centos/5/os/i386/

enabled=1

gpgcheck=0

1.2 VNC安装

安装

#yum groupinstall “X Window System”

(redhat平台可能会出现安装包冲突的问题,用rpm –e xxxxx –nodeps卸载冲突的rpm包)

#yum install vnc

#yum install vnc-server

1.3 启动vnc

#vncserver (第一次需要输入密码)

然后访问http://vncserver_ip:5801/

1.4 修改字体

(redhat平台可能会出现启动时出现字体找不到的问题,需要修改vncserver文件)

#chmod u+w /usr/local/bin/vncserver

#vi /usr/local/bin/vncserver

找到

#$cmd .= ” -fp /usr/lib/X11/fonts/misc/,/usr/lib /X11/fonts/75dpi/”;

修改为

$cmd .= ” -fp /usr/share/X11/fonts/misc/,/usr/share /X11/fonts/75dpi/”;

停止

#vncserver -kill :1

1.5 Oracle安装

查询所需安装包是否完整(缺少补啥)

rpm -q gcc make binutils openmotif setarch compat-db compat-gcc compat-gcc-c++ compat-libstdc++ compat-libstdc++-devel  xorg-x11-deprecated-libs

1.6 检查内存和磁盘

# grep MemTotal /proc/meminfo

MemTotal:512236 kB

# grep SwapTotal /proc/meminfo

SwapTotal:1574360 kB

#df -h

1.7 OS参数要求vi /etc/sysctl.conf , 在行末添加以下内容

#use for oracle

kernel.shmall = 2097152

kernel.shmmax = 2147483648

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

fs.file-max = 65536

net.ipv4.ip_local_port_range = 1024 65000

net.core.rmem_default=262144

net.core.rmem_max=262144

net.core.wmem_default=262144

net.core.wmem_max=262144

再运行sysctl -p应用以上参数

1.8 vi /etc/security/limits.conf 行末添加以下内容

#use for oracle

* soft nproc 2047

* hard nproc 16384

* soft nofile 1024

* hard nofile 65536

1.9 vi /etc/pam.d/login 行末添加以下内容

session required pam_limits.so

1.10 vi /etc/selinux/config 确保以下内容

SELINUX=disabled

关闭SELIINUX

1.11 vi /etc/profile,在最后加入:

if [ $USER = “oracle” ]; then

if [ $SHELL = “/bin/ksh” ]; then

ulimit -p 16384

ulimit -n 65536

else

ulimit -u 16384 -n 65536

fi

fi

1.12 复制 oracle 10.2.0.1安装文件过来

1.13 因为默认rhel5.2不支持10.2,0.1,修改安装文件

# vi /10201_database_linux32/database/install/oraparam.ini

### #[Certified Versions]

Linux=redhat-3,SuSE-9,redhat-4,rhel-5.2,UnitedLinux-1.0,asianux-1,asianux-2]

再添加

[Linux-rhel-5.0-optional]

TEMP_SPACE=80

SWAP_SPACE=150

MIN_DISPLAY_COLORS=256

1.14 修改目录权限

#chmod -R 777 10201_database_linux32

2       Oracle安装

2.1 创建和配置用户

#/usr/sbin/groupadd oracle

#/usr/sbin/useradd -m -g oracle -G oracle

#id oracle

2.2 创建安装目录

#mkdir /usr/local/oracle

#chown oracle.oracle /usr/local/oracle

# chmod -R 775 /usr/local/oracle

修改.bash_profile文件

#su – oracle

2.3 $ vi ./.bash_profile

添加

export ORACLE_HOME=/usr/local/oracle

export ORACLE_SID=orcl

export PATH=$PATH:$ORACLE_HOME/bin

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib

export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

export LANG=AMERICAN_AMERICA.ZHS16GBK

export ORACLE_TERM=xterm

export TNS_ADMIN=$ORACLE_HOME/network/admin

export ORA_NLS10=$ORACLE_HOME/nls/data

2.4 安装

#su – oracle

$ export DISPLAY=0:0

$ export LANG=en_US

$vncserver    (注意要在oracle用户下运行vncserver)

$runInstaller –ignoreSysPrereqs

在实际的应用中,有时候工作数据库需要重新启动。

1. 停应用层的各种程序

2. 停Oralce的监听进程

$ lsnrctl stop

3. 在独占的系统用户下,备份控制文件:

$ sqlplus “/as sysdba”

SQL> alter database backup controlfile to trace;

4. 在独占的系统用户下,手工切换重作日志文件,确保当前已修改过的数据存入文件:

SQL> alter system switch logfile;

5. 在独占的系统用户下,运行下面SQL语句,生成杀数据库用户连接的kill_all_session.sql文件:

SQL> set head off;

SQL> set feedback off;

SQL> set newpage none;

SQL> spool ./kill_session.sql

SQL> select ‘alter system kill session ”’||sid||’,’||serial#||”’;’ from v$session where username is  not null;

SQL> spool off;

6. 在独占的系统用户下,执行杀数据库用户连接的kill_session.sql文件

SQL> @./kill_session.sql

7. 在独占的系统用户下,用immediate方式关闭数据库:

SQL> shutdown immediate;

或者

SVRMGRL> shutdown immediate;

8. 启动oralce的监听进程

$ lsnrctl start

9. 进入独占的系统用户下,启动Oralce数据库

$ sqlplus /nolog

SQL> connect / as sysdba

SQL> startup;

或者

$ svrmgrl

SVRMGRL> connect internal;

SVRMGRL> startup;

分类: DB 标签:

mysql安装-配置-优化-备份-主从

2011年3月25日 没有评论

mysql安装详解 

     

第1章       安装… 4

1.1.     LINUX安装… 4

1.2.     复制(Replication)设置… 4

第2章       维护管理… 7

2.1.     常用系统命令… 7

2.2.     常用MySQL命令… 7

2.3.     密码和权限… 8

2.4.     修改连接方式… 8

2.5.     连接管理… 9

2.6.     备份恢复… 9

2.7.     导入导出… 10

2.8.     日志… 11

2.9.     管理MyISAM数据表… 11

2.10.       管理InnoDB数据表… 12

2.11.       索引… 12

2.12.       存储过程… 12

2.13.       优化… 13

第3章       FAQ.. 14

3.1.     连接错误… 14

3.2.     读写优化… 14

 第1章     安装

1.1.   LINUX安装

       从http://dev.mysql.com/downloads/mysql/5.0.html 下载5.0.x最新版本,可以选择专用于RHEL AS 4的RPM包:

# rpm -ivh MySQL-server-community-5.0.51a-0.rhel4.i386.rpm  (自动设置自启动,service mysqld start)# rpm -ivh MySQL-client-community-5.0.51a-0.rhel4.i386.rpm# rpm -ivh MySQL-devel-community-5.0.51a-0.rhel4.i386.rpm (安装开发头文件等,第三方程序需要,比如要编译PHP支持MYSQL就需要)

# MySQL-shared-compat-5.0.51a-0.rhel4.i386.rpm (选择安装,不一定必须)

# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf    (拷贝配置文件样本)

 

       有时候安装时会遇到包依赖的问题,比如安装server可能会提示需要依赖perl-DBI-1.40-5.i386.rpm包,这时可以使用参数不理会依赖性:

# rpm -ivh –nodeps MySQL-server-community-5.0.51a-0.rhel4.i386.rpm

 

1.2.   复制(Replication)设置

Mysql的Replication复制有两个模式:主从(Master->Slave)和双机互相备份。

主从(Master->Slave)模式安装,SrvA为主SrvB为辅,两者MYSQL版本最好一致或者Slave版本比Master新:

SrvA MYSQL> create database shopdb;SrvA MYSQL> GRANT FILE ON *.* TO repuser@’192.168.1.11′ IDENTIFIED BY ‘reppass’;添加Slave连接Master的MYSQL帐号)SrvA MYSQL> GRANT REPLICATION SLAVE ON *.* TO repuser@’192.168.1.11′ IDENTIFIED BY ‘reppass’;更加严格更小权限的一种设置 

SrvA MYSQL> flush privileges;

SrvA # vi /etc/my.cnf

server-id = 1

log-bin=xxx(这里最好指定文件名,否则会自动使用主机名,而将来主机名如果被修改,将导致复制错误

binlog-do-db=shopdb(指定具体需要binlog的数据库名称

#binlog-ignore-db=mysql

…….重启SrvA MYSQL………

SrvA MYSQL> show master status;查看是否运行在Master模式

SrvA MYSQL> flush tables with read lock;锁住表禁止写入后拷贝数据,也可以停止MYSQL再拷贝数据

SrvA # cp -r shopdb shopdbbackup拷贝MYSQL的shopdb库的数据文件

SrvA MYSQL> unlock tables;拷贝数据完成后解除表锁定

SrvB # cp -r shopdbbackup shopdb将SrvA上的shopdb库数据文件覆盖到SrvB 

SrvB # chown -Rf mysql.mysql shopdb设置数据文件正确的宿主属性 

SrvB # vi /etc/my.cnf

server-id = 2

master-host = 192.168.1.10

master-user = repuser

master-password = reppass

master-port = 3306

master-connect-retry = 10

replicate-do-db = shopdb

…….重启SrvB MYSQL………

SrvB MYSQL> show slave status;查看是否运行在Slave模式

       主从(Master->Slave)模式中,Slave可多个。整个复制过程由三个进程控制,分别是Master上的IO进程、Slave上的IO进程和Slave上的SQL进程。Slave上的IO进程连接上Master请求日志文件指定位置(或最开始)之后的日志内容;Master上的IO进程返回给Slave的IO进程包括bin-log文件名称、本次读取到bin-log的最后位置、bin-log的内容;Slave的IO进程接收数据后依次添加到Slave端的relay-log文件最末端,并将取到的Master端bin-log文件名和最后位置记录到master-info文件中;Slave上的SQL进程检测到relay-log新增内容后,解析执行。

       双机互备模式,比如SrvC既是SrvA的Slave,又作为SrvD的Master,异地两套应用系统备份可以使用这种模式:

SrvC # vi /etc/my.cnfserver-id = 3master-host = 192.168.1.10

master-user = repuser

master-password = reppass

master-port = 3306

master-connect-retry = 10

replicate-do-db = shopdb

log-bin

log-slave-updates(将作为Slave时更新的数据写入到bin-log中,否则SrvD将丢失数据

slave-skip-errors=all

       复制Replicate可能会发生同步错误,如下:

ERROR: 1062  Duplicate entry ‘1’ for key 1091125  9:52:03 Slave: Error ‘Duplicate entry ‘1’ for key 1′ on query. Default database: ‘yyyy’. Query: ‘INSERT INTO xxxxdetail_20090801 VALUES(1, ‘Îߺþ’, ‘г¿Íø°É’, ‘aaaaa’, ‘7777’, ‘212.102.27.210’)’, Error_code: 1062091125  9:52:03 Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with “SLAVE START”. We stopped at log ‘mysql-bin.008’ position 78361623

       两种方法解决以上报错:

# vi /etc/my.cnf   Slave上,需要重启MYSQL)slave-skip-errors=1062(忽略此报错,跳过后继续同步,不会因为此错误使同步停下来)MYSQL > set global sql_slave_skip_counter=1; (忽略这一句同步语句,可执行多次,好处是不像上面方法一需要重启MYSQL

      

第2章     维护管理

2.1.   常用系统命令

# mysql -uroot   (空密码本地连接)# mysql -uroot -p   (交互方式输入密码) # mysql -uroot –password=xxx  (命令行中输入密码)

# mysql -uroot -S /var/lib/mysql/mysql.sock  (指定套接字,不在默认/tmp/mysql.sock或者mysql_multi情况下)

# mysqladmin ping   (数据库的PING)

mysqld is alive

# mysql -e ‘show processlist’   (-e无交互执行SQL语句)

+——+——-+—————–+———+———+——+——-+——————+

| Id   | User  | Host            | db      | Command | Time | State | Info             |

+——+——-+—————–+———+———+——+——-+——————+

|    2 | green | localhost:43789 | greendb | Sleep   |    7 | NULL  | NULL             |

| 7141 | root  | localhost       | NULL    | Query   |    0 | NULL  | show processlist |

+——+——-+—————–+———+———+——+——-+——————+

# mysql -e ‘show full processlist’   (更详细?)

# mysqladmin processlist   (与上面命令效果相同)

2.2.   常用MySQL命令

mysql> show variables like version; (版本信息)mysql> select @@version; (版本信息)mysql> show variables like ‘have%’; (支持哪些功能)

mysql> status; (查询MySQL状态)

mysql> show processlist; (查询MySQL的连接状态)

mysql> tee /tmp/mysql.log; (将屏幕输出到文件中)

mysql> notee; (关闭上面的功能)

mysql> source /tmp/x.sql; (执行文件中的SQL语句)

# mysql dbname < /tmp/x.sql (跟上面这句同义)

mysql> show warnings(显示最后一次的报警信息)

mysql> show databases(显示本用户可访问的所有数据库清单)

mysql> show tables(显示本用户可访问的所有数据表清单)

mysql> show columns from mysql.user(显示本用户可访问的所有数据列清单)

mysql> show index from mysql.user(显示本用户可访问的所有索引清单)

2.3.   密码和权限

# mysql -urootmysql> use mysqlmysql> delete from user where user=”;   (把空用户名的删除)

mysql> update user set password=password(‘1234!@#$’) where user=’root’;   (把root默认空口令修改掉)

mysql> GRANT ALL ON dbname.* TO dbuser@localhost IDENTIFIED BY ‘1234!@#$’;   (新建用户并赋予权限,ALL是指GRANT之外的所有权限)

mysql> GRANT USAGE ON dbname.* TO(拒绝所有权限) 

mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON dbname.* TO

mysql> GRANT LOCK TABLES,CREATE TEMPORARY TABLES,EXECUTE ON dbname.* TO(更细分的一些权限) 

mysql> GRANT FILE ON dbname.* TO(INTO OUTFILE,LOAD DATA等需要) 

mysql> GRANT PROCESS ON dbname.* TO(show processlist时可以看到其他用户的进程,否则只能对自己) 

mysql> GRANT SUPER ON dbname.* TO(可以KILL其他用户的进程,否则只能对自己) 

mysql> flush privileges;

# mysqladmin -uroot password ‘1234!@#$’

 

[mysqld]

old-passwords(4.1版本之后采用了新的加密算法,此选项沿用老的算法)

C:\> mysqld-nt.exe –skip-grant-tables  (通过此参数运行mysql无需认证即可登录,通过此方法找回root的密码)

[mysqld]

skip-grant-tables

2.4.   修改连接方式

可以将MYSQL的监听IP修改为LOCALHOST,修改my.ini或者/etc/my.cnf文件:

[mysqld]port = 3306bind = 127.0.0.1(仅监听本地TCP 3306端口

#skip-networking(禁用TCP/IP 3306

socket = /var/lib/mysql/mysql.sock(LINUX下可通过套接字文件连接

#enable-named-pipes(WINDOWS下可用命名管道连接

#socket = MySQL(WINDOWS下命名管道的名字

#shared_memory(WINDOWS下可用共享内存连接

#shared_memory_base_name = MYSQL(WINDOWS下共享内存的名字

2.5.   连接管理

查看当前的MYSQL Session连接,然后kill断开连接:

mysql> SELECT concat(‘KILL ‘,id,’;’) FROM information_schema.processlist WHERE user=’root’;+————————+| concat(‘KILL ‘,id,’;’) |

+————————+

| KILL 3101;             |

| KILL 2946;             |

+————————+

2 rows IN SET (0.00 sec)

mysql> SELECT concat(‘KILL ‘,id,’;’) FROM information_schema.processlist WHERE user=’root’ INTO OUTFILE ‘/tmp/a.txt’;

Query OK, 2 rows affected (0.00 sec)

mysql> source /tmp/a.txt;

Query OK, 0 rows affected (0.00 sec)

2.6.   备份恢复

# mysqldump dbname > backupfile.sql# mysqldump dbname tablesname > backupfile.sql# mysqldump –all-databases > backupfile.sql备份所有数据库 

# mysqldump –lock-all-tables dbname > backupfile.sql针对MyISAM,由于mysqldump备份前对表逐个读操作锁定,表A与表B备份时间不同而导致其中一条关联数据被修改,最好的方法是备份前锁定所有的表

# mysqldump –single-transaction dbname > backupfile.sql针对InnoDB,LOCK表解决不了任何问题,必须使用事务

# mysqldump mysql proc > backupproc.sqlmysqldump无法对指定的单个数据库备份其存储过程,要么就备份所有数据库的存储过程

# mysqldump “–where=db=’dbname'” –no-create-info mysql proc > backupproc.sql可以用where细分出来,必须禁用CREATE TABLES命令,否则会导致恢复是破坏

# myback.pl

调用mysqldump的PERL脚本http://www.mswanson.com/跟mysqlhotcopy类似

# mysql dbname < backupfile.sql恢复数据库

mysql> use dbname

mysql> source /tmp/backupfile.sql;这种方式需要权限,并事先指定DBNAME

# mysql –default-character-set=gbk dbname < backupfile.sql

新版本mysqldump使用UTF-8字符集来生成备份文件,如果是老版本mysqldump生成的备份文件,在迁移到新系统中需要明确指定字符集

# mysqlhotcopy dbname1 dbname2 dbname3 /backup 工作原理是先给数据库加一个读操作锁,再FLUSH TABLES把内存中的修改写入硬盘,再把数据库文件复制;仅适用于MyISAM不适用于InnoDB

# mysqlhotcopy –noindices dbname1 dbname2 dbname3 /backup只复制MyISAM的数据文件,索引文件只复制前2KB内容,恢复时myisamchk -r通过这2KB内容可以把索引文件重新修复出来;备份加快了,恢复变慢了

2.7.   导入导出

mysql> load data infile ‘/tmp/x.txt’ into table tablename fields terminated by ‘\t’ enclosed by ‘\”‘ lines terminated by ‘\r\n’;分别为字段间隔符、数据前缀后缀符、换行符)mysql> load data local infile ‘/tmp/x.txt’ into table tablename;

远程连接,需要导入的文件在本地

mysql> load data local infile ‘/tmp/x.txt’ replace into table tablename;

用新导入的记录替换掉数据表里的现有数据记录

# mysqlimport dbanme tablename /tmp/x.txt效果跟上面一样

# mysqlimport –local dbanme tablename /tmp/x.txt

# mysqlimport –local “–fields-enclosed-by=\”” “–lines-terminated-by=’\r\n'” dbanme tablename /tmp/x.txt

 

mysql> select * into outfile ‘/tmp/y.txt’ from tablename;

mysql> select * into outfile ‘/tmp/y.txt’ fields terminated by ‘;’ enclosed by ‘\”‘ from tablename;效果跟上面一样 

 

# mysqldump –tab=/tmp “–fields-enclosed-by=\”” dbanme tablename

生成两个文件tablename.txt和tablename.sql,前者是数据跟select …into outfile一样,后者是CREATE TABLE命令

# mysqldump –xml mylibrary > /tmp/mylibrary.xml导出XML格式

# mysql -e ‘select * from mysql.user’ >/tmp/log.txt

# mysql –html -e ‘select * from mysql.user’ >/tmp/log.html

# mysql –xml -e ‘select * from mysql.user’ >/tmp/log.xml

2.8.   日志

MySQL日志包括变更日志(update log)、出错日志(error log)、常规查询日志(general query log)、慢查询日志(slow query log),默认仅启用出错日志:

[mysqld]log-bin=xxx(不指定的话自动用主机名代替,记录每次修改时间、客户线程ID、修改内容等,不记录SELECT命令和没有改变任何数据的UPDATE命令;另外还可以指定目录防止磁盘满;官方文档称对MySQL性能影响仅%1;默认文件名hostname-bin.log)#max_binlog_size(日志文件超过此阀值就会新建一个,默认1G

log=/tmp/yyy.txt(常规查询日志记录所有登录和操作日志,log-bin中的客户线程ID只有配合本日志才能查询对应哪位用户;默认文件名hostname.log

log-error=/backup/logs/mysqlerrorlog(出错日志无法禁用,但可以移位置

log-slow-queries(默认文件名hostname-slow.log;用于数据库优化

long_query_time=15(执行超过15秒,默认10秒

#log-queries-not-using-indexes

 

# mysqlbinlog hostname-bin.002 | less查看二进制变更日志文件

mysql> flush logs;运行此命令、MYSQL重启、超过阀值都会导致新生成BIN日志

mysql> set sql_log_bin=0(实时禁用log-bin

mysql> set sql_log_bin=1(实时启用log-bin

# mysqlbinlog name-bin.001 | mysql -u root -p

# mysqlbinlog name-bin.002 | mysql -u root –p

按照时间顺序,利用某次完整备份之后的bin日志恢复数据 

2.9.   管理MyISAM数据表

MyISAM数据表对应着三个硬盘文件*.frm(定义)、*.MYD(存放数据)、*.MYI(存放索引)。有两种管理方法, myisamchk命令和SQL命令,前者可直接对MYI(命令参数中只能使用MYI但实际也对MYD进行操作)文件进行操作,也可以自动连接到MySQL执行SQL命令;后者只能在MySQL服务运行时有效。

# mysqlcheck -Aa -uroot 检查所有数据库的数据表)# mysqladmin flush-tables下面的myisamchk是直接对MYI文件进行操作,所以在那之前需要先FLUSH TABLES一下)# myisamchk /var/lib/mysql/efront/*.MYI检查所有数据库的数据表

MySQL> LOCK TABLE;下面的myisamchk将修改MYI文件,所以在那之前需要先LOCK TABLE)

# myisamchk –recover –check-only-changed –sort-index –analyze /var/lib/mysql/efront/*.MYI按照存取速度最快的要求对索引文件进行优化

# myisamchk –recover /var/lib/mysql/efront/*.MYI修复受损的MyISAM数据表

# myisamchk –recover –quick /var/lib/mysql/efront/*.MYI只修复索引文件

# myisamchk –safe-recover /var/lib/mysql/efront/*.MYI比–recover更长时间的修复

MySQL> UNLOCK TABLE;解锁

# myisamchk -O key_buffer_size=64M -O sort_buffer_size=64M -O read_buffer_size=2M -O write_buffer_size=2M ……设置内存变量,对大数据表很有效

# myisampack /var/lib/mysql/efront/*.MYI压缩数据表后读取速度更快,体积庞大但仅用于查询不需要再修改的数据表

# mysqlcheck -u root -p –auto-repair –check –optimize –all-databases检查分析优化一条龙

2.10.       管理InnoDB数据表

2.11.       索引

索引可以加快数据检索操作,但会使数据修改操作变慢,因为每修改一条数据记录,索引就必须刷新一次。如果有大量新数据需要插入,建议在每条SQL语句后面设置DELAY_KEY_WRITE,对索引的刷新等到全部记录插入完毕后再进行,这将大大提升修改操作的效率。

唯一(Unique)索引和主(Primary)索引基本相同,唯一区别是定义时使用的关键字一个是PRIMARY一个是UNIQUE。

2.12.       存储过程

mysql> show procedure status;过程清单)mysql> show function status;函数清单)mysql> show create procedure spname;查看过程的代码

mysql> show create function spname;查看函数的代码

# mysqladmin -uroot -p mysql proc >backupsp.sql备份所有SP

2.13.       优化

[mysqld]key_buffer_size = 1024M(索引缓冲区,默认8M,建议为物理内存的四分之一)table_cache = 512 (同时打开数据表个数,show status like ‘open_tables’可查看当前打开的个数,建议在高峰时查看此值后进行调整,打开的数据表需占用内存的

sort_buffer_size = 2M(排序缓冲区,没有索引可用时ORDER BY就用到它

read_buffer_size = 2M(每个线程需要的排序缓冲区,不必太大因每个线程都独自拥有

read_rnd_buffer_size =

bulk_insert_buffer_size =

join_buffer_size =

tmp_table_size =

max­_connections = 2048

同时打开的数据库连接的最大个数,show status like ‘max_used_connections’查看当前值,对永久性连接比较有效减少刚关闭一条连接就不得不再次打开一条同样的连接的现象,但也不必太大,因为每个连接都消耗内存和文件描述符

max_allowed_packet = 16M(影响客户端和服务器最大BLOB块的长度

query_cache_size = 128M

query_cache_type = 1(默认为ON

query_cache_limit = 500K(避免少数大数据量的查询结果把其他查询“排挤”出缓冲区

skip-name-resolve(不解析IP的主机名,mysql.users里必须设置IP而非主机名

skip-innodb(不启用innodb

      

第3章     FAQ

3.1.   连接错误

MySQL客户端(常见如PHP)报以下连接错误:

MySQL server has gone awayLost connection to server during query

       可以从以下方面进行调查:

  1. MySQL对永久性连接也是有timeout的,默认是8小时。比如php的mysql_pconnect()或者其他连接池创建的长连接超时了。可通过增加MySQL的wait_timeout变量的值来解决;
  2. 客户端多线程共享某个连接时,在断开的连接上做查询也会报以上错误;
  3. 客户端达到timeout值了,PHP可以通过修改默认timeout解决mysql_options(…, MYSQL_OPT_READ_TIMEOUT,…)和mysql_options(…, MYSQL_OPT_WRITE_TIMEOUT,…);
  4. 客户端传送给服务端的BLOB超过1M了,修改MySQL的max_allowed_packet为更大值;

3.2.   读写优化

MySQL服务器有读有写,在低负载LOAD情况下CPU使用率达100%, 估计下来可能是:在一个读站主体的数据库中,忽然发生大量的读写并发,由于INSERT和UPDATE优先级比SELECT高,而MyISAM数据表在INSERT和UPDATE时必须LOCK表,导致SELECT必须等待INSERT和UPDATE执行完毕才能操作,如果这个时候SELECT等待累积过大,会造成MySQL瓶颈,通过以下三个方法修复:

max_write_lock_count = 1(一个写后就执行读,相当于增加了读的优先级)low-priority-updates=1(降低写的优先级,让读先执行)concurrent_insert=2(并发查询插入的一个设置,会产生大量碎片,定期使用OPTIMIZE TABLE语法优化
分类: safe 标签: