2009年11月26日

//主键549830479

   alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id);

//增加一个新列549830479

   alter table t2 add d timestamp;
alter table infos add ex tinyint not null default '0';

//删除列549830479

   alter table t2 drop column c;

//重命名列549830479

   alter table t1 change a b integer;

//改变列的类型549830479

   alter table t1 change b b bigint not null;
alter table infos change list list tinyint not null default '0';

//重命名表549830479

   alter table t1 rename t2;

加索引549830479

   mysql> alter table tablename change depno depno int(5) not null;
mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]);
mysql> alter table tablename add index emp_name (name);

加主关键字的索引549830479

mysql> alter table tablename add primary key(id);

加唯一限制条件的索引549830479

  mysql> alter table tablename add unique emp_name2(cardnumber);

删除某个索引549830479

   mysql>alter table tablename drop index emp_name;

修改表:549830479

增加字段:549830479

   mysql> ALTER TABLE table_name ADD field_name field_type;

修改原字段名称及类型:549830479

   mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;

删除字段:549830479

   mysql> ALTER TABLE table_name DROP field_name; 
mysql中,修改字段类型语句是这样 alter table TT modify CC float
 

MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述。概述有意简化,更详细的说明应该考虑到有关特定列类型的附加信息,例如你能为其指定值的允许格式。

   由MySQL支持的列类型列在下面。下列代码字母用于描述中:

M
指出最大的显示尺寸。最大的合法的显示尺寸是 255 。
D
适用于浮点类型并且指出跟随在十进制小数点后的数码的数量。最大可能的值是30,但是应该不大于M-2。
方括号(“[”和“]”)指出可选的类型修饰符的部分。

注意,如果你指定一个了为ZEROFILL,MySQL将为该列自动地增加UNSIGNED属性。

TINYINT[(M)] [UNSIGNED] [ZEROFILL]
一个很小的整数。有符号的范围是-128到127,无符号的范围是0到255。

SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
一个小整数。有符号的范围是-32768到32767,无符号的范围是0到65535。

MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
一个中等大小整数。有符号的范围是-8388608到8388607,无符号的范围是0到16777215。

INT[(M)] [UNSIGNED] [ZEROFILL]
一个正常大小整数。有符号的范围是-2147483648到2147483647,无符号的范围是0到4294967295。

INTEGER[(M)] [UNSIGNED] [ZEROFILL]
这是INT的一个同义词。

BIGINT[(M)] [UNSIGNED] [ZEROFILL]

一个大整数。有符号的范围是-9223372036854775808到9223372036854775807,无符号的范围是0到

18446744073709551615。注意,所有算术运算用有符号的BIGINT或DOUBLE值完成,因此你不应该使用大于9223372036854775807(63位)的有符号大整数,除了位函数!注意,当两个参数是INTEGER值时,-、+和*将使用BIGINT运算!这意味着如果你乘2个大整数(或来自于返回整数的函数),如果结果大于9223372036854775807,你可以得到意外的结果。一个浮点数字,不能是无符号的,对一个单精度浮点数,其精度可以是<=24,对一个双精度浮点数,是在25 和53之间,这些类型如FLOAT和DOUBLE类型马上在下面描述。FLOAT(X)有对应的FLOAT和DOUBLE相同的范围,但是显示尺寸和小数位数是未定义的。在MySQL3.23中,这是一个真正的浮点值。在更早的MySQL版本中,FLOAT(precision)总是有2位小数。该句法为了ODBC兼容性而提供。

FLOAT[(M,D)] [ZEROFILL]
一个小(单精密)浮点数字。不能无符号。允许的值是-3.402823466E+38到-1.175494351E-38,0 和1.175494351E-38到3.402823466E+38。M是显示宽度而D是小数的位数。没有参数的FLOAT或有<24 的一个参数表示一个单精密浮点数字。

 

