存档

2014年3月 的存档

WordPress在nginx下rewrite规则

2014年3月25日 没有评论

博客重新迁移之后,用nginx代替了原来的Apache服务器,wordpress使用了伪静态,这个就要使用了nginx的url重定向功能,前面的时候只是粗略的做了一个把所有不存在的文件重定向到根目录的index.php的功能。最近发现使用时发现登陆到目录没有指定详细的文件名时会无线重定向,导致页面死掉了!
今天又发现了这个问题,决定解决它,上网查了一下nginx下wordpress的重定向规则,改过之后重启nginx就好了!
我在配置文件/etc/nginx/conf.d/default.conf中做了如下改动:


location / {
 ........
 index index.php index.html index.htm;

if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
 }

 

分类: Linux, Web 标签:

IP地址后斜杠和数字代表的意思(转)

2014年3月20日 没有评论

一个IP地址的格式:IP/数字,例如:111.222.111.222/24

这种格式平时在内网中用的不多,所以一下子看不懂,最后查了资料才知斜杠后的数字代表的是掩码的位数

“掩码”也就是我们平时说的“子网掩码”

“位数”指的是子网掩码的计算方式。

我们熟悉的子网掩码和IP地址都是12个阿拉伯数字,每3个数字为一组,组与组之间用英文句点(.)来分隔。

例如:111.222.111.222

以上的例子是十进制数字,是给人看的,对于计算机来说需要将这些十进制数字转换成二进制。转换后是32位长,每8位为一组,组与组之间用英文句点(.)来分隔。

以上例子可以转换为:

01101111 . 11011110 . 01101111 . 11011110
   |           |           |            |
  111     .   222    .   111     .    222

那么斜杠后的数字就是表示子网掩码的位数,例如:/24代表的是32位长度的二进制中从左至右有24位是1,其余为0,即

/24 = 11111111 . 11111111 . 11111111 . 00000000 = 255 . 255 . 255 . 0

|<----- 24位1 ---->|

所以111.222.111.222/24所表示的意思就是:

IP地址:111.222.111.222

子网掩码:255.255.255.0

显然这样的表示方式比较适合在服务器中进行配置网络参数也比较适合记忆,但由于需要二进制与十进制的转换,在平时管理中并不多用。

分类: Web 标签: ,

apache启动服务443端口占用

2014年3月17日 没有评论

