燕之庐网站建设 - 优质网站设计公司

Posts Tagged ‘MYSQL’

MYSQL, php

2010/08/15

PHP mysql_num_rows() 函数

Tags: ,

定义和用法

mysql_num_rows() 函数返回结果集中行的数目。

语法

mysql_num_rows(data)
参数 描述
data 必需。结果集。该结果集从 mysql_query() 的调用中得到。

说明

mysql_num_rows() 返回结果集中行的数目。此命令仅对 SELECT 语句有效。要取得被 INSERT,UPDATE 或者 DELETE 查询所影响到的行的数目,用 mysql_affected_rows()

提示和注释

注释:如果使用 mysql_unbuffered_query(),则直到结果集中的所有行都被提取后 mysql_num_rows() 才能返回正确的值。

例子

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

$db_selected = mysql_select_db("test_db",$con);

$sql = "SELECT * FROM person";
$result = mysql_query($sql,$con);
echo mysql_num_rows($result);

mysql_close($con);
?>

输出类似:

3

北京网站设计公司

MYSQL

2010/06/20

mysql编码转换修改设置

Tags:

一、 mysql&gt; SHOW VARIABLES LIKE ’character_set_%’;
一、mysql> SHOW VARIABLES LIKE ‘character_set_%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
7 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE ‘collation_%’;
+———————-+——————-+
| Variable_name | Value |
+———————-+——————-+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+———————-+——————-+
3 rows in set (0.00 sec)
默认就是瑞典latin1,一下是换成我们自己的编码,如utf8:
外部访问数据乱码的问题就出在这个connection连接层上,解决方法是在发送查询前执行一下下面这句:

1. SET NAMES ‘utf8′;

它相当于下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

一般只有在访问之前执行这个代码就解决问题了,下面是创建数据库和数据表的,设置为我们自己的编码格式。
2. 创建数据库
mysql> create database name character set utf8;