DOUBLE[(M,D)] [ZEROFILL]
一个正常大小(双精密)浮点数字。不能无符号。允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、 0和2.2250738585072014E-308到1.7976931348623157E+308。M是显示宽度而D是小数位数。没有一个参数的DOUBLE或FLOAT(X)(25 < = X < = 53)代表一个双精密浮点数字。

DOUBLE PRECISION[(M,D)] [ZEROFILL]
 

REAL[(M,D)] [ZEROFILL]
这些是DOUBLE同义词。

DECIMAL[(M[,D])] [ZEROFILL]
一个未压缩(unpack)的浮点数字。不能无符号。行为如同一个CHAR列:“未压缩”意味着数字作为一个字符串被存储,值的每一位使用一个字符。小数点,并且对于负数,“-”符号不在M中计算。如果D是0,值将没有小数点或小数部分。DECIMAL值的最大范围与DOUBLE相同,但是对一个给定的DECIMAL列,实际的范围可以通过M和D的选择被限制。如果D被省略,它被设置为0。如果M被省掉,它被设置为10。注意,在MySQL3.22里,M参数包括符号和小数点。

NUMERIC(M,D) [ZEROFILL]
这是DECIMAL的一个同义词。

DATE
一个日期。支持的范围是’1000-01-01′到’9999-12-31′。MySQL以’YYYY-MM-DD’格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE列。

DATETIME
一个日期和时间组合。支持的范围是’1000-01-01 00:00:00′到’9999-12-31 23:59:59′。MySQL以’YYYY-MM-DD HH:MM:SS’格式来显示DATETIME值,但是允许你使用字符串或数字把值赋给DATETIME的列。

TIMESTAMP[(M)]
一个时间戳记。范围是’1970-01-01 00:00:00′到2037年的某时。MySQL以YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或YYMMDD格式来显示TIMESTAMP值,取决于是否M是14(或省略)、12、8或6,但是允许你使用字符串或数字把值赋给TIMESTAMP列。一个TIMESTAMP列对于记录一个INSERT或UPDATE操作的日期和时间是有用的,因为如果你不自己给它赋值,它自动地被设置为最近操作的日期和时间。你以可以通过赋给它一个NULL值设置它为当前的日期和时间。
TIME
一个时间。范围是’-838:59:59′到’838:59:59′。MySQL以’HH:MM:SS’格式来显示TIME值,但是允许你使用字符串或数字把值赋给TIME列。

YEAR[(2|4)]
一个2或4位数字格式的年(缺省是4位)。允许的值是1901到2155,和0000(4位年格式),如果你使用2位,1970-2069( 70-69)。MySQL以YYYY格式来显示YEAR值,但是允许你把使用字符串或数字值赋给YEAR列。(YEAR类型在MySQL3.22中是新类型。)

 

CHAR(M) [BINARY]
一个定长字符串,当存储时,总是是用空格填满右边到指定的长度。M的范围是1 ~ 255个字符。当值被检索时,空格尾部被删除。CHAR值根据缺省字符集以大小写不区分的方式排序和比较,除非给出BINARY关键词。NATIONAL CHAR(短形式NCHAR)是ANSI SQL的方式来定义CHAR列应该使用缺省字符集。这是MySQL的缺省。CHAR是CHARACTER的一个缩写。

[NATIONAL] VARCHAR(M) [BINARY]
一个变长字符串。注意:当值被存储时,尾部的空格被删除(这不同于ANSI SQL规范)。M的范围是1 ~ 255个字符。 VARCHAR值根据缺省字符集以大小写不区分的方式排序和比较,除非给出BINARY关键词值。 VARCHAR是CHARACTER VARYING一个缩写。

TINYBLOB
 
TINYTEXT
一个BLOB或TEXT列,最大长度为255(2^8-1)个字符。
BLOB
 

TEXT
一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。

MEDIUMBLOB
 
MEDIUMTEXT
一个BLOB或TEXT列,最大长度为16777215(2^24-1)个字符。
LONGBLOB
 