今天再把重装系统以前的wamp环境中的apache手动装成windows服务时,遇到了下面的错误:
D:\wamp\Apache24\bin>httpd.exe -k install
Installing the Apache2.4 service
The Apache2.4 service is successfully installed.
Testing httpd.conf….
Errors reported here must be corrected before the service can be started.
(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 : AH00072: mak
e_sock: could not bind to address [::]:443
(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 : AH00072: mak
e_sock: could not bind to address 0.0.0.0:443
AH00451: no listening sockets available, shutting down
AH00015: Unable to open logs
然后上网查找了一下资料,还是第一次看到这个问题!发现是443的端口被占用了,下面说一下解决办法。
查看查用端口程序:

D:\wamp\Apache24\bin>netstat -anob

这时候会查来很多,查找端口号为443的记录的pid和占用的进程名称,然后调出任务管理器,任务管理器的默认是不现实pid的,查看-》选择列-》pid,这时pid显示出来了,找到对应进程,结束即可!此时启动apache服务正常启动!

分类: windows 标签:

Apache手动安装成Windows的服务(转)

2014年3月17日 没有评论

可以选择在安装Apache时自动将其安装为一个服务。如果选择”for all users”,那么Apache将会被安装为服务。

如果选择了”only for the Current User”,可以在安装后手动将Apache注册为服务。注意,必须是Administrators组的成员才能成功注册服务。 使用Apache Service Monitor工具,可以查看和管理你所在网络上的所有机器上安装的Apache服务的状态。为了能够使用这个工具管理Apache服务,你必须首先自动或手动安装Apache服务。

可以在Apache安装目录的bin子目录下,使用如下命令将Apache安装为Windows NT服务:

httpd -k install

如果想指定服务的名称,可以使用下面的命令。当你在同一机器上安装多个Apache服务时,你必须为它们指定不同的名字。

httpd -k install -n “服务名”

如果你想为不同名称的服务使用不同的配置文件,则安装时需要指定配置文件:

httpd -k install -n “服务名” -f “c:\files\my.conf”

如果你使用的是第一个命令,也就是除 -k install 外没有其它命令行参数,那么被安装的服务名称将是:Apache2.2 ,配置文件将使用conf\httpd.conf 。

要移除一个Apache服务很简单:

httpd -k uninstall

或者使用下述命令移除特定名称的Apache服务:

httpd -k uninstall -n “服务名”

通常,启动、重启、关闭Apache服务的方法是使用Apache Service Monitor工具,另外也可以使用控制台命令:

NET START Apache2.2 和 NET STOP Apache2.2 或者通过Windows服务控制面板。在启动Apache服务之前,你应当使用下面的命令检查一下配置文件的正确性: httpd -n “服务名” -t 你可以通过命令行开关来控制Apache服务。

要启动一个已经安装的Apache服务,可以使用: httpd -k start

要停止一个已经安装的Apache服务,可以使用: httpd -k stop 或 httpd -k shutdown

要重启一个运行中的Apache服务,强制它重新读取配置文件,可以使用: httpd -k restart

默认情况下,Apache服务将被注册为以本地系统用户(LocalSystem帐号)身份运行。LocalSystem帐号没有网络权限,不能通过任何 Windows安全机制访问网络,包括文件系统、命名管道、DCOM或secure RPC ,但是它对于本地资源却拥有广泛的特权。

—————————————

将Apache2手动安装成Windows的服务

如果在安装时没有将Apache安装成Windows的服务,那么安装结束后,也可以通过命令行来实现。在<APACHE_HOME>目录下的bin文件夹中,有Apache.exe文件。具有以下执行的参数: 安装为Windows服务

apache -k install -n “服务名”

要安装一个使用特定配置的服务,安装时指定配置文件:

apache -k install -n “服务名” -f “\my server\conf\my.conf”

要移除一个Apache服务,使用: apache -k uninstall -n “服务名” 如果没有指定服务名,缺省地,将使用”Apache2″。 更多的命令可以用 apache -h 命令来查看

利用crontab和mysqldump定时备份MySQL数据库

2014年3月11日 没有评论

前面的2篇文章,《Mysqldump使用介绍》和《CentOS安装crontab及使用方法》其实就是为了这篇文章做铺垫的,至于为什么要写这篇文章,还有从前2天工作中一次小事故说起。前2天同时在进行update时,没有注意加条件,把所有的数据表都更新了,更要命的是没办法恢复,而运维同学除了前一段时间我修改数据库时让他做的数据备份他竟然没有任何备份。从运维的角度来说,我觉得有些失职了,数据的备份应该也算是运维份内的工作吧,所以才有今天博主参考资料,并且自己动手写下这篇博客的原因!

博主的shell水平有限,这些大部分还是在网络上面参考别人的结果。下面我就分享一下自己的实验步骤和结果吧,希望对看到这篇文章的同学有所帮助!
创建保存备份文件的路径

[root@king-centos mysql]# mkdir /backup/mysql/

创建mysqldump备份脚本文件

[root@king-centos mysql]# vim /usr/sbin/mysqlbak

下面是脚本内容:
[/shell]
#!/bin/bash
# this is shell for auto db backup

# database name
dbname=mytest

dbuser=king

dbpwd=123456

backupdir=/backup/mysql/

backupfile=”$backupdir$dbname”_.$(date +%Y%m%d%M).sql

mysqldump -u$dbuser -p$dbpwd $dbname > $backupfile

echo ‘ok’;
[/shell]
保存脚本内容,并赋予其可执行权限

[root@king-centos mysql]# chmod +x /usr/sbin/mysqlbak

最要要做就是将其放入crontab啦

[root@king-centos mysql]# vim /etc/crontab

写入:

01 22 * * * root /usr/sbin/mysqlbak

上面的意思就是每天22:01用root的身份来执行这个脚本备份文件。
最后重启crond服务器即可:

[root@king-centos mysql]# service crond restart

当然博主的shell能力有限,大家能力强的可以把shell脚本写的更复杂一些!

PS: Only experienced accidents,we realized the importance of backups!
下面是博主在写这篇文章参考的资料地址,感谢了!
https://sites.google.com/site/polarisnotme/mysql/mysqlmysqldump
http://www.51cto.com/html/2005/1019/8433.htm

分类: Mysql 标签:

Mysqldump使用介绍

2014年3月11日 没有评论

其实博主在写这一篇博文之前也是没有用过mysql这个强大的命令的,不过为了下面的一篇文章,博主还是到mysql手册查找了一下mysqldump的相关解释和用法。当然其实如果我们善用google的话,也会找到很多相关的文章,不过我比较喜欢以前我的一位同事对我说的话,找一些资料最好去官网,因为一般他们是最权威的,也可能是最准确的!
那么,mysqldump是用来做什么的?我们看一下手册上面的怎么说的吧。那我就引用mysql手册的原话来回答吧,“mysqldump客户端可用来转储数据库或搜集数据库进行备份或将数据转移到另一个SQL服务器(不一定是一个MySQL服务器)。转储包含创建表和/或装载表的SQL语句”。
下面这些内容摘自mysql手册关于mysqldump的使用,如果你能耐着心把这些东西看完,我相信你觉得像我一样收益匪浅的感叹“哇,原来还有这么牛X的工具啊”,却是以前博主从来没有用mysqldump进行过备份数据库,都是启用其他客户端使用的工具进行备份的!以下内容来源自mysql中文手册,有兴趣的同学可以认真看一下,我会对当中的例子加粗加黑,如果大家没有耐心可以看一下那些例子,也会对mysqldump有个大致的了解:
有3种方式来调用mysqldump:

shell> mysqldump [options] db_name [tables]
shell> mysqldump [options] —database DB1 [DB2 DB3...]
shell> mysqldump [options] –all–database

如果没有指定任何表或使用了—database或–all–database选项,则转储整个数据库。
要想获得你的版本的mysqldump支持的选项,执行mysqldump —help。
如果运行mysqldump没有–quick或–opt选项,mysqldump在转储结果前将整个结果集装入内存。如果转储大数据库可能会出现问题。该选项默认启用,但可以用–skip-opt禁用。
如果使用最新版本的mysqldump程序生成一个转储重装到很旧版本的MySQL服务器中,不应使用–opt或-e选项。
mysqldump支持下面的选项:
· —help,-?
显示帮助消息并退出。
· –add-drop–database
在每个CREATE DATABASE语句前添加DROP DATABASE语句。
· –add-drop-tables
在每个CREATE TABLE语句前添加DROP TABLE语句。
· –add-locking
用LOCK TABLES和UNLOCK TABLES语句引用每个表转储。重载转储文件时插入得更快。参见7.2.16节,“INSERT语句的速度”。
· –all–database,-A
转储所有数据库中的所有表。与使用—database选项相同,在命令行中命名所有数据库。
· –allow-keywords
允许创建关键字列名。应在每个列名前面加上表名前缀。
· —comments[={0|1}]
如果设置为 0,禁止转储文件中的其它信息,例如程序版本、服务器版本和主机。–skip—comments与—comments=0的结果相同。 默认值为1,即包括额外信息。
· –compact
产生少量输出。该选项禁用注释并启用–skip-add-drop-tables、–no-set-names、–skip-disable-keys和–skip-add-locking选项。
· –compatible=name
产生与其它数据库系统或旧的MySQL服务器更兼容的输出。值可以为ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options或者no_field_options。要使用几个值,用逗号将它们隔开。这些值与设置服务器SQL模式的相应选项有相同的含义。参见5.3.2节,“SQL服务器模式”。
该选项不能保证同其它服务器之间的兼容性。它只启用那些目前能够使转储输出更兼容的SQL模式值。例如,–compatible=oracle 不映射Oracle类型或使用Oracle注释语法的数据类型。
· –complete-insert,-c
使用包括列名的完整的INSERT语句。
· –compress,-C
压缩在客户端和服务器之间发送的所有信息(如果二者均支持压缩)。
· –create-option
在CREATE TABLE语句中包括所有MySQL表选项。
· —database,-B
转储几个数据库。通常情况,mysqldump将命令行中的第1个名字参量看作数据库名,后面的名看作表名。使用该选项,它将所有名字参量看作数据库名。CREATE DATABASE IF NOT EXISTS db_name和USE db_name语句包含在每个新数据库前的输出中。
· —debug[=debug_options],-# [debug_options]
写调试日志。debug_options字符串通常为’d:t:o,file_name‘。
· –default-character-set=charset
使用charsetas默认字符集。参见5.10.1节,“数据和排序用字符集”。如果没有指定,mysqldump使用utf8。
· –delayed-insert
使用INSERT DELAYED语句插入行。
· –delete-master-logs
在主复制服务器上,完成转储操作后删除二进制日志。该选项自动启用–master-data。
· –disable-keys,-K
对于每个表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;语句引用INSERT语句。这样可以更快地装载转储文件,因为在插入所有行后创建索引。该选项只适合MyISAM表。
· –extended-insert,-e
使用包括几个VALUES列表的多行INSERT语法。这样使转储文件更小,重载文件时可以加速插入。
· –fields-terminated-by=…,–fields-enclosed-by=…,–fields-optionally-enclosed-by=…,–fields-escaped-by=…,–行-terminated-by=…
这些选项结合-T选项使用,与LOAD DATA INFILE的相应子句有相同的含义。参见13.2.5节,“LOAD DATA INFILE语法”。
· –first-slave,-x
不赞成使用,现在重新命名为–lock-all-tables。
· –flush-logs,-F
开始转储前刷新MySQL服务器日志文件。该选项要求RELOAD权限。请注意如果结合–all–database(或-A)选项使用该选项,根据每个转储的数据库刷新日志。例外情况是当使用–lock-all-tables或–master-data的时候:在这种情况下,日志只刷新一次,在所有 表被锁定后刷新。如果你想要同时转储和刷新日志,应使用–flush-logs连同–lock-all-tables或–master-data。
· –force,-f
在表转储过程中,即使出现SQL错误也继续。
· –host=host_name,-h host_name
从给定主机的MySQL服务器转储数据。默认主机是localhost。
· –hex-blob
使用十六进制符号转储二进制字符串列(例如,’abc’ 变为0×616263)。影响到的列有BINARY、VARBINARY、BLOB。
· –lock-all-tables,-x
所有数据库中的所有表加锁。在整体转储过程中通过全局读锁定来实现。该选项自动关闭–single-transaction和–lock-tables。
· –lock-tables,-l
开始转储前锁定所有表。用READ LOCAL锁定表以允许并行插入MyISAM表。对于事务表例如InnoDB和BDB,–single-transaction是一个更好的选项,因为它不根本需要锁定表。
请注意当转储多个数据库时,–lock-tables分别为每个数据库锁定表。因此,该选项不能保证转储文件中的表在数据库之间的逻辑一致性。不同数据库表的转储状态可以完全不同。
· –master-data[=value]
该选项将二进制日志的位置和文件名写入到输出中。该选项要求有RELOAD权限,并且必须启用二进制日志。如果该选项值等于1,位置和文件名被写入CHANGE MASTER语句形式的转储输出,如果你使用该SQL转储主服务器以设置从服务器,从服务器从主服务器二进制日志的正确位置开始。如果选项值等于2,CHANGE MASTER语句被写成SQL注释。如果value被省略,这是默认动作。
–master-data选项启用–lock-all-tables,除非还指定–single-transaction(在这种情况下,只在刚开始转储时短时间获得全局读锁定。又见–single-transaction。在任何一种情况下,日志相关动作发生在转储时。该选项自动关闭–lock-tables。
· –no-create-db,-n
该选项禁用CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name语句,如果给出—database或–all–database选项,则包含到输出中。
· –no-create-info,-t
不写重新创建每个转储表的CREATE TABLE语句。
· –no-data,-d
不写表的任何行信息。如果你只想转储表的结构这很有用。
· –opt
该选项是速记;等同于指定 –add-drop-tables–add-locking –create-option –disable-keys–extended-insert –lock-tables –quick –set-charset。它可以给出很快的转储操作并产生一个可以很快装入MySQL服务器的转储文件。该选项默认开启,但可以用–skip-opt禁用。要想只禁用确信用-opt启用的选项,使用–skip形式;例如,–skip-add-drop-tables或–skip-quick。
· –password[=password],-p[password]
连接服务器时使用的密码。如果你使用短选项形式(-p),不能在选项和密码之间有一个空格。如果在命令行中,忽略了–password或-p选项后面的 密码值,将提示你输入一个。
· –port=port_num,-P port_num
用于连接的TCP/IP端口号。
· –protocol={TCP | SOCKET | PIPE | MEMORY}
使用的连接协议。
· –quick,-q
该选项用于转储大的表。它强制mysqldump从服务器一次一行地检索表中的行而不是检索所有行并在输出前将它缓存到内存中。
· –quote-names,-Q
用‘`’字符引用数据库、表和列名。如果服务器SQL模式包括ANSI_QUOTES选项,用‘”’字符引用名。默认启用该选项。可以用–skip-quote-names禁用,但该选项应跟在其它选项后面,例如可以启用–quote-names的–compatible。
· –result-file=file,-r file
将输出转向给定的文件。该选项应用在Windows中,因为它禁止将新行‘\n’字符转换为‘\r\n’回车、返回/新行序列。
· –routines,-R
在转储的数据库中转储存储程序(函数和程序)。使用—routines产生的输出包含CREATE PROCEDURE和CREATE FUNCTION语句以重新创建子程序。但是,这些语句不包括属性,例如子程序定义者或创建和修改时间戳。这说明当重载子程序时,对它们进行创建时定义者应设置为重载用户,时间戳等于重载时间。
如果你需要创建的子程序使用原来的定义者和时间戳属性,不使用–routines。相反,使用一个具有mysql数据库相应权限的MySQL账户直接转储和重载mysql.proc表的内容。
该选项在MySQL 5.1.2中添加进来。在此之前,存储程序不转储。
· –set-charset
将SET NAMES default_character_set加到输出中。该选项默认启用。要想禁用SET NAMES语句,使用–skip-set-charset。
· –single-transaction
该选项从服务器转储数据之前发出一个BEGIN SQL语句。它只适用于事务表,例如InnoDB和BDB,因为然后它将在发出BEGIN而没有阻塞任何应用程序时转储一致的数据库状态。
当使用该选项时,应记住只有InnoDB表能以一致的状态被转储。例如,使用该选项时任何转储的MyISAM或HEAP表仍然可以更改状态。
–single-transaction选项和–lock-tables选项是互斥的,因为LOCK TABLES会使任何挂起的事务隐含提交。
要想转储大的表,应结合–quick使用该选项。
· –socket=path,-S path
当连接localhost(为默认主机)时使用的套接字文件。
· –skip–comments
参见—comments选项的描述。
· –tab=path,-T path
产生tab分割的数据文件。对于每个转储的表,mysqldump创建一个包含创建表的CREATE TABLE语句的tbl_name.sql文件,和一个包含其数据的tbl_name.txt文件。选项值为写入文件的目录。
默认情况,.txt数据文件的格式是在列值和每行后面的新行之间使用tab字符。可以使用–fields-xxx和–行–xxx选项明显指定格式。
注释:该选项只适用于mysqldump与mysqld服务器在同一台机器上运行时。你必须具有FILE权限,并且服务器必须有在你指定的目录中有写文件的许可。
· –tables
覆盖—database或-B选项。选项后面的所有参量被看作表名。
· –triggers
为每个转储的表转储触发器。该选项默认启用;用–skip-triggers禁用它。
· –tz-utc
在转储文件中加入SET TIME_ZONE=’+00:00′以便TIMESTAMP列可以在具有不同时区的服务器之间转储和重载。(不使用该选项,TIMESTAMP列在具有本地时区的源服务器和目的服务器之间转储和重载)。–tz-utc也可以保护由于夏令时带来的更改。–tz-utc默认启用。要想禁用它,使用–skip-tz-utc。该选项在MySQL 5.1.2中加入。
· –user=user_name,-u user_name
连接服务器时使用的MySQL用户名。
· –verbose,-v
冗长模式。打印出程序操作的详细信息。
· –version,-V
显示版本信息并退出。
· –where=’where-condition‘, -w ‘where-condition‘
只转储给定的WHERE条件选择的记录。请注意如果条件包含命令解释符专用空格或字符,一定要将条件引用起来。

例如:
“–where=user=’jimf’”
“-wuserid>1″
“-wuserid<1″
–xml,-X
将转储输出写成XML。
还可以使用–var_name=value选项设置下面的变量:
· max_allowed_packet
客户端/服务器之间通信的缓存区的最大大小。最大为1GB。
· net_buffer_length
客户端/服务器之间通信的缓存区的初始大小。当创建多行插入语句时(如同使用选项–extended-insert或–opt),mysqldump创建长度达net_buffer_length的行。如果增加该变量,还应确保在MySQL服务器中的net_buffer_length变量至少这么大。
还可以使用–set-variable=var_name=value或-O var_name=value语法设置变量。然而,现在不赞成使用该语法。
mysqldump最常用于备份一个整个的数据库:

shell> mysqldump –opt db_name &gt; backup-file.sql

你可以这样将转储文件读回到服务器:

shell> mysql db_name < backup-file.sql
或者为:
shell> mysql -e “source /path-to–backup/backup-file.sql” db_name
mysqldump也可用于从一个MySQL服务器向另一个服务器复制数据时装载数据库:
shell> mysqldump –opt db_name | mysql –host=remote_host -C db_name
可以用一个命令转储几个数据库:
shell> mysqldump —database db_name1 [db_name2 …] > my_databases.sql

如果你想要转储所有数据库,使用–all–database选项:
shell> mysqldump –all-databases > all_databases.sql
如果表保存在InnoDB存储引擎中,mysqldump提供了一种联机备份的途径(参见下面的命令)。该备份只需要在开始转储时对所有表进行全局读锁定(使用FLUSH TABLES WITH READ LOCK)。获得锁定后,读取二进制日志的相应内容并将锁释放。因此如果并且只有当发出FLUSH…时正执行一个长的更新语句,MySQL服务器才停止直到长语句结束,然后转储则释放锁。因此如果MySQL服务器只接收到短(“短执行时间”)的更新语句,即使有大量的语句,也不会注意到锁期间。
shell> mysqldump –all-databases –single-transaction > all_databases.sql
对于点对点恢复(也称为“前滚”,当你需要恢复旧的备份并重放该备份以后的更改时),循环二进制日志(参见5.11.3节,“二进制日志”)或至少知道转储对应的二进制日志内容很有用:
shell> mysqldump –all-databases –master-data=2 > all_databases.sql

shell> mysqldump –all-databases –flush-logs –master-data=2 > all_databases.sql
如果表保存在InnoDB存储引擎中,同时使用–master-data和–single-transaction提供了一个很方便的方式来进行适合点对点恢复的联机备份。
参考资料来源:http://dev.mysql.com/doc/refman/5.1/zh/client-side-scripts.html#mysqldump

分类: Mysql 标签:

CentOS安装crontab及使用方法

2014年3月11日 没有评论

安装crontab:

[root@CentOS ~]# yum install vixie-cron
[root@CentOS ~]# yum install crontabs

说明:
vixie-cron软件包是cron的主程序;
crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。
//+++++++++++++++++++++++++++++++++++
cron 是linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置

查看crontab服务状态:service crond status
手动启动crontab服务:service crond start
查看crontab服务是否已设置为开机启动,执行命令:ntsysv

加入开机自动启动:

chkconfig –level 35 crond on

1,crontab命令

功能说明:设置计时器。
语  法:crontab [-u <用户名称>][配置文件] 或 crontab [-u <用户名称>][-elr]
补充说明:cron是一个常驻服务,它提供计时器的功能,让用户在特定的时间得以执行预设的指令或程序。只要用户会编辑计时器的配置文件,就可以使用计时器的功能。其配置文件格式如下:
Minute Hour Day Month DayOFWeek Command
参  数:
-e  编辑该用户的计时器设置。
-l  列出该用户的计时器设置。
-r  删除该用户的计时器设置。
-u<用户名称>  指定要设定计时器的用户名称。
2,crontab 格式
基本格式 :
* *  *  *  *  command
分 时 日 月 周  命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

crontab文件的一些例子:

30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启apache。

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启apache。

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启apache。

* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启apache

* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache

0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache

*/30 * * * * /usr/sbin/ntpdate 210.72.145.44
每半小时同步一下时间

原文转载地址:http://hi.baidu.com/jinhuow/item/b3b2c70bded92d18ebfe3814

crontab每隔一段时间一次任务的写法

这里就拿每隔5分钟为例进行说明:

有两种写法

第一种写法是*/5,这种写法有的系统会不支持

*/5 * * * * /xxx/task.sh
第二种写法比较繁琐,但所有系统都支持:

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /xx/task.sh

分类: Linux 标签:

Mysql使用别名多表查询join时问题

2014年3月11日 没有评论

今天在写一个sql语句时遇到一个问题,问了好多人才给出了一个答案,当然以我们目前对mysql的了解也不知道这个答案到底是对错,不过此处做为唯一合理的答案,我就当做正确答案了,如果博主下面的说法是错误的,欢迎大家及时指出!

下午在对t1,t2,t3这3个表进行多表管理查询时,爆出了一个让我“莫名其妙”的错误。最初的时候我的sql语句是这样书写的:

SELECT * FROM t1, t2 LEFT JOIN t3 ON (t1.id=t3.id) WHERE t1.id=t2.id

但是在执行的时候报错“Unknown column t1.id”,以前博主习惯利用AS 表别名来进行多表关联查询,这让博主很凌乱,一时不知道如何下手解决了!

后来博主把自己的sql语句写的正规了一点,如下:

SELECT * FROM t1 INNER JOIN t2 LEFT JOIN t3 ON (t1.id=t3.id) WHERE t1.id=t2.id

然后再次执行,发现ok了!不再报错了,博主顿时欣喜若狂啊,但是博主怀着剖根问底的精神,对前者报错很好奇错在了那里!对mysql有了解的人都知道用“,”把表名分开和INNER JOIN是等同的,那么为什么我这里报错了那?

博主动用了自己所有的关系也查看了一些资料(都不知道咋问谷歌啊),最终一个QQ群的叫做“蜀都-Rory”的同学给博主解释了一下,原来前者被mysql解释器解释以后实际执行时是这样子的:

SELECT * FROM t1,( t2 LEFT JOIN t3 ON (t1.id=t3.id)) WHERE t1.id=t2.id

这就把中间部分被当做一个子查询了,而子查询在mysql执行的时候是优先执行的,所以就没有和t1关联,所以自然就报前面提到那个错误了!

分类: Mysql 标签:

在手机上利用PHP完成对电脑的操作

2014年3月11日 没有评论

哎,有时世事正如那句话,有心栽花花不发,无心插柳柳成荫啊!前半夜又折腾了好久mysql的主从配置,最后发现原来网上大部分mysql主从的配置都是针对mysql5.1或者之前版本的,mysql5.1版本以后的配置改变了!12点要去睡觉时,突然想看一会再床上看一会电影,又不想再起来关电脑了,设置定时关机吧,我又不知道自己想看多久,肿么办那?
突然一道靓丽的火花从脑海一闪而过,wamp+手机浏览器?不错想到就去做吧!
首要实验的条件和环境先说一下吧:
网络需求:无线路由
电脑环境要求:php、apache
手机要求:wifi、手机浏览器
上面提到的配置需求都是最基本的,电脑环境可以使用php的集成环境wamp、xampp都行,当然自己安装也ok,手机的话目前任意一款带wifi的只能手机几乎都可以吧!为啥需要强调wifi,那是因为我这里的手机访问电脑是通过手机wifi连接无线路由来访问电脑的web服务的!
上面大致说了一下原理,那么web服务端怎么实现这些手机浏览器传递过来的信息那?
其实我们这里重要利用一个php的program execution函数exec来实现我们手机浏览器传递过来的信息!
我的目的就是实现手机可控制的关机和取消关机,那么我就把我web服务端的php脚本文件贴出来吧,供大家参考!

shutdown.php脚本内容:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style>
	a{font-size: 32px;}
</style>
<a href="?type=cancle">取消关机</a>
<br><br>
<a href="?type=close">关机</a>
<?php
$type=isset($_GET['type'])?$_GET['type']:false;
$cmd='';
switch ($type){
	case 'cancle':
		$cmd="shutdown -a";
		break;
	case 'close':
		$cmd="shutdown -f -s -t 120";
		break;
	default:
		$cmd='';
		break;
}
if(!empty($cmd))	
exec($cmd);
?>

然后通过浏览器访问这个文件,点击对应的超链接就可以实现关机和取消关机的功能了!这里其实就是把dos命令通过exec传递给了cmd.exe进行了执行,也就是说只要是dos相关的命令均可以通过exec进行执行。所以如果将我这里的提交命令的格式换成表单提交的话,表单里面放入要执行的命令,进行简易的改进,这也可以当做一个简易的木马程序来使用了!所以在生成环境下,我们一般要对这些安全威胁比较大的函数可以在php.ini中禁用掉!
太复杂的程序这里就不做太多的讲解了,读者可以根据自己的水平进行摸索,这里再提一下就是没有wifi或者无线路由的情况怎么办那?
没有无线路由、或者是在家里外面访问我们家里的电脑时,我们可以通过路由的端口映射功能来完成同样的功能,这里必须是你家里的ADSL分配的是一个相对稳定的IP地址,如果经常改变也不适合,还有就是多层路由的复杂网络这里也不做讨论。

是不是有点心动,像博主一样躺在床上就可以操作电脑,而且还不需要无线鼠标、键盘之类的。心动不如行动,have a try!

分类: PHP 标签:

Mysql Master&Slave 实战

2014年3月11日 没有评论

从开始着手做Mysql的Master&Slave模式到现在好长一段时间了,中间由于遇到问题也停了一段时间,今天早上总算配好了,这里就分享一下自己的经验和其中遇到的问题!
刚开始的时候我也没有直接去Mysql的官网去查看手册,而且用google搜索了2篇网上其他同学的教程。如果第一次接触mysql的主从,可以去这里,看看这位同学写的东西吧,里面包含了Mysql主从的工作原理,是一个不错的入门教程。下面我们就进入正题吧!
实验环境
服务器A(master):192.168.10.8
服务器B(Slave):192.168.10.10
服务器A、B系统环境:CentOS 6.3
Mysql版本:.5.5.31
配置Master主机
编辑A服务器上面mysql的配置文件,开启Mysql的bin-log功能和设置Master相关参数和被复制数据库的相关参数。

[root@king-centos ~]# vim /etc/my.cnf

##主从配置服务器ID号,保持主从服务器不要一致

server-id=1
## Mysql开启bin-log功能
##log-bin=/data/mysql/binlog/mysql-bin.log
log-bin=mysql-bin.log
## Multiple db can use ”,” separation
## 设置被从服务器复制的数据库名称
binlog-do-db=master

Notice: 这里需要注意的是,像博主使用的是yum第三方源的mysql版本,在配置bin-log时,自定义目录时,mysqld无法启动,但是不适用自定义目录,在mysql默认目录一切正常。具体原因博主亦是不是十分清楚,把它归在于mysql编译时的配置问题上了。我用一个二进制版本的5.7的就可以自定义bin-log的路径。

然后下面就是创建用于从服务器访问的用户:

mysql> GRANT REPLICATION SLAVE ON *.* TO ’slave10′@”192.168.10.%” IDENTIFIED BY ’123456′;
mysql> FLUSH PRIVILEGES;

下面就是记录当前master服务器的状态:

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS\G;

*************************** 1. row ***************************
File: mysql-bin.000007
Position: 107
Binlog_Do_DB: master
Binlog_Ignore_DB:
1 row in set (0.00 sec)
mysql> UNLOCK TABLES;

配置Slave主机

编辑从服务器配置文件my.cnf,命令和上面相同。

server-id = 3
log-bin = mysql-bin-log
## 从服务器从主服务器复制数据库名称,多个数据库可以用”,”分割
replicate-do-db = master

Notice:这里需要注意的是如果你把主从服务的server-id配成一样的,会爆下面这个错误:
Slave_IO_Running: No
Slave_SQL_Running: Yes
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids;

即IO相关进程无法启动。

此时需要同步Mysql进行主从复制的数据,我的方法是使用mysqldump把主服务器的数据库导出然后使用mysql进行同步。

同步完数据库以足够权限的用户登录mysql,不熟悉的话就使用root就好!

mysql> CHANGE MASTER TO MASTER_HOST=’192.168.10.8′,
-> MASTER_USER=’slave10′,
-> MASTER_PASSWORD=’123456′,
-> MASTER_LOG_FILE=’mysql-bin.000007′,
->MASTER_LOG_POS=107;

这里需要注意的一下是,针对mysql5.1版本或者以前版本也可以通过配置my.cnf文件达到相同的目的.
例如:

server-id               = 2
log_bin                 = mysql-bin
master-host     =192.168.10.10
master-user     =slave10
master-pass     =123456
master-port     =3306
master-connect-retry=60 #如果从服务器发现主服务器断掉,重新连接的时间差(秒)
replicate-do-db =master#只复制某个库
replicate-ignore-db=mysql #不复制某个库

但是如果在mysql的5.5中做这种配置就会出现如下错误:
130620 6:04:52 InnoDB: 5.5.31 started; log sequence number 1609072
130620 6:04:52 [ERROR] /usr/libexec/mysqld: unknown variable ‘master-host=192.168.10.10′
下面就是启动mysql的slave进程了:

mysql> start slave;
mysql> show slave status \G;
……
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
……

找到上面的内容,那么我就可以去试试看看,目前来说,我们的主从已经配置好了!
我们可以到master服务器上面的表中添加一条记录,然后看看从服务器会不会自动复制,如果自动复制了。那么,Congratulations,我们的mysql master&slave配置好了!
最后附上mysql手册中相关资料地址:http://dev.mysql.com/doc/refman/5.1/zh/replication.html#replication-howto