3. 创建表
CREATE TABLE `type` (
`id` int(10) unsigned NOT NULL auto_increment,
`flag_deleted` enum(’Y',’N') character set utf8 NOT NULL default ‘N’,
`flag_type` int(5) NOT NULL default ‘0′,
`type_name` varchar(50) character set utf8 NOT NULL default ”,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

4. 修改数据库成utf8的.
mysql> alter database name character set utf8;

5.
修改表默认用utf8.
mysql> alter table type character set utf8;

6. 修改字段用utf8
mysql> alter table type modify type_name varchar(50) CHARACTER SET utf8;

二、编码算是MySql最难弄的问题了,研究了一下,总结点结果,部分来自其他人的经验, 如有不妥之处,请踊跃叽歪啊。。。

设置步骤:

一、编辑MySql的配置文件
MySql的配置文件Windows下一般在系统目录下或者在MySql的安装目录下名字叫my.ini,可以搜索,Linux下一般是 /etc/my.cnf

–在 [mysqld] 标签下加上三行
default-character-set = utf8
character_set_server = utf8
lower_case_table_names = 1 //表名不 区分大小写(此与编码无关)

–在 [mysql] 标签下加上一行
default-character-set = utf8

–在 [mysql.server]标签下加上一行
default-character-set = utf8

–在 [mysqld_safe]标签下加上一行
default-character-set = utf8

–在 [client]标签下加上一行
default-character-set = utf8

二、重新启动MySql服务
Windows可在服务管理器中操作,也可使用命令行:
net stop mysql 回车
net start mysql 回车
服务名可能不一定为mysql,请按自己的设置

Linux下面可是用 service mysql restart

如果出现启动失败,请检查配置文件有没有设置错误

三、查看设置结果
登录MySql命令行客户端:打开命令行
mysql –uroot –p 回车
输入密码
进入mysql后 执行 :show variables like “%char%”;
显示结果应该类似如下:

| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |

如果仍有编码不是utf8的,请检查配置文件,也可使用mysql命令设置:
set character_set_client = utf8;
set character_set_server = utf8;
set character_set_connection = utf8;
set character_set_database = utf8;
set character_set_results = utf8;
set collation_connection = utf8_general_ci;
set collation_database = utf8_general_ci;
set collation_server = utf8_general_ci;
以上命令有部分只对当前登录有效,所以不是很管用。
四、建库导入数据
导入sql脚本文件前,先确保该脚本文件及内容格式为UTF-8编码格式,
同以上方法登入mysql命令行,use 库名 进入相应数据库
set names utf8;
source sql脚本文件名;

五、程序连接字符串(此项与mysql设置无关,为程序开发使用)
对于较老的jdbc版本的驱动,连接字符创可使用一下相似格式:
jdbc:mysql://127.0.1:3306/test?useUnicode=true&characterEncoding=utf-8

六、附录
如果无法更改数据库配置文件,可以采取一下方法(不保证全部有效):
1、建数据库时设置数据库编码为utf-8
例如 create database `test` default character set utf8;

2、导入数据库sql的时候,请确保sql文件为utf-8编码
进入mysql命令行后输入 set names utf8;
再进入数据库 use test;
在导入sql脚本 source test.sql;

3、连接字符串类似如下:(开发相关,非数据库设置)
jdbc:mysql://127.0.1:3306/test?useUnicode=true&characterEncoding=utf-8

北京网站建设公司

MYSQL

2010/03/05

mysql命令行常用命令

Tags:

mysql命令行常用命令

第一招、mysql服务的启动和停止

  • net stop mysql
  • net start mysql

第二招、登陆mysql

  • mysql -u用户名 -p用户密码
  • mysql -uroot -p, 回车後提示你输入密码,输入12345,然後回车即可进入到mysql中了,mysql的提示符是:

mysql> 注意,如果是连接到另外的机器上,则需要加入一个参数-h机器IP 第三招、增加新用户

  • grant 权限 on 数据库.* to 用户名@登录主机 identified by “密码”
  • 增加一个用户user1密码为password1,让其可以在本机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然後键入以下命令:grant select,insert,update,delete on *.* to user1@localhost Identified by “password1″;如果希望该用户能够在任何机器上登陆mysql,则将localhost改为”%”。
  • 如果你不想user1有密码,可以再打一个命令将密码去掉。grant select,insert,update,delete on mydb.* to user1@localhost identified by “”;

第四招: 操作数据库 登录到mysql中,然後在mysql的提示符下运行下列命令,每个命令以分号结束。

  • 显示数据库列表。

show databases; 缺省有两个数据库:mysql和test。 mysql库存放着mysql的系统和用户权限信息,我们改密码和新增用户,实际上就是对这个库进行操作。

  • 显示库中的数据表:

use mysql; show tables;

  • 显示数据表的结构:

describe 表名;

  • 建库与删库:

create database 库名; drop database 库名;

  • 建表:

use 库名; create table 表名(字段列表); drop table 表名;

  • 清空表中记录:

delete from 表名;

  • 显示表中的记录:

select * from 表名;

第五招、导出和导入数据

  • 导出数据:

mysqldump –opt test > mysql.test 即将数据库test数据库导出到mysql.test文件,後者是一个文本文件 如:mysqldump -u root -p123456 –databases dbname > mysql.dbname 就是把数据库dbname导出到文件mysql.dbname中。

  • 导入数据:

mysqlimport -u root -p123456 < mysql.dbname。 不用解释了吧。

  • 将文本数据导入数据库:

文本数据的字段数据之间用tab键隔开。 use test; load data local infile “文件名” into table 表名;

SQL常用命令使用方法:

(1) 数据记录筛选:

sql=”select * from 数据表 where 字段名=字段值 order by 字段名 [desc]”

sql=”select * from 数据表 where 字段名 like ‘%字段值%’ order by 字段名 [desc]”

sql=”select top 10 * from 数据表 where 字段名 order by 字段名 [desc]”

sql=”select * from 数据表 where 字段名 in (’值1′,’值2′,’值3′)”

sql=”select * from 数据表 where 字段名 between 值1 and 值2″

(2) 更新数据记录:

sql=”update 数据表 set 字段名=字段值 where 条件表达式”

sql=”update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式”

(3) 删除数据记录:

sql=”delete from 数据表 where 条件表达式”

sql=”delete from 数据表” (将数据表所有记录删除)

(4) 添加数据记录:

sql=”insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)”

sql=”insert into 目标数据表 select * from 源数据表” (把源数据表的记录添加到目标数据表)

(5) 数据记录统计函数:

AVG(字段名) 得出一个表格栏平均值 COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计 MAX(字段名) 取得一个表格栏最大的值 MIN(字段名) 取得一个表格栏最小的值 SUM(字段名) 把数据栏的值相加

引用以上函数的方法:

sql=”select sum(字段名) as 别名 from 数据表 where 条件表达式” set rs=conn.excute(sql)

用 rs(”别名”) 获取统的计值,其它函数运用同上。

(6) 数据表的建立和删除:

CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )

例:CREATE TABLE tab01(name varchar(50),datetime default now())

DROP TABLE 数据表名称 (永久性删除一个数据表)

[编辑]

MySQL批 处理命令

批处理是一种非交互式运行mysql程序的方法,如同您在mysql中使用的命令一样,你仍然将使用这些命令。

为了实现批处理,您重定向一个文件到mysql程序中,首先我们需要一个文本文件,这个文本文件包含有与我们在mysql中输入的命令相同 的文本。 比如我们要插入一些数据,使用包含下面文本的文件(文件名为New_Data.sql,当然我们也可以取名为New_Data.txt及任何其他的合法名 字,并不一定要以後缀sql结尾):

  • USE Meet_A_Geek;
  • INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, “Block”);
  • INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, “Newton”);
  • INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, “Simmons”);

注意上面的这些句子的语法都必须是正确的,并且每个句子以分号结束。 上面的USE命令选择数据库,INSERT命令插入数据。

下面我们要把上面的文件导入到数据库中,导入之前要确认数据库已经在运行,即是mysqld进程(或者说服务,Windows NT下面称为”服务“,unix下面为”进程“)已经在运行。 然後运行下面的命令:

  • bin/mysql –p < /home/mark/New_Data.sql