LONGTEXT
一个BLOB或TEXT列,最大长度为4294967295(2^32-1)个字符。

ENUM(‘value1′,’value2′,…)
枚举。一个仅有一个值的字符串对象,这个值式选自与值列表’value1′、’value2′, …,或NULL。一个ENUM最多能有65535不同的值。

SET(‘value1′,’value2′,…)
一个集合。能有零个或多个值的一个字符串对象,其中每一个必须从值列表’value1′, ‘value2′, …选出。一个SET最多能有64个成员。

介绍性指南

mod_perl 是个庞大而复杂的工具,它内建了许多模块帮助你方便地构建动态网站。这篇指南的目的是帮助你构建一个良好的 mod_perl 模块,并从中理解 mod_perl 的实现技术。我并不推荐使用这里介绍的技术来建立一个大型站点,尤其对于一个刚刚涉足 mod_perl 的人来说。但我推荐大家可以深入看一下它的一些内建的方案,比如 Mason, AxKit, EmbPerl, Apache::ASP 和 PageKit 等等。你需要什么?

本指南假设你已经有过安装和测试 mod_perl 的经验。以及较新版本的 Apache 的安装经验。因为有可能你需要在你的机器上实现时适当的修改本文提供的配置。我们需要你安装一些模块并且需要进入 Apache 的配置目录作修改。所以最好你有 root 权限来做这些事情。当然你还需要一个文本编辑器。切入正题

mod_perl 模块也是 Perl 模块,但它有较为特别的设计。最方便的创建一个 Perl 模块的方法就是使用标准的 Perl 分发自带的工具 h2xs 。你可以在命令行模式键入 h2xs 来看看它的参数列表。现在,到一个适当的目录开始一个新项目,键入:

   h2xs -AX -n Apache::Tutorial::First

h2xs 将会创建目录 Apache, 以及其他一些子目录.现在进入最深一级的目录看看:

   cd Apache/Tutorial/First

在这个新目录里面,你可以看到 6 个文件: README, Changes, First.pm, MANIFEST, Makefile.PL 和 Apache-Tutorial-First.t。它们的作用如下:

  • README

这个文件包含一些安装信息,模块依赖性,版权信息等

  • Changes

这个文件作为你的项目的修改日志(changelog)文件

  • First.pm

这是主模块文件,包含你的 mod_perl 句柄代码(handler code)。

  • MANIFEST

本文件用于自动构建 tar.gz 类型的模块版本分发。这样你就可以把你的模块拿到 CPAN 发布或者分发给其他人。它包含了你在这个项目中所有文件的列表。

  • Makefile.PL

这是标准的 Perl Makefile 构造器。用于创建 Makefile.PL 文件来编译该模块。

  • Apache-Tutorial-First.t

针对该模块的一些测试脚本。默认情况下它只是检查模块的载入,你可以添加一些新的测试单元。

好了,现在我们开始把 First.pm 变为可工作的 mod_perl 模块。使用文本编辑器打开该文件,修改后的内容如下:

package Apache::Tutorial::First;
use strict;
use vars qw/$VERSION/;
use Apache::Constants;
$VERSION = 0.01;
sub handler {
  my $r = shift;
  $r->send_http_header('text/html');
  print "<html><body>Hello World</body></html>";
  return OK;
}
1;

不要忘记文件末尾的”1;”,对于 Perl 来说,一个模块最后返回的非零值表示该模块已经被成功编译。

[编辑] 安装你的模块

h2xs 工具使我们的模块安装工作极为方便。在和你的 First.pm 文件相同的目录中。键入:

   perl Makefile.PL
   make
   make test

如果 make test 成功的话,你需要以 root 身份执行:

   make install

这样你就把你的模块安装到了 perl 的库目录(library directory)。添加该模块为 Apache 的一个句柄(handler)

