ios公司开发者账号申请分享攻略
好不容易终于申请下来了ios 公司开发者账号,真是一路艰辛和漫长啊,特别是对于远在大洋彼岸的大中华国家。以下我就分享一下这一路下来的经验,希望对于那些新手同仁们有所帮助。
iso开发者账号分为 个人(individual),公司(company),企业(enterprise)三种类型。个人账号只能有一个开发者,公司账号可以允许多个开发者协作开发(比如可以共享开发平台等,这个对于需要多人协作开发的好处很多)。企业账号,其app只能用于内部员工使用,是无法对外公开的,所以,普通情况下大家都是选择个人或者公司账号。
开通公司账号需要注册费99美元,不过这个是后话,因为前面要经过多个步骤,才会达到付款这一步。
1.1. 第一步信息注册
到 http://developer.apple.com/programs/ios/ 这个开发者账号注册入口,开始enroll(注册)。如果你已经有apple的个人账号了,那你可以将你的个人账号作为开发者账号,不然你就新申请一个账号。(我是新申请一个账号)
个人apple账号注册
记住,当让你选择你是注册成为个人或者公司时,请选择公司。注册是填信息一定要注意,不要乱填,要真是填写,不然后面验证时你就麻烦了。当问你你要选择那个开发平台时,你要选择ios
公司信息填写
当你注册完个人apple账号,就会转入公司信息填写。公司信息填写也要真实填写,这个是会和你的公司营业执照挂钩的,后面审核会用到。注册信息只能是用英文的,所以对于没有没有英文名的公司和地址,都要先去处理这些东西了。填写完公司信息,下一步就是填写邮件(这个后期会用来跟apple开发者中心联系)和代表人(你可以选择你自己或者你老板的名称,都可以)。接下来就是等待对方审核了,这一般会等待1-2天,如果审核过了,对方会给你发邮件。
1.2. 第二步传真资料
apple那边如果通过了你的公司信息,就会发邮件要你传送资料过去(对方会用 devenroll@apple.com这个邮件)。你需要传送你的公司营业执照,一封证明你公司英文名的信件(这个其实只要一句话说一下就好了,比如你就写此信标明我们公司的英文名是 XXXX就ok了),公司盖章。然后传真过去。很多国内公司都无法传真到国外,这个时候你可以使用网络传真(我就是这么做的),推荐用 http://faxzero.com/
这一步是最麻烦的,要等3-4天的审核期,
1.3. 第三步,电话验证
如果你的传真对方通过了,对方会发邮件给你,让你打电话进行验证。里面有个中文区电话,你可以选择打这个电话。(对方接电话的很像是个老外,听起来中文不是很纯正,不过还行,哈哈)
1.4. 第四步付款
电话验证完,一般几分钟你就会收到邮件让你付款。apple是不开通国内在线付款的,所以,你得填一张purchase form。你要准备一张跨国的信用卡(比如visa,或者mastercard等),把你的信用卡信息填进去,然后吧purchase form再次传真过去。基本上等2天后,如果对方通过你的付款,你就正式开通啦。
apple的开发者账号申请比android的麻烦多了,希望大家都能一切顺利。
推荐几个经典 iOS 开源类库及工具
几个常用的开源类库及下载地址:
1.json json编码解码
2.GTMBase64 base64编码解码
3.TouchXML xml解析
4.SFHFKeychainUtils 安全保存用户密码到keychain中
5.MBProgressHUD 很棒的一个加载等待特效框架
6.ASIHTTPRequest http等相关协议封装
7.EGORefreshTableHeaderView 下拉刷新代码
8.AsyncImageView 异步加载图片并缓存代码
9.类似setting的竖立也分栏程序
10款iOS高效开发必备的Objective-C类库
因为iOS SDK相对比较底层,所以开发者就得受累多做一些体力活。不过幸运的是,有很多第三方的类库可以用来简化很多不必要的工作.经过作者团队的慎重讨论,他们 评选出了10款能够极大提高iOS开发效率的类库,根据原文作者的评价来看,基本上有了这10款工具,做iOS开发就真的跟泡Cocoa一样了。
MBProgressHUD——进展指示符库
苹果的应用程序一般都会用一种优雅的,半透明的进度显示效果,不过这个API是不公开的,因此你要是用了,很可能被清除出AppStore。而 MBProgressHUD提供了一个替代方案,而且在用户角度上,实现的效果根本看不出和官方程序有什么差别。同时还提供了其他附加功能,比如虚拟进展 指示符,以及完成提示信息。整合到项目里也很容易,这里不细谈了。
ASIHttpRequest——HTTP Network库
iPhone当然也有自己的HTTP Network API,那为什么要用ASIHttpRequest呢?因为官方的API简直跟话痨似的,太罗嗦了!ASIHttpRequest库极大的简化了网络通 信,提供更先进的工具,什么文件上传工具,重定向处理工具、验证工具、等等。只要你手头的东西跟HTTP有关,用这个绝对能让你感觉道生活有美好!先看一 段代码就体会到了。
(void) loadAppDevMag
{
NSURL *url = [NSURL URLWithString:@"http://www.appdevmag.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];
}
- (void)requestFinished:(ASIHTTPRequest *)request
{
// Use when fetching text data
NSString *responseString = [request responseString];
}
JSON Framework——JSON支持
如果你做的应用和网站服务器有交互,那就得用到JSON了。但事实上,iOS平台的原生类库根本就不支持JSON,这就略犀利了吧?不过JSON框 架满足了你的所有需求,包括一个解析器将JSON字符串解析成对象;以及一个生成器从对象生成字符串。这个库根本就是太流行了,JSON提过很多次了,具 体特点就不多讲了,所谓“一段代码胜千言”,下面用一段代码演示一下吧。
// JSON string -> NSDictionary
NSString *jsonString = @"{\"foo\": \"bar\"}";
NSDictionary *dictionary = [jsonString JSONValue];
NSLog(@"Dictionary value for \"foo\" is \"%@\"", [dictionary objectForKey:@"foo"]);
// NSDictionary -> JSON string
NSString *newJsonString = [dictionary JSONRepresentation];
Flurry——详尽的使用统计
通过Furry你可以得到应用的用户人数,用户活跃度,用户来源等统计信息。但是他最厉害的地方是,你可以追踪应用本身的事件和错误记录,所有这些 数据都会在一个类似Google Analytics的界面上显示,这样就很容易掌握用户的行为和出现的问题。当然,这个星球上很多统计工具,但是这款是作者个人比较推崇的解决方案。

RegexKitLite——正则表达式支持
正则表达式大家都知道。但是iPhone SDK居然当他不存在?这怎么能忍啊!果断用RegexKitLite。虽然叫的是Lite,但是功能很full。示例代码。
// finds phone number in format nnn-nnn-nnnn
NSString *regEx = @"[0-9]{3}-[0-9]{3}-[0-9]{4}";
for(NSString *match in [textView.text componentsMatchedByRegex:regEx]) {
NSLog(@"Phone number is %@", match);
}
Facebook iOS SDK——Facebook API类库
大体来讲就是iPhone上的Facebook login,完全支持Facebook Graph API和the older REST api。如果你的应用跟Facebook有关,相信我,用这个吧。

SDWebImage——简化网络图片处理
用SDWebImage调用网站上的图片,跟本地调用内置在应用包里的图片一样简单。操作也很简单,举例说明
[imageView setImageWithURL:[NSURL URLWithString:@”http://examp
类似的功能在Three20里也有,这个过会儿再说。相比而言,SDWebImage主要是提供一个小而精的简捷方便的解决方案
GData client——iPhone上所有Google相关服务的类库
名字就说明一切了。跟Google相关的,值得一提的是,这个项目很开放。有很多示例程序供下载。
CorePlot——2D图形绘图仪
CorePlot有很多解决方案将你的数据可视。,同时也会提供各种迷人的图形效果,比如棒状图、饼状图、线状图等等,在他们网站上也提供了大量的范例图形,很多股票价格应用,游戏分数,个人财务管理都在用。
Three20——通用iOS库
Three20类库是Facebook自己做的,大而全是他最大的特色。把他整合到已有的项目中可能得费点周折,不过如果一开始你就用上了Three20,尤其是牵扯到很多web相关的项目的时候,你就能深刻体会到神马叫给力了。

转自 http://mobile.csdn.net/a/20110317/294018.html
如何联机调试和发布 iPhone App
首先登录到
http://developer.apple.com/iphone/index.action
如果已经购买了99$, 登录进去后会看到如下地方(图1)

点进去会看到如下界面(图2)

这里我要提一下,公司和个人的$99 Team里面的内容是有所不同的(至少我发现有不同)
公司的Team下面可以加入Member 而个人的不能加入Member只能是一个人,不过这里并无大碍,不妨碍我们下面的内容。
点击进入 Certificates 看到如下内容(图3)

点击图中红色部分 会下载下来一个名字为 AppleWWDRCA.cer 的东西
这个是调试发布IPHONE 程序必须的一个东西,这个东西我们只要下载一次就够了,即使你有N个IDP,那么无论是调试程序,还是发布程序,那也只需要一个,后面我们要说到Distribution页面时,也有这个链接,如果已经下载过,那么就不用再下这个了。(最初因为对这个流程不懂,我下载了N次这个),
下完之后,点击这个,这个东西就会装到自己的机器上。
打开你的 Keychain Access ,如果dock里面没有到 C盘 Applications\Utilities下面去找Keychain Access,中文名字好像叫” 钥匙串…” 打开这个,你会看到如下(图4)

这代表你已经装进去了。
下面,我们打开Keychain的这个菜单(图5)

按着下面的图来
(图6)

(图7)

(图8)

然后continute
就会生成一个CertificateSigningRequest.certSigningRequest 的文件,在你的桌面上哦
下一步(图9):

点击Request Certificate(图10)

点击Choose File(图11)

选中CertificateSigningRequest.certSigningRequest
点击Choose(图12)

点击Submit
(图13)

点击Approve
(图14)

这时你的证书是牌Pending的状态
刷新一个网页,OK就处于如下状态
(图15)

这时点击 Download按钮,会得到一个developer_identity.cer 双击这个文件
(图16)

点击OK
这时再打开你的keychain 看看 会是如下结果
(图17)

切记这时能看到下面那个 钥匙 状的东西,如果没有这个,是不可能调试的,以前有时,我经常看不到那个 钥匙 状的东西
OK,我们继续
打开Devices 那一项
(图18)

点击 Add Devices
(图19)

给自己的设备取个名字例如MyIPod
DeviceID 就是自己IPod或IPHONE的机身号(40位),机身号的获取方法有很多,可能通过 xcode 的window->Organizer 来取得
(图20)

然后填入表中并点击summit
图21

下面我们来搞APPID
图22

点击NewAppID
图23

第一处,随便写个名字就行了, 我以AppID为例
第二处,一定要注意了,一定要按着这样的格式写
我这里写的是
com.abc.*
你也可以写成 com.xyz.* com.google.*
尽量中间那个变量有点意义,一般情况下是公司的名字。
切记一定要写成这种格式,不然以后会有麻烦
然后submit
图24

继续Provisioning页面
图25

点击New Profile
按着我的填一下
图26

填完后 Submit
图27

Download 你会得到一个 DevProvision.mobileprovision 的文件,这个文件是要装到手机里面的
将这个拖动到organizer 里面
图28

拖动后如图29

这时打开你的IPOD 你会发现在 设置->通用->描述文件 里面有个东西,那就是你的证书了
然后再双击DevProvision.mobileprovision这个文件,然后你的xcode 就被激活,这时查看C盘
Users\用户名\Library\MobileDevice\Provisioning Profiles下面 是不是有了一个
XXXXXX-XXXXXX-XXXXX-XXXXXX.mobileprovision的文件?
下面随便打开一个IPHONE的工程
打开那个工程的plist文件,把Bundle identifier改成如下
图30

现在大概你知道 abc 是什么东西了吧
打开这个工程的info
图31

然后按着下图改一下设置(切记选中你该选中的那一项)
图32

如果你想选中的那一项是灰色的,那么你前面的某些流程一定出了问题
然后还有一处需要确认,如下(图33)

请确认,红色是部分是你应该选中的
图34

OK
现在已经大功告成了 99.9999%了
选中Device… Debug 然后 Build and Go
图35

程序肯定已经跑在你的机器上了,如果不行,那么重起一下你的IPOD,如果再不行那就重起一下你的电脑,如果再再不行那就自己想办法吧
续
接着如何发布程序
打开Certificicates 的Distribution页面
(图36)

点击 Request Certificate按钮(有上面联机调试的步骤这个过程一定很熟了吧)
(图37)

选中CertificateSigningRequest.certSigningRequest 文件(这个文件在联机调试的过程中已经生成过了),
图38

选中然后点击Submit
图39

点击Appove
图40

这时需要刷新一下页面
图41

点击DownLoad
会得到一个名为distribution_identity.cer 的文件
双击这个文件,会有如下提示
图42

点击OK
然后打开keychain 就会看到如下的图
图43

这时你的电脑就已经具备发布程序的证书了
下面打开Provisioning 的Distribution页面
图44

点击New Profile
然后按着下图填一下,Profile Name 随便写个名字就行了
图45

然后Submit
图46

刷新一下
图47

OK现在Download ,你会得到一个 Distribution.mobileprovision 的文件
双击这个文件,你的xcode 会被激活
查看C盘
Users\用户名\Library\MobileDevice\Provisioning Profiles下面 又多了一个
XXXXXX-XXXXXX-XXXXX-XXXXXX.mobileprovision的文件
现在我们再配置一下xcode
图48

打开Configurations 页面
选中Release 然后Duplicate 一下
图49

Duplicate之后如下图
图50

我们把名字改成Distribution
图51

接着我们切换到Build 页面
图52

图中1处选中Distribution 2处选中Distribution
然后
图53

图54

确定图54中,是你应该选的,不然build时会出现签名错误
确定之后,继续
图55

选中Device 和 Distribution
OK
图56

Build OK 大功告成了99.9%了
这时如果有签名错误,那一定是你上面某个地方出了问题
成功后
图57

其中的iHide 就是我们要上传的东西,在上传之前,我们要把他压缩成 zip 包
现在我们在浏览器中输入
itunesconnect.apple.com
登录一下
图58

进入Manage Your Applications
图59

点击Add New Application
Linux操作下的进程管理利器Supervise
Supervise是daemontools的一个工具,可以用来监控治理unix下的应用程序运行情况,在应用程序出现异常时,supervise可以重新启动指定程序。本文简单介绍一下supervise的安装和使用。
一、 安装
创建
/pacakage目录(你可以创建任意目录,这里使用package只是为了保持与英文作者的一致):
mkdir -p /package
chmod 1755 /package
cd /package
下载daemontools-0.76.tar.gz到/package目录,解压该包。
tar xvzf daemontools-0.76.tar.gz
cd admin/daemontools-0.76
编译并安装daemontools程序
package/install
二、使用supervise程序进行程序治理监控
supervise的执行命令是supervise Path ,其中Path 是指定路径,可以是相对路径,也可以是绝对路径。在Path路径下,必须有一个run的脚本,supervise调用的就是这个脚本,并监控治理该脚本中运行的程序。
supervise的一个重要的功能就是可以检测出run脚本中执行的程序是否正常工作,若发现其已经死掉,supervise将会重新执行run脚本,重新启动指定程序。这对于很多服务端程序来说是十分必要的,没有人愿意在深夜2点的时候从被窝里爬出来重新启动服务器。
下面是一个简单使用supervise的例子。
三、例子
假定已经安装好daemontools,建立一个test目录,进入该目录
mkdir test
cd test
在该目录下写一个简单测试程序test.c:
#include
#include
int main()
{
int ix = 0;
for(;; ix )
{
printf(“%d
“, ix);
sleep(1);
}
return 0;
}
编译test.c输出为test。
gcc -o test test.c
编写一个脚本run,来执行test程序,以便supervise进行调用。
#!/bin/sh
echo “start test!”
./test
退到上级目录,执行 supervise test 看看效果:
cd ..
supervise test
执行killall -9 test,杀死test进程,你会发现supervise会重新启动test进程。当然假如程序core dump,supervise同样会重新启动程序。
MYSQL使用指南
MYSQL初学者使用指南
有很多朋友虽然安装好了mysql但却不知如何使用它。在这篇文章中我们就从连接mysql、
修改密码、增加用户等方面来学习一些mysql的常用命令。
一、连接mysql。
格式: mysql -h主机地址 -u用户名 -p用户密码
1、 例1:连接到本机上的mysql。
首先在打开DOS窗口,然后进入目录mysql in,再键入命令mysql -uroot -p, 回
车后提示你输密码,如果刚安装好mysql,超级用户root是没有密码的, 故直接回
车即可进入到mysql中了,mysql的提示符是:mysql>
2、 例2:连接到远程主机上的mysql。假设远程主机的IP为:110.110.110.110, 用户
名为root,密码为abcd123。则键入以下命令:
mysql -h110.110.110.110 -uroot -pabcd123
(注:u与root可以不用加空格,其它也一样)
3、 退出mysql命令:exit(回车)
二、修改密码。
格式:mysqladmin -u用户名 -p旧密码 password 新密码
1、 例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令
mysqladmin -uroot password ab12
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
2、 例2:再将root的密码改为djg345。
mysqladmin -uroot -pab12 password djg345
另一种方法:
shell>mysql -u root -p
mysql>SET PASSWORD FOR root=PASSWORD(“root”);
三、增加新用户。(注意:和上面不同,下面的因为是mysql环境中的命令, 所以后面都带
一个分号作为命令结束符)
格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”
例1、增加一个用户test1密码为abc,让他可以在任何主机上登录, 并对所有数据库有
查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命
令:
grant select,insert,update,delete on *.* to test1@”%” Identified
by “abc”;
但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在
internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,
解决办法见例2。
例2、增加一个用户test2密码为abc,让其只可以在localhost上登录, 并可以对数据库
mydb进行查询、插入、修改、删除的操作(localhost指本地主机, 即mysql数据
库所在的那台主机),这样用户即使用知道test2的密码,也无法从internet上直
接访问数据库,只能通过mysql主机上的web页来访问了。
grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email]
identified by “abc”;
如果你不想test2有密码,可以再打一个命令将密码消掉。
grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email]
identified by “”;
有关数据库方面的操作。注意:你必须首先登录到mysql中,以下操作都是在mysql的提
示符下进行的,而且每个命令以分号结束。
一、操作技巧
1、 如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回
车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束
标志就OK。
2、 你可以使用光标上下键调出以前的命令。但以前我用过的一个mysql旧版本不支持。
我现在用的是mysql-3.23.27-beta-win。
二、显示命令
1、 显示数据库列表。
show databases;
刚开始时才两个数据库:mysql和test。 mysql库很重要它里面有mysql的系统信息,
我们改密码和新增用户,实际上就是用这个库进行操作。
2、 显示库中的数据表:
use mysql; //打开库,学过FOXBASE的一定不会陌生吧
show tables;
3、 显示数据表的结构:
describe 表名;
4、 建库:
create database 库名;
5、 建表:
use 库名;
create table 表名(字段设定列表);
6、 删库和删表:
drop database 库名;
drop table 表名;
7、 将表中记录清空:
delete from 表名;
8、 显示表中的记录:
select * from 表名;
三、一个建库和建表以及插入数据的实例
drop database if exists school; //如果存在SCHOOL则删除
create database school; //建立库SCHOOL
use school; //打开库SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default ‘深圳’,
year date
); //建表结束
//以下为插入字段
insert into teacher values(”,’glchengang’,'深圳一中’,’1976-10-10′);
insert into teacher values(”,’jack’,'深圳一中’,’1975-12-23′);
注:在建表中
(1) 将ID设为长度为3的数字字段:int(3),并让它每个记录自动加一: auto_increment,
并不能为空:not null,而且让它成为主字段primary key
(2) 将NAME设为长度为10的字符字段
(3) 将ADDRESS设为长度50的字符字段,而且缺省值为深圳。varchar和char有什么区别
呢,只有等以后的文章再说了。
(4) 将YEAR设为日期字段。
如果你在mysql提示符键入上面的命令也可以,但不方便调试。 你可以将以上命令
原样写入一个文本文件中假设为school.sql,然后复制到c:下,并在DOS状态进入目录
mysql in,然后键入以下命令:
mysql -uroot -p密码 < c:school.sql
如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你
只要将//的注释去掉即可使用)。
四、将文本数据转到数据库中
1、 文本数据应符合的格式:字段数据之间用tab键隔开,null值用来代替。例:
3 rose 深圳二中 1976-10-10
4 mike 深圳一中 1975-12-23
2、 数据传入命令load data local infile “文件名” into table 表名;
注意:你最好将文件复制到mysql in目录下,并且要先用use命令选表所在的库。
五、导出和导入数据:(命令在DOS的mysql in目录下执行)
导出表
mysqldump –opt school > school.sql
注释:将数据库school中的表全部备份到school.sql文件,school.sql是一个文本文件,
文件名任取,打开看看你会有新发现。
mysqldump –opt school teacher student > school.teacher.student.sql
注释:将数据库school中的teacher表和student表备份到school.teacher.student.sql文
件,school.teacher.student.sql是一个文本文件,文件名任取,打开看看你会有新发现。
导入表
mysql
mysql>create database school;
mysql>use school;
mysql>source school.sql;
(或将school.sql换为school.teacher.sql / school.teacher.student.sql)
导出数据库
mysqldump –databases db1 db2 > db1.db2.sql
注释:将数据库dbl和db2备份到db1.db2.sql文件,db1.db2.sql是一个文本文件,文件名
任取,打开看看你会有新发现。
(举个例子:
mysqldump -h host -u user -p pass –databases dbname > file.dump
就是把host上的以名字user,口令pass的数据库dbname导入到文件file.dump中。)
导入数据库
mysql < db1.db2.sql
复制数据库
mysqldump –all-databases > all-databases.sql
注释:将所有数据库备份到all-databases.sql文件,all-databases.sql是一个文本文件,
文件名任取。
导入数据库
mysql
mysql>drop database a;
mysql>drop database b;
mysql>drop database c;
…
mysql>source all-databases.sql; (或exit退出mysql后 mysql < all-databases.sql)
后记:
其实mysql的对数据库的操作与其它的SQL类数据库大同小异, 您最好找本将SQL的书看
看。我在这里只介绍一些基本的,其实我也就只懂这些了,呵呵。
最好的mysql教程还是”晏子”译的”mysql中文参考手册”。不仅免费,每个相关网站都有
下载,而且它是最权威的。可惜不象”PHP4中文手册”那样是chm的格式, 在查找函数命令的
时候不太方便。
3.打开数据库:use dbname;
显示所有数据库:show databases;
显示数据库mysql中所有的表:先use mysql;然后show tables;
显示表的列信息:describe user;(显示表mysql数据库中user表的信息);
4.创建一个可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令something做这个
GRANT ALL PRIVILEGES ON *.* TO [email=monty@localhost]monty@localhost[/email] IDENTIFIED BY ‘something’ WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO monty@”%” IDENTIFIED BY ‘something’ WITH GRANT OPTION;
5.删除授权:
REVOKE ALL PRIVILEGES ON *.* FROM root@”%”;
USE mysql;
DELETE FROM user WHERE User=”root” and Host=”%”;
FLUSH PRIVILEGES;
6. 创建一个用户custom在特定客户端weiqiong.com登录,可访问特定数据库bankaccount
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON bankaccount.*
TO custom@weiqiong.com IDENTIFIED BY ‘stupid’;
7.重命名表:
ALTER TABLE t1 RENAME t2;
为了改变列a,从INTEGER改为TINYINT NOT NULL(名字一样),
并且改变列b,从CHAR(10)改为CHAR(20),同时重命名它,从b改为c:
ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);
增加一个新TIMESTAMP列,名为d:
ALTER TABLE t2 ADD d TIMESTAMP;
在列d上增加一个索引,并且使列a为主键:
ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);
删除列c:
ALTER TABLE t2 DROP COLUMN c;
增加一个新的AUTO_INCREMENT整数列,命名为c:
ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT,ADD INDEX (c);
注意,我们索引了c,因为AUTO_INCREMENT柱必须被索引,并且另外我们声明c为NOT NULL,
因为索引了的列不能是NULL。
8.删除记录:
DELETE FROM t1 WHERE C>10;
6.改变某几行:
UPDATE t1 SET user=weiqiong,password=weiqiong;
7.使用name列的头10个字符创建一个索引:
CREATE INDEX part_of_name ON customer (name(10));
使用awstats分析Nginx的访问日志
使用awstats分析Nginx的访问日志 本文主要介绍如何通过awstats 来分析 nginx的访问日志,并通过 Nginx输出分析结果到浏览器。
前言
在实际的网站运营中,我们经常需要了解到网站的访问情况,例如每天有多少IP 在访问、PV数是多少、哪个 URL访问量最大、用户使用最多的浏览器是哪个、都是通过什么方式知道这个网站的以及有多少用户访问出错等等,通过掌握这些信息来提高用户的体验,从而改善网站的质量。一般我们可以通过一些免费的访问统计网站例如Google Analytics来或者这些信息。但不足之处是这类网站只能对页面进行分析,不包括静态文件;另外可能有很多的站长不愿意使用这类工具来暴露自己的数据,种种的这些因素使站长希望自己来分析访问日志。而 awstats就可以满足所有的这些需求。
Awstats是在 SourceForge上发展很快的一个基于 Perl的 WEB 日志分析工具,一个充分的日志分析让Awstats 显示您下列资料:
访问次数、独特访客人数,
访问时间和上次访问,
使用者认证、最近认证的访问,
每周的高峰时间(页数,点击率,每小时和一周的千字节),
域名/国家的主机访客(页数,点击率,字节,269域名/国家检测, geoip 检测),
主机名单,最近访问和未解析的 IP 地址名单
大多数看过的进出页面,
档案类型,
网站压缩统计表(mod_gzip 或者 mod_deflate),
使用的操作系统 (每个操作系统的页数,点击率 ,字节, 35 OS detected),
使用的浏览器,
机器人访问(检测 319 个机器人),
蠕虫攻击 (5 个蠕虫家族),
搜索引擎,利用关键词检索找到你的地址,
HTTP 协议错误(最近查阅没有找到的页面),
其他基于 URL 的个性报导,链接参数, 涉及综合行销领域目的.
贵网站被加入”最喜爱的书签”.次数.
屏幕大小(需要在索引页补充一些 HTML 标签).
浏览器的支持比例: Java, Flash, RealG2 reader, Quicktime reader, WMA reader, PDF reader.
负载平衡服务器比率集群报告.
Awstats 的运行是需要PERL 环境的支持,从awstats 的文档来看,它对Apache HTTP Server的支持是非常完美的,而当我们把 Web服务器换成 Nginx后,要运行 awstats变得很麻烦。首先 Nginx本身对 Perl的支持是比较弱的,甚至官方也不建议使用;另外在日志格式上有需要修改后才能运行。
本文主要介绍通过让 awstats对日志统计的结果生成静态页面,然后通过Nginx 输出以达到统计Nginx 访问日志的效果,其中还包括如何让Nginx 自动切割日志文件。
配置Nginx自动切割日志
跟 Apache HTTP Server(以下称Apache)不同的是,Apache可以将日志输出通过管道的方式进行重新定向,依此来进行自动的日志切割。Nginx在现今版本上还没能跟 Apache一样,通过%YY等参数按日期分批创建日志,但是通过给nginx 进程发送一个特定的信号,可以使nginx 重新生成日志文件。我们可以定期执行一个Shell 脚本来切换日志,重新命名或转移,具体的脚本如下:
# mv /usr/local/nginx/logs/access.log /usr/local/nginx/logs/access_`date +%Y%m%d`.log# kill `cat /usr/local/nginx/logs/nginx.pid` 再次启动nginx服务
将以上脚本内容保存为文件名为 logcron.sh存到自定的目录中,例如 /opt/nginx/sbin/logcron.sh
使用 Crontab 让该脚本程序在每天晚上11 点 59分自动执行,即可做到按天创建日志。
安装和配置Awstats
安装之前,必须确认你的服务器上 Perl的环境已经就绪。
查看当前环境 Perl版本的命令是 perl–version
我们还需要对 Nginx的日志格式做个小修改,不然 awstats将无法进行统计。
例子如下(加粗部分):
# vi /opt/nginx/conf/nginx.confserver {listen 80;server_name localhost;location ~ ^/web/ {root /data/web;index index.html;error_log off;charset gb2312;}log_format new_log #格式代称 (注意,如果有多个虚拟主机,代称不能一样)’$remote_addr – $remote_user [$time_local] $request ‘ ‘”$status” $body_bytes_sent “$http_referer” ‘ ‘”$http_user_agent” “$http_x_forwarded_for”‘; access_log logs/access.log new_log; #日志生成路径}
下载最新版本的 awstats包,下载地址请见文章最后的参考资料。把下载后的tar 包解压到任意目录中,例:/usr/local/awstats 。然后执行 tools目录中的 awstats_configure.pl配置向导,创建一个新的统计。
—–> Check for web server installEnter full config file path of your Web server.Example: /etc/httpd/httpd.confExample: /usr/local/apache2/conf/httpd.confExample: c:\Program files\apache group\apache\conf\httpd.confConfig file path (‘none’ to skip web server setup):#> none #因为我们这里用的是 Nginx,所以写 none,跳过。
回车
Your web server config file(s) could not be found.You will need to setup your web server manually to declare AWStatsscript as a CGI, if you want to build reports dynamically.See AWStats setup documentation (file docs/index.html)—–> Update model config file ‘/usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf’ File awstats.model.conf updated.—–> Need to create a new config file ?Do you want me to build a new AWStats config/profilefile (required if first install) [y/N] ?#> y #y 创建一个新的统计配置
回车
—–> Define config file name to createWhat is the name of your web site or profile analysis ?Example: www.mysite.comExample: demoYour web site, virtual server or profile name:#> www.moabc.net #统计网站的域名 例:www.moabc.net
回车
—–> Define config file pathIn which directory do you plan to store your config file(s) ?Default: /etc/awstatsDirectory path to store config file(s) (Enter for default):#>
使用默认直接回车,接下来便会出现以下的提示
—-> Add update process inside a schedulerSorry, configure.pl does not support automatic add to cron yet.You can do it manually by adding the following command to your cron:/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.moabc.net #回头把该命令填入crontab 按指定时间执行Or if you have several config files and prefer having only one command:/usr/local/awstats/tools/awstats_updateall.pl nowPress ENTER to continue… 回车继续A SIMPLE config file has been created: /etc/awstats/awstats.www.moabc.net.conf #新配置文件所在的路径You should have a look inside to check and change manually main parameters.You can then manually update your statistics for ‘www.moabc.net’ with command:> perl awstats.pl -update -config=www.moabc.netYou can also build static report pages for ‘www.moabc.net’ with command:> perl awstats.pl -output=pagetype -config=www.moabc.netPress ENTER to finish…
回车完成向导,接下来修改 www.moabc.net的统计配置
#vi/etc/awstats/awstats.www.moabc.net.conf
找到统计的日志文件的路径
LogFile=”/var/log/httpd/mylog.log”
改为
LogFile=”/opt/nginx/logs/access_%YYYY-0%MM-0%DD-0.log
对应上边 Nginx日志切割程序的所生成的目录存放结构,要注意Awstats 的年月日格式的跟Nginx 的写法有所不同。我们现在执行统计的顺序是:
Nginx 产生日志 –>日志切割 –>Nginx 继续产生日志 –>另存切割日志 –>交由Awstats统计–> 生成结果
在本文中 Awstats所统计的日志,是已切下来的那部分。也能调转顺序,先统计完了再切。不过这比较容易造成统计的遗漏。配置修改完成后,保存退出。然后我们可以开始试一下手动执行。
先执行日志切割脚本 logcron.sh 把 Nginx 的日志切下来。
然后执行 Awstats 日志更新程序开始统计分析。
# /opt/nginx/sbin/logcron.sh# /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.moabc.netCreate/Update database for config “/etc/awstats/awstats.www.moabc.net.conf” by AWStats version 6.7 (build 1.892)From data in log file “/opt/nginx/logs/access_20080804.log”…Phase 1 : First bypass old records, searching new record…Direct access after last parsed record (after line 450421)Jumped lines in file: 450421 Found 450421 already parsed records.Parsed lines in file: 120 Found 0 dropped records, Found 0 corrupted records, Found 0 old records, Found 120 new qualified records.
看到以上显示,证明日志切割和 Awstats都已经运行无误了。统计分析完成后,结果还在Awstats 的数据库中。在Apache 上,可以直接打开Perl 程序的网页查看统计。但本文开始时已经提到,Nginx对 Perl支持并不好,所以我们要换个方法,利用 awstats的工具将统计的结果生成静态文件,具体的步骤如下:
首先在 admin_web 目录下创建一个文件夹。例:/data/admin_web/awstats
然后让 Awstats 把静态页面生成到该目录中
# mkdir /data/admin_web/awstats# /usr/local/awstats/tools/awstats_buildstaticpages.pl -update \ -config=www.moabc.net -lang=cn -dir=/data/admin_web/awstats \-awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl
上述命令的具体意思如下:
/usr/local/awstats/tools/awstats_buildstaticpages.pl Awstats 静态页面生成工具
-update -config=www.moabc.net 更新配置项
-lang=cn 语言为中文
-dir=/data/admin_web/awstats 统计结果输出目录
-awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl Awstats 日志更新程序路径。
接下来,只需在nginx.conf中,把该目录配置上去即可。 例子如下:(加粗部分):
server {listen 80;server_name localhost;location ~ ^/web/ {root /data/web;index index.html;error_log off;charset gb2312;}location ~ ^/awstats/ { # html 静态页面目录 root /data/webroot/awstats; index index.html; access_log off; error_log off; charset gb2312; #最好把默认编码改成 gb2312避免浏览器因自动编码出现乱码的情况}location ~ ^/icon/ { # 图标目录 root /usr/local/awstats/wwwroot; index index.html; access_log off; error_log off; charset gb2312; }}
用浏览器查看到统计的详细结果http://youhostname/awstats/awstats.www.moabc.net.html
至此,使用 awstats已能完全支持 Nginx的日志统计。
配置Awstats自动运行
为了让整个日志的统计过程自动完成,我们需要设置crontab 计划任务,让Nginx 日志切割以及Awstats 自动运行,定时生成结果页面。
#vi /etc/crontab59 11 * * * root /opt/nginx/sbin/logcron.sh #半夜11:59 进行日志切割01 00 * * * root /usr/local/awstats/tools/awstats_buildstaticpages.pl \-update -config=www.moabc.net -lang=cn -dir=/data/admin_web/awstats \-awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl #凌晨00:01 Awstats进行日志分析:wq保存退出#crontab /etc/crontab 指定cron所执行的配置档路径
保护日志统计结果页面
一般站长都不愿随便让人知道自己站的真实流量,所以要把Awstats 统计结果页面进行密码保护。Nginx使用的是跟 Apache一样的密码加密格式,这里需要用到 apache自带的工具 htpasswd。
如果你在本机上默认装有 Apache,这你就只需在它的程序目录下运行
例:
#/usr/local/apache2/bin/htpasswd -c admin.pass admin #用户名为adminNew password: 输入密码Re-type new password: 重复输入Adding password for user admin 创建成功然后把 admin.pass 这个密码包找个的地方藏起来.修改 nginx.conf 在 location 中加入(加粗部分):server { listen 80; server_name localhost; location ~ ^/web/ { root /data/web; index index.html; error_log off; charset gb2312; } location ~ ^/awstats/ { # html 静态页面目录 root /data/admin_web; index index.html; access_log off; error_log off; charset gb2312; auth_basic “admin”; #用户名 auth_basic_user_file /opt/ngx/conf/admin.pass; #密码包路径 } location ~ ^/icon/ { # 图标目录 root /usr/local/awstats/wwwroot; index index.html; access_log off; error_log off; charset gb2312; }}修改 Nginx 配置完毕后,执行命令 killall –s HUP nginx 让 Nginx 重新加载配置即可。
MySQL中的定时执行
查看event是否开启
show variables like ‘%sche%’;
将事件计划开启
set global event_scheduler =1;
创建存储过程test
CREATE PROCEDURE test ()
BEGIN
update examinfo SET endtime = now() WHERE id = 14;
END;
创建event e_test
create event if not exists e_test
on schedule every 30 second
on completion preserve
do call test();
每隔30秒将执行存储过程test,将当前时间更新到examinfo表中id=14的记录的endtime字段中去.
关闭事件任务
alter event e_test ON
COMPLETION PRESERVE DISABLE;
开户事件任务
alter event e_test ON
COMPLETION PRESERVE ENABLE;
以上测试均成功,测试环境为mysql5.1以上版本,5.1以下版本不支持事件。
如果您的版本是不支持的,windows采用添加任务的方式,Linux采用cron的方式。
执行方式:mysql -u root -p**** -e “call test.execute_statistics()”
以上是个人所解决心得。