接着按提示输入密码,如果上面的文件中的语句没有错误,那么这些数据就被导入到了数据库中。

命令行中使用LOAD DATA INFILE 从文件中导入数据到数据库: 现在您可能会问自己,”究竟为什么我要输入所有的这些SQL语句到文件中,然後通过程序运行它们呢?” 这样看起来好像需要大量的工作。很好,你这样想很可能就对了。但是假如你有从所有这些命令中产生的log记录呢?现在这样就很棒,嗯,大多数数据库都会自 动产生数据库中的事件记录的log。而大部分log都包含有用过的原始的SQL命令。因此,如果您不能从您现在的数据库中导出数据到新的 mysql数据库中使用,那么您可以使用log和mysql的批处理特性,来快速且方便地导入您地数据。当然,这样就省去了打字的麻烦。

LOAD DATA INFILE 这是我们要介绍的最後一个导入数据到MySQL数据库中的方法。这个命令与mysqlimport非常相似,但这个方法可以在mysql命令行中使用。也 就是说您可以在所有使用API的程序中使用这个命令。使用这种方法,您就可以在应用程序中导入您想要导入的数据。

使用这个命令之前,mysqld进程(服务)必须已经在运行。 启动mysql命令行:

  • bin/mysql –p

按提示输入密码,成功进入mysql命令行之後,输入下面的命令:

  • USE Meet_A_Geek;
  • LOAD DATA INFILE “/home/mark/data.sql” INTO TABLE Orders;

简单的讲,这样将会把文件data.sql中的内容导入到表Orders中,如mysqlimport工具一样,这个命令也有一些可以选择的参数。 比如您需要把自己的电脑上的数据导入到远程的数据库服务器中,您可以使用下面的命令:

  • LOAD DATA LOCAL INFILE “C:\MyDocs\SQL.txt” INTO TABLE Orders;

上面的LOCAL参数表示文件是本地的文件,服务器是您所登陆的服务器。 这样就省去了使用ftp来上传文件到服务器,MySQL替你完成了. 您也可以设置插入语句的优先级,如果您要把它标记为低优先级(LOW_PRIORITY),那么MySQL将会等到没有其他人读这个表的时候,才把插入数 据。可以使用如下的命令:

  • LOAD DATA LOW_PRIORITY INFILE “/home/mark/data.sql” INTO TABLE Orders;

您也可以指定是否在插入数据的时候,取代或者忽略文件与数据表中重复的键值。替代重复的键值的语法:

  • LOAD DATA LOW_PRIORITY INFILE “/home/mark/data.sql” REPLACE INTO TABLE Orders;

上面的句子看起来有点笨拙,但却把关键字放在了让您的剖析器可以理解的地方。

下面的一对选项描述了文件的记录格式,这些选项也是在mysqlimport工具中可以用的。他们在这里看起来有点不同。首先,要用到 FIELDS关键字,如果用到这个关键字,MySQL剖析器希望看到至少有下面的一个选项:

  • TERMINATED BY character
  • ENCLOSED BY character
  • ESCAPED BY character

这些关键字与它们的参数跟mysqlimport中的用法是一样的. The TERMINATED BY 描述字段的分隔符,默认情况下是tab字符(\t) ENCLOSED BY描述的是字段的括起字符。比方以引号括起每一个字段。 ESCAPED BY 描述的转义字符。默认的是反些杠(backslash:\ ). 下面仍然使用前面的mysqlimport命令的例子,用LOAD DATA INFILE语句把同样的文件导入到数据库中:

  • LOAD DATA INFILE “/home/mark/Orders.txt” REPLACE INTO TABLE Orders FIELDS TERMINATED BY ‘,’ ENCLOSED BY ‘”‘;

LOAD DATA INFILE语句中有一个mysqlimport工具中没有特点:

     LOAD DATA INFILE 可以按指定的列把文件导入到数据库中。

当我们要把数据的一部分内容导入的时候,这个特点就很重要。比方说,我们要从Access数据库升级到MySQL数据库的时候,需要加入一些栏目 (列/字段/field)到MySQL数据库中,以适应一些额外的需要。 这个时候,我们的Access数据库中的数据仍然是可用的,但是因为这些数据的栏目(field)与MySQL中的不再匹配,因此而无法再使用 mysqlimport工具。尽管如此,我们仍然可以使用LOAD DATA INFILE,下面的例子显示了如何向指定的栏目(field)中导入数据:

  • LOAD DATA INFILE “/home/Order.txt” INTO TABLE Orders(Order_Number, Order_Date, Customer_ID);

如您所见,我们可以指定需要的栏目(fields)。这些指定的字段依然是以括号括起,由逗号分隔的,如果您遗漏了其中任何一个,MySQL将会提 醒您^_^
ubuntu 下的 mysql 命令行方式。把 blue.sql 下载下来,运行

 (sudo) mysql
 create database XXXX;
 use XXXX;
 source blue.sql

北京网站建设公司

MYSQL

2010/01/29

MySQL 5.5.1 M2 发布

Tags:

该版本主要改进:

1. 增加了半同步复制接口的支持
2. 支持SQL标准中的 SIGNAL 和 RESIGNAL 语句
3. 增强的XML功能
4. 新增两种用户定义分区的类型
5. 允许删除某个表在某个分区中的所有数据
6. 主键缓存支持存放在分区中的 MyISAM 表
7. 新增 TO_SECONDS 函数

下载地址: http://dev.mysql.com/downloads/

网站建设

php

2009/11/21

又一关于apache和mysql组合的问题

Tags: ,

是关于Mysql扩展库的问题

可能是环境配的不对吧?但不知道到底怎么样能支持Mysql扩展库.
在百度上找到的方法都试过了,还是不行.

请各位大大伸出缓手~

Unexpected character in input: ‘\’ (ASCII=92) state=1 in

php, 产业新闻

2009/11/19

MySQL 5.1.41 发布

Tags:

该版本对 InnoDB 存储引擎做了一些改进,例如增加了参数用来调整 LRU 算法,同时这两个参数也将在 SHOW STATUS 命令中显示状态。同时还包括其他的一些bugfix 和安全补丁。

产业新闻

2009/11/18

最影响开源的4个人,MySQL CEO上榜

Tags:

1998年2月8日,布鲁斯裴伦斯(Bruce Perens)发表了著名的Open Source Definition(开源定义),开启了轰轰烈烈的开源运动。十多年后的今天,开源软件行业依旧保持着迅猛的发展势头。从红帽到MySQL,开源渗透到软件行业的方方面面,从完全免费的开放平台到核心功能收费的企业级应用,开源软件行业正在向商业化大步前进。在浩荡的开源大军中,谁是开源软件行业最有影响力的人?

最近,企业级的维基协作门户MindTouch面向欧洲和北美的开源企业执行官级别的高层官员做了一项调查:谁是开源行业中最有影响力的人?从行业内部人士的投票结果来看,排名在前4位的分别是SugarCRM的CEO 拉里奥古斯丁(Larry Augustin)、开源商业战略家马特阿塞(Matt Asay)、MySQL AB前执行官马丁古斯塔夫米科斯(Marten Gustaf Mickos)以及红帽CEO詹姆斯卫赫特(James Whitehurst)。

拉里奥古斯丁:开源要创造下一代软件

开源软件公司SugarCRM的CEO拉里奥古斯丁对开源行业所做出的贡献有目共睹。作为世界领先的商业开源客户关系管理软件,SugarCRM的开源结构可充分定制,提供按需租赁方式。在商业开源模式下,开发人员、客户和合作伙伴可以下载并检查源代码。现在,Sugar Community Edition以及相关产品的下载次数已突破500万次大关,社区注册会员人数超过8万名,其中有超过1?郾4万名的程序开发员在SugarCRM的社区网站sugarforge上创建了超过500个扩展模块以及75种语言包。

拉 里多次强调开源对于企业软件的重要性。在今年8月的一次访谈中,拉里表示:开源重新开发了企业软件的空间。一些希望拥有自己的解决方案和生态系统的大公司 正在出现,这将增加创业型企业的机会,而开源将在这一领域扮演重要角色。更多的项目开始为中小企业提供企业软件,而互联网将使中小企业的市场延伸至全球各 地。

拉里的另一项成就是创立了VA Linux,即SourceForge的前身。SourceForge公司不久前收购了开源社区Ohloh,而该社区的主要投资人正是拉里。在2007年召开的开源中国,开源世界高峰论坛圆桌会议上,拉里指出:开源并非是对软件的简单复制,而是以一种更好、创新的方式出现。人们选择Office、Linux更好地完成工作是自由竞争的结果,而不是像微软那样垄断的结果。在SourceForge平台上,拥有100多万个开发人员的11万个开源软件项目在孕育之中,微软也在SourceForge的平台上参与7万个开源软件项目的开发。开源的目的是要创造下一代软件,从根本上改变人们的工作方式和软件的创新方式。

马特阿塞:开源商机无限

马特阿塞是Alfresco的销售和商业开发主管,同时也是CNET网站的专栏作家。

阿塞是开源商业化的拥护者,他认为开源商业化正愈发充满生机。在最近一次关于开源商业化趋势的会议上,阿塞指出:目前的问题在于接受开源后,如何最大化挖掘开源的商业价值。用户正在意识到,他们可以在开源项目中投入更少的资金而获取更大的收益。

金 融危机让互联网、计算机软件行业遭受了巨大冲击,对开源软件行业持悲观论调者也不在少数,但阿塞却对开源行业的发展充满信心。阿塞认为,开源软件与专有软 件最大的区别是成本。在财政支出不断减少的情况下,如何确保工程项目继续进行?开源软件给出了答案。在经济形势非常严峻的情况下,那些企业级的开源厂商, 如红帽、Mozilla等的软件一直都具备更好、更可靠的性能。

阿塞所在的Alfresco公司也有良好表现。即使是在危机横行,大批企业倒闭的时候,Alfresco的销售业绩也一路飙升。在阿塞看来,几乎每家开源软件公司都存在着一个共同点在经济下滑时销售上涨。