现在我们需要进入 Apache 配置目录来修改配置文件,使我们的模块作为 Apache 内容处理阶段的处理器。打开 httpd.conf 文件,在末尾加入如下配置:

<Location /mod_perl_tutorial>

 SetHandler perl-script
 PerlHandler Apache::Tutorial::First

</Location>

然后保存配置文件,并且重新启动 apache 服务器:

   apachectl stop
   apachectl start

现在使用浏览器访问 http://localhost/mod_perl_tutorial ,你将如期的看到显示 “Hello World” 页面。

[编辑] 这里都发生了些什么?

好,在这里都发生了什么事情呢?

当 Apache 启动的时候,它读取它的配置指令并把适当的命令传递给相应的处理该命令的模块。这里有两个相关的指令 SetHandler 和 PerlHandler.

第一个指令 SetHandler 由 mod_mime 模块处理,该指令表示使用什么模块作为处理请求的主要部分。这里所设置的 perl-script 表示使用 mod_perl 来处理请求。

第二个指令 PerlHandler 由 mod_perl 模块来处理,它只是简单的说明使用我们的模块来处理请求的主要部分。有一点需要注意,无论何时在你有一个 PerlHandler 时,你需要相应的 SetHandler perl-script 配置指令。这样才能使你的 mod_perl 代码起作用。我总是认为这是一个弱点,但这将涉及 Apache 内部的处理机制,所以在将来这也很难改变。

现在请求来了,Apache 查看用什么模块来处理相应的 URI 并且在这里决定使用 mod_perl,而 mod_perl 知道它必须把请求发送给我们的模块,并调用我们模块的 handler() 函数作为 Apache::Request 对象的第一个参数。而我们的 handler() 函数的返回值决定了下一步 Apache 将要做什么。现在我们知道返回值 OK 意味着一切成功。 OK 是个从 Apache::Constants 模块导出的常量。

[编辑] 调试

如果你没有看到 “Hello World”, 那你可能看到了一个错误页面,或者其他什么完全不同的。第一步去查看错误日志看看到底是什么发生了错误。我习惯于在浏览器中请求后立即查看错误日志。你可以使用 tail 工具:

   tail -f /path/to/apache/logs/error_log

(使用你的真实 error_log 路径替换上面的路径。如果你不肯定它在哪里,查看你的 httpd.conf 文件的 ErrorLog 指令部分)

现在重新载入页面,然后 error_log 将告诉你什么地方出现了问题。更多的关于 perl 调试,请参见 perldebug.

[编辑] 加入更多

现在如果你想要针对上面的情况作一些修改,该如何做呢?不幸的,唯一一种安装模式如下:

  • 修改你的 First.pm 文件
  • 重新以 root 身份运行 make install
  • 重新启动 Apache

这也许很麻烦,特别是重新启动 Apache。针对这个问题,我们可以另外安装一个特别设计的模块来避免每次这样麻烦的做。首先你需要从 CPAN 下载并安装 Apache::Reload 模块(除非你已经使用 mod_perl 1.26 或者更高版本)。在这里 http://search.cpan.org/search?dist=Apache-Reload 下载。

解开 tar.gz 文件并进入新目录,执行:

   perl Makefile.PL
   make

然后到 root 身份执行:

   make install

现在再次打开 httpd.conf 文件,加入:

   PerlInitHandler Apache::Reload

这将测试所有有所改变的模块并在必要时自动重新载入新模块。这对于开发来说很有用,但会有性能损失,所以在开发完成之后,就将该特性关闭。

[编辑] 阅读更多