今年3月在旧金山召开的开源商业会议上,阿塞提出:经济不景气时,通常会看到企业有追逐价值的举动。一些很好的开源项目都会以更低的成本提供更卓越的技术。因此,在经济低迷时期,开源软件实际上会获得较大发展的机会。在企业的IT预算缩减的时候,我们常会看到涉足开源项目的大量尝试性举动,一旦经济复苏,开源项目就能收获丰硕的果实。

另外,阿塞也是开源软件付费的支持者。开源软件的商业化,正是开源行业发展的必然趋势,而付费则是一个重要途径。

马丁古斯塔夫米科斯:开源的SQL

米 科斯拥有芬兰赫尔辛基工业大学(Helsinki University of Technology)的技术物理学(Technical Physics)硕士学位。2001年1月至2008年2月期间,他担任MySQL的首席执行官,同时还是Mozilla Messaging和RightScale的董事会成员。

作为一个小型关系数据库系统,目前MySQL被广泛地应用在互联网上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择MySQL作为网站数据库。

2008年1月16日,Sun宣布以10亿美元收购MySQL。不久前,甲骨文又以74亿美元的代价,将Sun纳入麾下。米科斯曾经强烈要求欧盟委员会批准甲骨文收购Sun及其MySQL数据库部门的交易。可以说,米科斯在甲骨文收购Sun的过程中发挥了重要作用。

而对新版的MySQL部分功能采取收费的做法,米科斯表示:做这种改变的目的是为了确保MySQL可以有一个可行的产生收入的业务,这些最初只对付费用户提供的功能最终也将免费提供给开源社区。

詹姆斯卫赫特:国际金融危机是开源的机遇

去年1月,当詹姆斯卫赫特出人意料地当选为红帽CEO的时候,大家还对他有所担心。但时至今日,红帽的茁壮成长肯定了卫赫特上任以来的成绩。

担 任红帽CEO后,他力促与IBM合作,开发免费操作系统对抗微软。在谈到与IBM合作得到的收获时,卫赫特表示:开源运动将会继续发展,共享软件也将替代 私有的、封闭的软件。开源是一个更基础、更高级的开发模式,因此开发者会以更低的价格、更快的速度进行软件开发。用不了多久,开源将会占据整个软件行业。

对于经济危机对开源行业的影响,卫赫特也有自己的看法。去年在访问澳大利亚期间,卫赫特曾表示:持续不断的国际金融危机将给开源软件提供非常好的机遇,开源软件可能因此得到长足发展。全球性的金融危机导致人们不得不减少开支,而开源软件是他们最好的选择。

在今年8月举行的红帽开源云计算大会上,卫赫特指出:开源是一种已经流行了多年的软件模式,其先进性已经接受了众多企业的检验,而云计算技术是当今最为热门的信息技术,代表了信息技术的未来发展方向。开源与云计算是双胞胎。在云计算和开源的基础上,商业活动的成本更低而且更加灵活。

卫赫特对开源和云计算的看法指出了今后开源软件的发展方向。

还有很多的领袖级人物对开源行业做出了巨大贡献。可以说,开源行业为软件产业的发展开辟了一个崭新的空间,每个人都能从中获益,让我们的软件更有个性,使我们的商业活动成本更低。

网站建设公司

php

2009/11/13

apache的静态/动态编译在apache+php+mysql+gd中的应用

Tags: , , ,

apache1.3和apache2的静态/动态编译在apache+php+mysql+GD中的应用

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明

本文是在张微波的文章基础上改进而来,原始文章请见:
http://www.5ilinux.com/blog/archives/000010.html

Fedora Core 3服务器中的apache的静态/动态编译以及apache+php+mysql+gd的应用

我想大家有不少都成功实现apache+php+mysql+gd,网上的文章也有不少,但我发现不少文章都是抄来抄去,并且没有说明白编译的方式,有的索性apache1.3的编译方法原封不动的搬过来套在apache2.0,显然误导一些菜鸟。

我今天就以apache+mysql+php说一下静态编译和DSO动态编译的区别,我会分别拿apache1.3.27和apache2.0.46

说明,因为两个版本的编译命令是有所区别的。

系统和所需软件:
Redhat9.0
apache:1.3.27 和 2.0.46
php: 4.3.2
mysql:4.0.13

gd-2.0.33.tar.gzhttp://www.boutell.com/gd/
jpegsrc.v6b.tar.gzhttp://www.ijg.org/
libpng-1.2.7.tar.tarhttp://sourceforge.net/projects/libpng/
zlib-1.2.2.tar.gzhttp://sourceforge.net/projects/zlib/
freetype-2.1.9.tar.gzhttp://sourceforge.net/projects/freetype/

首先来安装mysql

先添加用户:
groupadd mysql
useradd mysql

然后编译mysql

tar zvxf mysql-4.0.13.tar.gz
cd mysql-4.0.13
./configure –prefix=/usr/local/mysql –with-zlib-dir=/usr –with-charset=gbk –sysconfdir=/etc –localstatedir=/var/mysql &&
make &&
make install

安装完成!(注:–with-charset=gbk是使mysql支持中文查询)

然后初始化数据库:

/usr/local/mysql/bin/mysql_install_db

设置权限:

chown -R root.mysql /usr/local/mysql
chown -R mysql.mysql /var/mysql

复制配置文件:

cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf

复制启动文件:

cp /usr/local/mysql/share/mysql/mysql.server /usr/local/mysql/share/mysql/mysqld
chmod a+x /usr/local/mysql/share/mysql/mysqld

启动mysql:

/usr/local/mysql/share/mysql/mysqld start

修改密码:初始的root密码是空的

/usr/local/mysql/bin/mysqladmin -u root -p password 1234
enter password:

把密码修改为1234,由于初始密码为空,所以enter password直接回车就行

测试一下新的密码:

mysql -u root -p mysql
enter password:1234

如果顺利的话就能进入mysql。

好了mysql就讲这么多,有什么问题也不要问我,我对mysql不是很熟悉。

然后安装gd

最新的GD库包括了对GIF的支持,所以不要打GIF补丁

http://sourceforge.net/ 好多源代码包可以在上面找到

安装步骤:

先安装zlib,freetype,libpng,jpeg,再装GD

1.装zlib

tar zxvf zlib-1.2.2.tar.gz
cd zlib-1.2.2
./configure
make
make install

2.安装libpng

tar zxvf libpng-1.2.7.tar.tar
cd libpng-1.2.7
cd scripts/
mv makefile.linux ../makefile
cd ..
make
make install
注意,这里的makefile不是用./configure生成,而是直接从scripts/里拷一个

3.安装freetype

tar zxvf freetype-2.1.9.tar.gz
cd freetype-2.1.9
./configure
make
make install

4.安装Jpeg

tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b/
./configure –enable-shared
make
make test
make install
注意,这里configure一定要带–enable-shared参数,不然,不会生成共享库

5.安装GD

tar zxvf gd-2.0.33.tar.gz
cd gd-2.0.33
./configure –with-png –with-freetype –with-jpeg
make install

好了下面是我们的重头戏,我将分别通过静态和动态DSO编译apache+php

至于什么是静态,什么是DSO动态我这里就不多讲了,本人个人倾向大家用DSO动态编译。

首先是apache1.3.29+php4.3.4的静态编译

apache第一次编译,并不要安装,因为php的编译需要apache至少已经编译过一次
tar zvxf apache_1.3.27.tar.gz
cd apache_1.3.27
./configure –prefix=/usr/local/apache

编译php

tar zvxf php4.3.4.tar.gz
cd php4.3.4
./configure –prefix=/usr/local/php –with-mysql=/usr/local/mysql
–with-apache=../apache_1.3.27 –enable-bcmath –with-zlib –with-gd –with-jpeg-dir –enable-gd-native-ttf –with-ttf –with-freetype-dir –enable-memory-limit –enable-zend-multibyte –disable-ipv6 –disable-path-info-check –with-iconv –with-pear –disable-debug &&
make &&
make install

第二次编译安装apache:
cd ../apache_1.3.29
./configure –prefi=/usr/local/apache –activate-module=src/modules/php4/libphp4.a –enable-module=rewrite &&
make &&
make install

cp ../php4.3.4/php.ini.dist /usr/local/php/lib/php.ini

修改/usr/local/apache/conf/httpd.conf

查找

在此范围添加

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

注意:apache和php的源码包在同一个目录,–with-apache=../apache_1.3.27是指向源码解压的目录

ok!静态编译完成,大家只要启动一下服务器
/usr/local/apache/bin/apachectl start

然后些个php测试页info.php:内容如下

<?php
phpinfo();
?>
正常的话,应该能看到php的信息了,恭喜你静态编译成功!!!

我们再来讲讲DSO动态编译的方法:

首先编译安装apache

tar zvxf apache_1.3.29
cd apache_1.3.29
./configure –prefix=/usr/local/apache –enable-module=so
–enable-module=rewrite –enable-shared=max &&
make &&
make install

so模块用来提供DSO支持的apachehe核心模块,rewrite是地址重写的模块,如果不需要可以不编译
enable-shared=max是指除了so以外的所有标准模块都编译成DSO模块。

然后编译php

tar zvxf php4.3.4.tar.gz
cd php4.3.2
./configure –prefix=/usr/local/php –with-mysql=/usr/local/mysql
–with-apache=../apache_1.3.27 –enable-bcmath –with-zlib –with-gd –with-jpeg-dir –enable-gd-native-ttf –with-ttf –with-freetype-dir –enable-memory-limit –enable-zend-multibyte –disable-ipv6 –disable-path-info-check –with-iconv –with-pear –disable-debug –with-apxs=/usr/local/apache/bin/apxs &&
make &&
make install

然后修改httpd.conf,方法同静态编译的方法

OK,DSO动态编译就完成了,大家应该看出明堂来了吧,中间有什么区别应该看的很清楚了吧!!!

接下来我们讲apache2.0.46+php4.3.2的编译方法,我这里只讲DSO动态编译,静态编译目前好像还不支持。

一样现编译安装apache

tar zvxf httpd-2.0.46.tar.gz