从这里开始你有很多事情需要去做。Apache API 本身就十分庞大,大多数都可以通过 perldoc Apache 看到相应的文档. 现在这个模块基本上没有什么价值,因为只有一个 URI 可以用于被该模块所控制( http://server/mod_perl_tutorial ),这使得它变得不够灵活。为了使一个模块可以处理多个 URI ,有许多解决办法,但最好的还是推荐使用 Apache::Dispatch 模块。可以在 CPAN 下载 http://search.cpan.org/search?dist=Apache-Dispatch. Apache::Dispatch 允许你保留标准的 mod_perl handler 构架,同时还允许多个函数和多个URIs 被派发。

接下来我不建议象例子中一样直接向浏览器输出内容。请考虑使用一些常用的模版技术,比如 Template-Toolkit, HTML::Template, 更甚于使用 XSLT 或者 XPathScript (有很多很多这样的模版技术可选,我们希望有一天可以有文章来讨论这些技术来帮助你来选择)。

1、MySQL常用命令

create database name; 创建数据库

use databasename; 选择数据库

drop database name 直接删除数据库,不提醒

show tables; 显示表

describe tablename; 表的详细描述

select 中加上distinct去除重复字段

mysqladmin drop databasename 删除数据库前,有提示。

显示当前mysql版本和当前日期

select version(),current_date;

2、修改mysql中root的密码:

shell>mysql -u root -p

mysql> update user set password=password(”xueok654123″) where user=’root’;

mysql> flush privileges //刷新数据库

mysql>use dbname; 打开数据库:

mysql>show databases; 显示所有数据库

mysql>show tables; 显示数据库mysql中所有的表:先use mysql;然后

mysql>describe user; 显示表mysql数据库中user表的列信息);

3、grant

创建一个可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令something做这个

mysql> grant all privileges on *.* to user@localhost identified by ’something’ with

增加新用户

格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”

GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY ’something’ WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* TO monty@”%” IDENTIFIED BY ’something’ WITH GRANT OPTION;

删除授权:

mysql> revoke all privileges on *.* from root@”%”;

mysql> delete from user where user=”root” and host=”%”;

mysql> flush privileges;

创建一个用户custom在特定客户端it363.com登录,可访问特定数据库fangchandb

mysql >grant select, insert, update, delete, create,drop on fangchandb.* to custom@ it363.com identified by ‘ passwd’

重命名表:

mysql > alter table t1 rename t2;

4、mysqldump

备份数据库

shell> mysqldump -h host -u root -p dbname >dbname_backup.sql

恢复数据库

shell> mysqladmin -h myhost -u root -p create dbname

shell> mysqldump -h host -u root -p dbname < dbname_backup.sql

如果只想卸出建表指令,则命令如下:

shell> mysqladmin -u root -p -d databasename > a.sql

如果只想卸出插入数据的sql命令,而不需要建表命令,则命令如下:

shell> mysqladmin -u root -p -t databasename > a.sql

那么如果我只想要数据,而不想要什么sql命令时,应该如何操作呢?

   mysqldump -T./ phptest driver

其中,只有指定了-T参数才可以卸出纯文本文件,表示卸出数据的目录,./表示当前目录,即与mysqldump同一目录。如果不指定driver 表,则将卸出整个数据库的数据。每个表会生成两个文件,一个为.sql文件,包含建表执行。另一个为.txt文件,只包含数据,且没有sql指令。

5、可将查询存储在一个文件中并告诉mysql从文件中读取查询而不是等待键盘输入。可利用外壳程序键入重定向实用程序来完成这项工作。例如,如果在文件my_file.sql 中存放有查

询,可如下执行这些查询:

例如,如果您想将建表语句提前写在sql.txt中:

mysql > mysql -h myhost -u root -p database < sql.txt