cd httpd-2.0.46

./configure –prefix=/usr/local/apache2 –enable-so
–enable-mods-shared=most &&
make &&
make install

大家注意了–enable-so相当与1.3.27的–enable-module=so,而–enable-mods-shared=most又等同与以前的
–enable-shared=max 这些区别大家要注意了,否则编译错了不要找我

然后还是编译PHP

tar zvxf php4.3.2.tar.gz

./configure –with-apache2=../httpd-2.0.52 –with-mysql=/usr/local/mysql –enable-bcmath –with-zlib –with-gd –with-jpeg-dir –enable-gd-native-ttf –with-ttf –with-freetype-dir –enable-memory-limit –enable-zend-multibyte –disable-ipv6 –disable-path-info-check –with-iconv –with-pear –disable-debug –with-apxs2=/usr/local/apache2/bin/apxs &&
make &&
make install

注意这里是apxs2!!!

修改httpd.conf与1.3.27也有所不同,大家寻找Add Type application/x-tar .tgz 在下面添加

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

另外要显示中文的话,
修改:

AddDefaultCharset gb2312

启动一下apache

/usr/local/apache2/bin/apachectl start

用那个info.php测试一下,应该不会有多大问题哦!!!

好了写了这么多,希望对大家有所帮助!!!

php, 开源动态

2009/11/11

开源数据库将进入战国时代,新领袖呼之欲出

Tags: , ,

MySQL被称为是“最受欢迎的开源数据库”,如今,它的命运却取决于Oracle与Sun并购案的结果。有消息说,正在调查该交易的欧盟委员会将在11月19日做出是否批准该交易的决定。2008年2月被Sun以10亿美元收购的MySQL,前路仍然难料。

有意思的是,10月27日,Red Hat宣布以1900万美元注资开源数据库厂商—EnterpriseDB。消息一出,立刻被业界解读为Red Hat另辟蹊径发展开源数据库,不想以后受制于Oracle和MySQL。

如果MySQL的大旗倒下了,众多力量分散且弱小的开源数据库将展开激烈的争夺,开源数据库市场也许将进入春秋战国时期,而谁又会是下一个市场领袖呢?

“标杆”MySQL

在几百亿美元规模的数据库市场中,开源数据库的份额微乎其微。以IDC 2007年对全球数据库市场的统计为例,在总共188亿美元的市场中,Oracle、IBM、微软位列前三位,合计市场份额达到83.8%,而MySQL 以3800万美元的收入占到0.2%。Gartner预计,2013年开源数据库市场将突破10亿美元,但与整个数据库市场相比,依然小得可怜。

不过,开源数据库却展示出了高成长性。Gartner数据显示,2008年开源数据库的收入增长了42.4%,开源数据库的使用增长了50%,被调查的企业中,73%正在使用开源数据库,相比上年的49%有很大增长。

在这个不大的市场上,MySQL有着重要的地位。中国开源软件推进联盟主席陆首群表示,MySQL、PostgreSQL、EnterpriseDB是全球三大开源数据库。MySQL既是一个开源的开发社区,提供自由下载使用的免费版本,也提供商品化的产品,收取技术支持服务费用。

数 据显示,截至2009年1月,MySQL的用户有1100万,谷歌、雅虎和亚马逊等许多互联网公司都是它的用户。被Sun收购之后,MySQL先后开发出 MySQL5.0、MySQL enterprise等新产品,在MySQL5.1对外开放的头10天内,下载次数就超过了25万次。

陆首群表示,MySQL在中国市场也有不错的销售业绩。2007年,华为、爱立信中国、西门子中国等大企业都采购了MySQL的产品。2008年,MySQL又获得了新浪等公司的青睐,当年在中国市场的销售额达到1500万元,估计今年的收入将超过2000万元。

因 此,MySQL的一举一动都是开源数据库市场的风向标。如今,它的前途因为Oracle与Sun并购的悬而未决而飘忽不定。尽管Oracle承诺会保持 MySQL的独立性,众多反对者还是担心,如果MySQL被最大的私有数据库厂商Oracle收归麾下,可能遭到Oracle的抛弃甚至打压。

MySQL前途难料

最近几年,在开源大势之下,Oracle、IBM、微软等已经纷纷向开源伸出了橄榄枝。“IBM和Oracle既有商业数据库,也有开源数据库,采取了两手发展的策略,问题只是什么时候从幕后走到台前罢了。”陆首群说。

不过,这些“大佬”虽然打出了开源的旗号,但他们离真正的开源还有很远的距离。这也是业界担忧MySQL的前景、强烈建议Oracle将MySQL出售给独立第三方的原因。

开放源代码软件社区领袖Richard Stallman在给欧盟委员会的信中表示,“如果Oracle是今日旧数据库市场的统治者,MySQL就是未来新兴数据库市场的主导者,MySQL可以被视为Oracle未来最重要的竞争对手。”

因此,一旦MySQL被Oracle所合并,Oracle不仅没有义务积极推销MySQL,或以合理价格提供其商业授权,更没义务拿自己的营收来改进MySQL。面对商业数据库软件与开源数据库之间的利益冲突,恐怕Oracle会优先保护其收费的数据库产品。

曾是MySQL股东和顾问的Florian Mueller表示,“让Oracle得到MySQL比让狐狸负责鸡舍更可怕,因为母鸡没有对狐狸构成威胁,而MySQL却让Oracle丢失客户,并不得不给一些因威胁可能离开的客户以折扣。”

Mueller 反对Oracle得到MySQL,他认为目前的事实表明,Oracle只是想借此摆脱自己的开源挑战者。Stallman也表示,MySQL被 Oracle合并将是一种倒退,可能会瓦解MySQL的核心开发者社群。而产生另一个足以与MySQL相提并论的数据库平台,恐怕还需要很多年的时间。

谁是下一个领袖?

“多 年来PostgreSQL一直活在MySQL的阴影下,现在也许是它大放异彩的时候了。过去,公司花费了太多的时间讨论与MySQL的竞争,以及如何从 Oracle移植过来。在刚刚发布Postgres 8.4数据库时,EnterpriseDB没有提及任何竞争对手,这是一个可喜的变化。”CNET网站的一篇文章说。

对Red Hat来说,注资EnterpriseDB是一笔不错的买卖。“Red Hat是一个开源比较全面的公司,既有Linux操作系统,又通过并购Jboss得到了开源中间件,这次又获得了开源数据库,开源产品线不断完善。”陆首群说。目前,很多企业在应用开源数据库的同时也使用开源操作系统,反映了市场需要的变化。

EnterpriseDB 在最近几年异军突起,成为支持和推动PostgreSQL发展的领先厂商。PostgreSQL一直是开源数据库市场的柱石,被称为“最先进的开源数据 库”。2008年3月,EnterpriseDB获得了新一轮总额达1000万美元的投资,其中就有IBM的参与。当时的文章显 示,EnterpriseDB拥有超过200家客户,预计2008年度实现盈利。

2007年7月,EnterpriseDB携带EnterpriseDB Advanced Server产品正式进军中国市场。资料显示,许多为Oracle设计的应用软件无需修改即可移植到EnterpriseDB上,也可以轻松地从 Microsoft SQL Server、MySQL和Sybase数据库移植过来。

陆首群认为,除了以IBM为首的J2EE、以微软为首的.Net架构外,由开源软件形成的LAMP(Linux、Apache、MySQL、PHP)架构正在蓬勃发展,成为三大IT架构之一。有了这样的架构,开源厂商可以为用户提供完整的解决方案,而开源数据库是其中不可或缺的一个部分。

“近日,美国的白宫网站完全采用了LAMP架构,美国国防部等机构也对安全性高、成本低、灵活性好的开源软件表示出了极大的兴趣。美国还出现了WAMP的混源架构,即在Windows操作系统的基础上,采用开源的中间件、数据库等。”陆首群表示。在市场需求不断释放的刺激下,越来越多的厂商开始挖掘开源的市场机会,新的开源数据库领袖正在形成。

产业新闻

2009/11/10

MySQL修改密码方法总结

Tags:

首先要声明一点,大部分情况下,修改MySQL是需要有mysql里的root权限的, 所以一般用户无法更改密码,除非请求管理员。

方法一使用phpmyadmin,这是最简单的了,修改mysql库的user表, 不过别忘了使用PASSWORD函数

方法二使用mysqladmin,这是前面声明的一个特例。 mysqladmin -u root -p password mypasswd 输入这个命令后,需要输入root的原密码,然后root的密码将改为mypasswd。把命令里的root改为你的用户名,你就可以改你自己的密码了。 当然如果你的mysqladmin连接不上mysqlserver,或者你没有办法执行mysqladmin, 那么这种方法就是无效的。 而且mysqladmin无法把密码清空。下面的方法都在mysql提示符下使用,且必须有mysql的root权限:

方法三 mysql> INSERT INTO mysql.user (Host,User,Password) VALUES(’%',’jeffrey’,PASSWORD(’biscuit’)); mysql> FLUSHPRIVILEGES确切地说这是在增加一个用户,用户名为jeffrey,密码为biscuit。 在《mysql中文参考手册》里有这个例子,所以我也就写出来了。注意要使用PASSWORD函数,然后还要使用FLUSH PRIVILEGES。

方法四 和方法三一样,只是使用了REPLACE语句 mysql> REPLACE INTO mysql.user (Host,User,Password) VALUES(’%',’jeffrey’,PASSWORD(’biscuit’)); mysql> FLUSH PRIVILEGES

方法五 使用SETPASSWORD语句, mysql> SET PASSWORD FOR jeffrey@”%” = PASSWORD(’biscuit’); 你也必须使用PASSWORD()函数, 但是不需要使用FLUSH PRIVILEGES。

方法六使用GRANT … IDENTIFIED BY语句 mysql> GRANT USAGE ON *.* TO jeffrey@”%” IDENTIFIED BY ‘biscuit’; 这里PASSWORD()函数是不必要的,也不需要使用FLUSH PRIVILEGES。注意: PASSWORD() [不是]以在Unix口令加密的同样方法施行口令加密。