无法远程登入MySQL数据库的几种解决办法





 

  方法一:

  尝试用MySQL Adminstrator GUI Tool登入MySQL Server,Server却回复错误讯息:Host ‘60-248-32-13.HINET-IP.hinet.net’ is not allowed to connect to this

  MySQL server
  这个是因为权限的问题,处理方式如下:
  shell>mysql –user=root -p

  输入密码
  mysql>use mysql
  mysql>GRANT SELECT,INSERT,UPDATE,DELETE ON [db_name].* TO [username]@[ipadd] identified by ‘[password]‘;

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

  (其实就是在远端服务器上执行,地址填写本地主机的ip地址。)
  如果希望开放所有权限的话请执行:
  mysql>update user set select_priv=’Y’ , Insert_priv=’Y', Update_priv=’Y', delete_priv=’Y', Create_priv=’Y', Drop_priv=’Y',Reload_priv=’Y', shutdown_priv=’Y', Process_priv=’Y', File_priv=’Y', Grant_priv=’Y', references_priv=’Y',Index_priv=’Y', Alter_priv=’Y', Show_db_priv=’Y', Super_priv=’Y',Create_tmp_table_priv=’Y',Lock_tables_priv=’Y', Execute_priv=’Y',Repl_slave_priv=’Y',Repl_client_priv=’Y’ where user=’[username]‘;

  方法二:

  如何解决客户端与服务器端的连接(mysql) :xxx.xxx.xxx.xxx is not allowed to connect to this mysql serv
  1、进入mysql,创建一个新用户xuys:
  格式:grant 权限 on 数据库名.表名 用户@登录主机 identified by "用户密码";

  grant select,update,insert,delete on *.* to xuys@192.168.88.234 identified by "xuys1234";

  查看结果,执行:

  use mysql;
  select host,user,password from user;
  可以看到在user表中已有刚才创建的xuys用户。host字段表示登录的主机,其值可以用IP,也可用主机名,

  将host字段的值改为%就表示在任何客户端机器上能以xuys用户登录到mysql服务器,建议在开发时设为%。

  3、./mysqld_safe –user-root &

  记住:对授权表的任何修改都需要重新reload,即执行第3步。

  如果经过以上3个步骤还是无法从客户端连接,请执行以下操作,在mysql数据库的db表中插入一条记录:
  use mysql;
  insert into db values(‘192.168.88.234′,’%',’xuys’,'Y’,'Y’,'Y’,'Y’,'Y’,'Y’,'Y’,'Y’,'Y’,'Y’,'Y’,'Y’);

  update db set host = ‘%’ where user = ‘xuys’;
  重复执行上面的第2、3步。

  方法三:

  附加fbysss解决phpMyAdmin连接远程用户的方法:
  1.用root账户登录远程Mysql服务器,

  grant select,update,insert,delete on *.* to sss@192.168.0.114 identified by "sss";
  update user set host = ‘%’ where user = ’sss’;
  退出mysql,在shell下执行

  #mysqladmin -u root -p [password] reload
  #mysqladmin -u root -p [password] shutdown
  #/etc/rc.d/init.d/mysqld start

  2.修改phpMyAdmin目录下的config.inc.php文件,找到
  cfg['Servers'][i]['host'] 修改为远程服务器地址
  cfg['Servers'][i]['user'] 修改为sss
  cfg['Servers'][i]['password']修改为sss的密码

  要注意的是:grant all privilege并不能把“grant” 的权限赋给用户,如果要加,可以直接在mysql中使用use mysql; update user set Grant_priv =’Y'来达到要求。

2009年11月24日

基本格式 :
*  *  *  *  *  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

 

名称 : crontab

使用权限 : 所有使用者

使用方式 :

crontab file [-u user]-用指定的文件替代目前的crontab。

crontab-[-u user]-用标准输入替代目前的crontab.

crontab-1[user]-列出用户目前的crontab.

crontab-e[user]-编辑用户目前的crontab.

crontab-d[user]-删除用户目前的crontab.

crontab-c dir- 指定crontab的目录。

crontab文件的格式:M H D m d cmd.

 

M: 分钟(0-59)。

H:小时(0-23)。

D:天(1-31)。

m: 月(1-12)。

d: 一星期内的天(0~6,0为星期天)。

cmd要运行的程序,程序被送入sh执行,这个shell只有USER,HOME,SHELL这三个环境变量

说明 :

crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定

user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设

定自己的时程表。

 

 

参数 :

crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数

来指定使用那个文字编辑器(比如说 setenv VISUAL joe)

crontab -r : 删除目前的时程表

crontab -l : 列出目前的时程表

crontab file [-u user]-用指定的文件替代目前的crontab。

时程表的格式如下 :

f1 f2 f3 f4 f5 program

其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执

行的程序。

当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推

当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推

当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推

当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其馀类推

使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。

例子 :

#每天早上7点执行一次 /bin/ls :

0 7 * * * /bin/ls

在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次 /usr/bin/backup :

0 6-12/3 * 12 * /usr/bin/backup

周一到周五每天下午 5:00 寄一封信给 alex@domain.name :

0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata

每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分….执行 echo "haha"

20 0-23/2 * * * echo "haha"

注意 :

当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之

后加上 > /dev/null 2>&1 即可

 

例子2 :

#每天早上6点10分

10 6 * * * date

#每两个小时

0 */2 * * * date

#晚上11点到早上8点之间每两个小时,早上8点

0 23-7/2,8 * * * date

#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

0 11 4 * mon-wed date

#1月份日早上4点

0 4 1 jan * date

范例

$crontab -l 列出用户目前的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

 

名称 : crontab

使用权限 : 所有使用者

使用方式 :

crontab file [-u user]-用指定的文件替代目前的crontab。

crontab-[-u user]-用标准输入替代目前的crontab.

crontab-1[user]-列出用户目前的crontab.

crontab-e[user]-编辑用户目前的crontab.

crontab-d[user]-删除用户目前的crontab.

crontab-c dir- 指定crontab的目录。

crontab文件的格式:M H D m d cmd.

 

M: 分钟(0-59)。

H:小时(0-23)。

D:天(1-31)。

m: 月(1-12)。

d: 一星期内的天(0~6,0为星期天)。

cmd要运行的程序,程序被送入sh执行,这个shell只有USER,HOME,SHELL这三个环境变量

说明 :

crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定

user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设

定自己的时程表。

 

 

参数 :

crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数

来指定使用那个文字编辑器(比如说 setenv VISUAL joe)

crontab -r : 删除目前的时程表

crontab -l : 列出目前的时程表

crontab file [-u user]-用指定的文件替代目前的crontab。

时程表的格式如下 :

f1 f2 f3 f4 f5 program

其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执

行的程序。

当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推

当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推

当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推

当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其馀类推

使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。

例子 :

#每天早上7点执行一次 /bin/ls :

0 7 * * * /bin/ls

在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次 /usr/bin/backup :

0 6-12/3 * 12 * /usr/bin/backup

周一到周五每天下午 5:00 寄一封信给 alex@domain.name :

0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata

每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分….执行 echo "haha"

20 0-23/2 * * * echo "haha"

注意 :

当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之

后加上 > /dev/null 2>&1 即可

 

例子2 :

#每天早上6点10分

10 6 * * * date

#每两个小时

0 */2 * * * date

#晚上11点到早上8点之间每两个小时,早上8点

0 23-7/2,8 * * * date

#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

0 11 4 * mon-wed date

#1月份日早上4点

0 4 1 jan * date

范例

$crontab -l 列出用户目前的crontab.

下面是我在aix5.3上运行的一段发邮件的perl程序的一部分:
my $senderh = new Mail::Sender;
print "[SendEmail] 开始发送邮件5\n";
print $sender;
if ($senderh->MailFile({
smtp => $stmp,
from => $sender,
to =>$cc,
#cc =>$cc,
subject => $title,
msg => $content,
auth => ‘LOGIN‘, #LOGIN, PLAIN, CRAM-MD5 and NTLM
authid => $user,
authpwd => $passwd,
#charset=>’GB2312′,
#encoding=>’GB2312′,
b_charset=>’GB2312′,
file => "$file",
}) < 0) {
showTime(); print "[SendEmail] $Mail::Sender::Error\n";
return $false;
}
showTime(); print "[SendEmail] 发送邮件通知成功\n";
return $true;

以前是能够发送成功的,但是我最近又运行了一次,报错了,错误是:
Authentication protocol LOGIN is not accepted by the server

难道是什么服务被停止了吗? 哪位高手来指点一下呀!

2009年11月20日
PERL 语言中的q,qw,qr,qx,qq……符号用法(2008-07-22 09:54:31)
在perl语言中,有两个特殊而常用的符号qq qw,分别解释如下:
qq{foobar}的意思为意思为双引号字符串,可内插变量
相当于 "foobar"
qw{foo bar}的意思为用空格分解字符串,得到列表,相当于如下语句
split(‘ ‘,’foo bar’) 得到的结果是’foo’,'bar’

字符串比较等于用 eq

q运算符对’号转义的方式
$someword = ‘i \’ve some money’;
可以等价于:
$someword = q~i ‘ve some money~;

qq运算符对"号转义的方式
$someword = "i say \"ok!\".";
可以等价于:
$someword = qq~i say "ok!".~;

qw代表用空格来分隔元素,得到列表
@list = ("perl","Regular","network","web");
可以等价于:
@list = qw(perl Regular network web);

qr代表创建正则
$myword = "cnangel";
$replaceword = qr(cnangel);
$finalword = "ok" if ($myword =~ $replaceword);

引号执行运算符(quoted execution operator),qx//
qx/uname -p -r/

q 和 qq 运算符的特点:
※ q 和 qq 必须是一个标识符,而不是标识符的部分。例如:
q (abc)      用 () 作为分界符
q(abc)       用 () 作为分界符
q xabcx      用 x 作为分界符
都是合法的,而
qxabcx 就会被当作是一个标识符来处理,有谁会想到 qxabcx 居然是一个 q 运算式呢?

※ q 和 qq 后面的空格并不会影响语法,但是任何非空字符(不是空格、不是 TAB 字符、
   不是换行符)则会被当作界限符来使用。

※ 如果 q 和 qq 使用一些特殊的符号的时候,则必须配对。比如:< 只能和 >; 在一起
   用来当作界限符,而不能只用两个 < 作为界限符。而 | 则只能和它自己作为一对界
   限符。这些特殊的符号有:()、{}、[]、<>;

$myword = "cnangel";
$replaceword = qr(cnangel);
$finalword = "ok" if ($myword =~ $replaceword);

@list = ("perl","Regular","network","web");
可以等价于:
@list = qw(perl Regular network web);

$someword = ‘i \’v some money’;
可以等价于:
$someword = q~i ‘v some money~;

q// is generally the same thing as using single quotes – meaning it doesn’t interpolate values inside the delimiters.
qq// is the same as double quoting a string. It interpolates.
qw// return a list of white space delimited words. @q = qw/this is a test/ is functionally the same as @q = (‘this’, ‘is’, ‘a’, ‘test’)
qx// is the same thing as using the backtick operators.
I’ve never used qr//, but it’s got something to do with compiling regex’s for later use.
引自 http://blog.chinaunix.net/u1/52454/showart_1005919.html

2009年11月19日

MYSQL5忘记密码后重置root密码 – [服务器区]

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://linux.blogbus.com/logs/34695004.html

系统:DEBIAN etch 4.0

MYSQL数据库版本:5.0.27

(1)以 系统root权限登陆

(2)停止MYSQL服务器:
            /etc/init.d/mysql stop

(3)跳过授权表执行MYSQL服务器:
         mysqld_safe –skip-grant-tables –skip-networking &
        (注:参数–skip-grant-tables为跳过授权表;–skip-networking为不监听TCP/IP连接)

(4)执行MYSQL客户端:
         mysql

(5)使用mysql数据库
         use mysql;

(6)更新root密码
         update user set password=password(‘新密码’) where user=’root’;

(7)关闭mysql服务器,用正常方试起动
           /etc/init.d/mysql restart