MIME能够让http协议传送非文本信息,比如传送mp3过去,一个mp3的音乐文件传递给客户端之后,客户端能否使用浏览器去播放这个mp3音乐,显然是不可以的,浏览器仅能够解码HTML的文档,那对于这样的多媒体音乐他如何处理,浏览器有插件,再不然就是浏览器调用与之匹配的外部程序来对其进行解码,这样使得我们本身浏览器所处理的文件的能力大大增强了,但他有一个隐患,如果对方发送过来一段恶意代码,而这段代码恰恰是你主机某个程序可以执行的,那结果就可想而知了,所以一般我们允许服务器端发过来的仅仅哪些静态的文档,那如果用户发过来是一个C++程序的话,很显然发送到客户端,客户端无法识别,无法识别就不能直接执行,必须要调用外部程序来执行它,这样就会安全很多,

动态网站:在服务器端或者客户端执行一段脚本或一段程序,这个程序的执行结果根据不同用户、不同客户端、不同主机执行场景而不同,这种才称为动态网站,所以动态网站一定使能根据用户请求做出对应响应,甚至于对不同用户它返回的内容是不一样的,根据客户端请求来返回不同结果;

动态网站分为客户端动态和服务器端动态,客户端动态意味着,我们服务器端开发是一段程序,但是这段程序源程序要下载到客户端本地,并且在客户端本地的运行环境中执行并且将执行结果通过浏览器显示出来,这种叫做客户端动态,服务器端动态,如果允许在客户端随意执行脚本或程序的话,那么这个网站制作者写了一段恶意代码,那么用户就遭殃了,因此一般来讲不期望也不建议使用客户端动态,早起在windows中Activex就是在客户端执行程序的一种机制;

JVM:Java Virtual Machine(JAVA虚拟机)

CGI:

protocol

web进程

编程语言

静态语言:编译型语言

C,C++,JAVA

有点:性能好;

缺点:每一次改动都需要重新编译,开发周期长,维护成本大;

动态语言:解释型语言

shell,perl,python

优点:便于维护,众多共享模块,开发周期短,维护成本小;

缺点:性能差;

facebook

动态语言 --> 静态语言

php --> Hiphop --> C++

bash

perl

python Django

java,jsp,ssh(Spring,Stuots,Hibernate)

ruby,rails

asp,php

基本语法

算法,数据结构

编译原理

Openstack

PHP is Hypertext Preprocessor

超文本预处理器

bash:

词法分析

语法分析

生成执行路径

opcode: 操作码

php解释型,php

php

php source code --> 编译成二进制 --> 执行二进制格式

Zend : opcode(操作码)

PHP官方站点:http://php.net/

关于PHP

一、PHP简介

PHP是通用服务器端脚本编程语言,其主要用于web开发以实现动态web页面,它也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用。

Rasmus Lerdorf于1994年开始开发PHP,它是初是一组被Rasmus Lerdorf称作“Personal Home Page Tool” 的Perl脚本, 这些脚本可以用于显示作者的简历并记录用户对其网站的访问。后来,Rasmus Lerdorf使用C语言将这些Perl脚本重写为CGI程序,还为其增加了运行Web forms的能力以及与数据库交互的特性,并将其重命名为“Personal Home Page/Forms Interpreter”或“PHP/FI”。此时,PHP/FI已经可以用于开发简单的动态web程序了,这即是PHP 1.0。1995年6月,Rasmus Lerdorf把它的PHP发布于comp.infosystems.www.authoring.cgi Usenet讨论组,从此PHP开始走进人们的视野。1997年,其2.0版本发布。

1997年,两名以色列程序员Zeev Suraski和Andi Gutmans重写的PHP的分析器(parser)成为PHP发展到3.0的基础,而且从此将PHP重命名为PHP: Hypertext Preprocessor。此后,这两名程序员开始重写整个PHP核心,并于1999年发布了Zend Engine 1.0,这也意味着PHP 4.0的诞生。2004年7月,Zend Engine 2.0发布,由此也将PHP带入了PHP5时代。PHP5包含了许多重要的新特性,如增强的面向对象编程的支持、支持PDO(PHP Data Objects)扩展机制以及一系列对PHP性能的改进。

二、PHP Zend Engine

Zend Engine是开源的、PHP脚本语言的解释器,它最早是由以色列理工学院(Technion)的学生Andi Gutmans和Zeev Suraski所开发,Zend也正是此二人名字的合称。后来两人联合创立了Zend Technologies公司。

Zend Engine 1.0于1999年随PHP 4发布,由C语言开发且经过高度优化,并能够做为PHP的后端模块使用。Zend Engine为PHP提供了内存和资源管理的功能以及其它的一些标准服务,其高性能、可靠性和可扩展性在促进PHP成为一种流行的语言方面发挥了重要作用。

Zend Engine的出现将PHP代码的处理过程分成了两个阶段:首先是分析PHP代码并将其转换为称作Zend opcode的二进制格式(类似Java的字节码),并将其存储于内存中;第二阶段是使用Zend Engine去执行这些转换后的Opcode。

三、PHP的Opcode

Opcode是一种PHP脚本编译后的中间语言,就像Java的ByteCode,或者.NET的MSL。PHP执行PHP脚本代码一般会经过如下4个步骤(确切的来说,应该是PHP的语言引擎Zend):

1、Scanning(Lexing) —— 将PHP代码转换为语言片段(Tokens)

2、Parsing —— 将Tokens转换成简单而有意义的表达式

3、Compilation —— 将表达式编译成Opocdes

4、Execution —— 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能

四、php的加速器

基于PHP的特殊扩展机制如opcode缓存扩展也可以将opcode缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段以提高性能。由此也可以看出,这些加速器并非真正提高了opcode的运行速度,而仅是通过分析opcode后并将它们重新排列以达到快速执行的目的。

常见的php加速器有:

1、APC (Alternative PHP Cache)

遵循PHP License的开源框架,PHP opcode缓存加速器,目前的版本不适用于PHP 5.4。项目地址,http://pecl.php.net/package/APC。

2、eAccelerator

源于Turck MMCache,早期的版本包含了一个PHP encoder和PHP loader,目前encoder已经不在支持。项目地址, http://eaccelerator.net/。

3、XCache

快速而且稳定的PHP opcode缓存,经过严格测试且被大量用于生产环境。项目地址,http://xcache.lighttpd.net/

4、Zend Optimizer和Zend Guard Loader

Zend Optimizer并非一个opcode加速器,它是由Zend Technologies为PHP5.2及以前的版本提供的一个免费、闭源的PHP扩展,其能够运行由Zend Guard生成的加密的PHP代码或模糊代码。 而Zend Guard Loader则是专为PHP5.3提供的类似于Zend Optimizer功能的扩展。项目地址,http://www.zend.com/en/products/guard/runtime-decoders

5、NuSphere PhpExpress

NuSphere的一款开源PHP加速器,它支持装载通过NuSphere PHP Encoder编码的PHP程序文件,并能够实现对常规PHP文件的执行加速。项目地址,http://www.nusphere.com/products/phpexpress.htm

五、PHP源码目录结构

PHP的源码在结构上非常清晰。其代码根目录中主要包含了一些说明文件以及设计方案,并提供了如下子目录:

1、build —— 顾名思义,这里主要放置一些跟源码编译相关的文件,比如开始构建之前的buildconf脚本及一些检查环境的脚本等。

2、ext —— 官方的扩展目录,包括了绝大多数PHP的函数的定义和实现,如array系列,pdo系列,spl系列等函数的实现。 个人开发的扩展在测试时也可以放到这个目录,以方便测试等。

3、main —— 这里存放的就是PHP最为核心的文件了,是实现PHP的基础设施,这里和Zend引擎不一样,Zend引擎主要实现语言最核心的语言运行环境。

4、Zend —— Zend引擎的实现目录,比如脚本的词法语法解析,opcode的执行以及扩展机制的实现等等。

5、pear —— PHP 扩展与应用仓库,包含PEAR的核心文件。

6、sapi —— 包含了各种服务器抽象层的代码,例如apache的mod_php,cgi,fastcgi以及fpm等等接口。

7、TSRM —— PHP的线程安全是构建在TSRM库之上的,PHP实现中常见的*G宏通常是对TSRM的封装,TSRM(Thread Safe Resource Manager)线程安全资源管理器。

8、tests —— PHP的测试脚本集合,包含PHP各项功能的测试文件。

9、win32 —— 这个目录主要包括Windows平台相关的一些实现,比如sokcet的实现在Windows下和*Nix平台就不太一样,同时也包括了Windows下编译PHP相关的脚本。

CGI

  Common Gateway interface:通用网关接口,让WEB服务器能够跟后端程序结合,调用后端程序执行应用程序的一种接口;

HTML

<html>

  <head></title>

  </head>

  <body>

  </body>

</html>

test.sh

#!/bin/bash

date

MVC:Model View Controller模式视图控制器,将业务逻辑和数据显示分离的一种编程技术,可以实现将HTML标签放在另外一个文件中,而当前脚本只处理数据,最后在通过一种方式将它们拼合起来;

嵌入式web开发语言

index.php

<html>

  <head></head>

<php

php>

</html>

<<大话设计模式>>

http,stateless无状态协议;

apahce,

DSO: dynamic shared object动态共享对象;

php_mod: 做php做成apache模块;

FastCGI

fpm:快速php模块;

apache跟php结合方式:

  CGI

  Module

  FastCGI

Nginx+fpm

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf(编辑httpd服务主配置文件)

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule info_module modules/mod_info.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
LoadModule cgi_module modules/mod_cgi.so(当前apache支持cgi)
LoadModule version_module modules/mod_version.so

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"(定义在/var/www/cgi-bin目录可以执行CGI脚本)

[root@localhost ~]# cd /var/www/cgi-bin/(切换到/var/www/cgi-bin执行CGI脚本目录)
[root@localhost cgi-bin]# vim test.sh(编辑test.sh脚本)
#!/bin/bash
#
cat << EOF
Content-Type: text/html

<pre>
$(/bin/date)
</pre>
EOF
[root@localhost cgi-bin]# chmod +x test.sh(给test.sh脚本执行权限)
[root@localhost cgi-bin]# vim hello.sh(编辑hello.sh脚本)
#!/bin/bash
#
/bin/date
[root@localhost cgi-bin]# chmod +x hello.sh(给hello.sh脚本执行权限)
[root@localhost cgi-bin]# ./hello.sh(执行hello.sh脚本)
Mon Nov 24 04:11:07 CST 2014
[root@localhost cgi-bin]# service httpd restart(重启httpd服务)
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

测试:通过真实机器windows系统的IE浏览器访问www.a.org/cgi-bin/hello.sh;

[root@localhost cgi-bin]# tail /var/log/httpd/error_log(查看error_log错误日志后10行)
[Mon Nov 24 02:04:47 2014] [notice] Apache/2.2.3 (Red Hat) configured -- resuming normal operations
[Mon Nov 24 02:09:46 2014] [error] [client 172.16.100.254] File does not exist: /www/magedu.com/favicon.ico
[Mon Nov 24 04:13:08 2014] [notice] caught SIGTERM, shutting down
[Mon Nov 24 04:13:08 2014] [notice] SELinux policy enabled; httpd running as context root:system_r:httpd_t
[Mon Nov 24 04:13:08 2014] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Mon Nov 24 04:13:08 2014] [notice] Digest: generating secret for digest authentication ...
[Mon Nov 24 04:13:08 2014] [notice] Digest: done
[Mon Nov 24 04:13:08 2014] [notice] Apache/2.2.3 (Red Hat) configured -- resuming normal operations
[Mon Nov 24 04:14:07 2014] [error] [client 172.16.100.254] attempt to invoke directory as script: /var/www/cgi-bin/
[Mon Nov 24 04:15:09 2014] [error] [client 172.16.100.254] Premature end of script headers: hello.sh(提示脚本有问题)

[root@localhost cgi-bin]# vim test.sh(编辑test.sh脚本)
#!/bin/bash
#
cat << EOF
Content-Type: text/html

<pre>
$(/bin/date)
</pre>
EOF

测试:通过真实机器windows系统的IE浏览器访问www.a.org/cgi-bin/test.sh;

让字体显示大一点:

[root@localhost cgi-bin]# vim test.sh(编辑test.sh脚本)
#!/bin/bash
#
cat << EOF
Content-Type:text/html

<pre>
<h1>$(/bin/date)</h1>
</pre>
EOF

测试:通过真实机器windows系统的IE浏览器访问www.a.org/cgi-bin/test.sh;

[root@localhost cgi-bin]# vim test.sh(编辑test.sh脚本)
#!/bin/bash
#
cat << EOF
Content-Type:text/html

<pre>
<h1>$(/bin/date)</h1>
</pre>
EOF
提示:脚本自身所显示的内容,脚本自身所处理数据的结果,这些数据本身都是纯ASCII码,它是一些纯文本流,这些文本流应该格式化成在我们网页上显示更方便查看的HTML
格式的文档,这个HTML标签<h1></h1>是由应用程序处理,这个标签如果想改变,我们应用程序本身,这个标签也要随之发生改变,也就意味着我们的网页怎么显示的是固定
在程序当中的,将来我们要想换一段程序的数据的话,就意味着跟这个程序相关的框架也都没了,也就意味着将来要想使用原来的框架但数据要改一改,获取数据的方法要改变,
就意味着对整个程序文件都要做修改,很困难;

配置WEB服务器使用PHP功能:

[root@localhost ~]# yum list all | grep php(列出yum源将结果送给管道只显示php相关)
php.i386                                5.1.6-32.el5              Server        
php-bcmath.i386                         5.1.6-32.el5              Server        
php-cli.i386                            5.1.6-32.el5              Server        
php-common.i386                         5.1.6-32.el5              Server        
php-dba.i386                            5.1.6-32.el5              Server        
php-devel.i386                          5.1.6-32.el5              Server        
php-gd.i386                             5.1.6-32.el5              Server        
php-imap.i386                           5.1.6-32.el5              Server        
php-ldap.i386                           5.1.6-32.el5              Server        
php-mbstring.i386                       5.1.6-32.el5              Server        
php-mysql.i386                          5.1.6-32.el5              Server        
php-ncurses.i386                        5.1.6-32.el5              Server        
php-odbc.i386                           5.1.6-32.el5              Server        
php-pdo.i386                            5.1.6-32.el5              Server        
php-pear.noarch                         1:1.4.9-8.el5             Server        
php-pgsql.i386                          5.1.6-32.el5              Server        
php-snmp.i386                           5.1.6-32.el5              Server        
php-soap.i386                           5.1.6-32.el5              Server        
php-xml.i386                            5.1.6-32.el5              Server        
php-xmlrpc.i386                         5.1.6-32.el5              Server        
php53.i386                              5.3.3-5.el5               Server(php自身程序)        
php53-bcmath.i386                       5.3.3-5.el5               Server        
php53-cli.i386                          5.3.3-5.el5               Server        
php53-common.i386                       5.3.3-5.el5               Server        
php53-dba.i386                          5.3.3-5.el5               Server        
php53-devel.i386                        5.3.3-5.el5               Server        
php53-gd.i386                           5.3.3-5.el5               Server        
php53-imap.i386                         5.3.3-5.el5               Server        
php53-intl.i386                         5.3.3-5.el5               Server        
php53-ldap.i386                         5.3.3-5.el5               Server        
php53-mbstring.i386                     5.3.3-5.el5               Server(mbstring多字节字符串,汉字2个字节,国际化支持,一般都安装)      
php53-mysql.i386                        5.3.3-5.el5               Server        
php53-odbc.i386                         5.3.3-5.el5               Server        
php53-pdo.i386                          5.3.3-5.el5               Server        
php53-pgsql.i386                        5.3.3-5.el5               Server        
php53-process.i386                      5.3.3-5.el5               Server        
php53-pspell.i386                       5.3.3-5.el5               Server        
php53-snmp.i386                         5.3.3-5.el5               Server        
php53-soap.i386                         5.3.3-5.el5               Server        
php53-xml.i386                          5.3.3-5.el5               Server        
php53-xmlrpc.i386                       5.3.3-5.el5               Server        
提示:PHP是个很大的软件,所以redhat把它做成了模块,而且有两个版本php/5.1和php/5.3,php/5.3.3还是不支持fpm,php/5.3.4开始可以支持fpm,php/5.4可以直
接支持fpm,所以php/5.3.3之前使用fpm需要打补丁才学;
安装PHP:
[root@localhost ~]# yum install php53 php53-mbstring
Loaded plugins: katello, product-id, security, subscription-manager
Updating certificate-based repositories.
Repository 'Cluster' is missing name in configuration, using id
Repository 'Clusterstorage' is missing name in configuration, using id
Unable to read consumer identity
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package php53.i386 0:5.3.3-5.el5 set to be updated
--> Processing Dependency: php53-cli = 5.3.3-5.el5 for package: php53
--> Processing Dependency: php53-common = 5.3.3-5.el5 for package: php53
--> Processing Dependency: libgmp.so.3 for package: php53
---> Package php53-mbstring.i386 0:5.3.3-5.el5 set to be updated
--> Running transaction check
---> Package gmp.i386 0:4.1.4-10.el5 set to be updated
---> Package php53-cli.i386 0:5.3.3-5.el5 set to be updated
---> Package php53-common.i386 0:5.3.3-5.el5 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

===============================================================================================================================
 Package                            Arch                     Version                          Repository                  Size
===============================================================================================================================
Installing:
 php53                              i386                     5.3.3-5.el5                      Server                     1.3 M
 php53-mbstring                     i386                     5.3.3-5.el5                      Server                     1.2 M
Installing for dependencies:
 gmp                                i386                     4.1.4-10.el5                     Server                     665 k
 php53-cli                          i386                     5.3.3-5.el5                      Server                     2.5 M
 php53-common                       i386                     5.3.3-5.el5                      Server                     604 k
提示:自动解决依赖管理php53-cli命令行工具和php53-common通用组件都会安装)
Transaction Summary
===============================================================================================================================
Install       5 Package(s)
Upgrade       0 Package(s)

Total download size: 6.1 M
Is this ok [y/N]: y
Downloading Packages:
-------------------------------------------------------------------------------------------------------------------------------
Total                                                                                          401 MB/s | 6.1 MB     00:00     
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : php53-common                                                                                            1/5 
  Installing     : gmp                                                                                                     2/5 
  Installing     : php53-cli                                                                                               3/5 
  Installing     : php53-mbstring                                                                                          4/5 
  Installing     : php53                                                                                                   5/5 
Installed products updated.

Installed:
  php53.i386 0:5.3.3-5.el5                                  php53-mbstring.i386 0:5.3.3-5.el5                                 

Dependency Installed:
  gmp.i386 0:4.1.4-10.el5              php53-cli.i386 0:5.3.3-5.el5              php53-common.i386 0:5.3.3-5.el5             

Complete!

[root@localhost ~]# rpm -ql php53(查看php53安装生成哪些文件)
/etc/httpd/conf.d/php.conf(配置文件,作为web配置文件一部分使用)
/usr/lib/httpd/modules/libphp5.so(编译成httpd模块叫做libphp5.so动态共享对象)
/var/lib/php/session(php会话数据保存位置)
/var/www/icons/php.gif
[root@localhost ~]# cd /etc/httpd/conf.d/(切换到/etc/httpd/conf.d目录)
[root@localhost conf.d]# ls(查看当前目录文件及子目录)
manual.conf  php.conf  proxy_ajp.conf  README  ssl.conf  ssl.conf.bak  virtual.conf  welcome.conf.bak
[root@localhost conf.d]# vim php.conf(编辑php.conf配置文件)

<IfModule prefork.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>

AddHandler php5-script .php(添加处理器,如果是.php结尾的文件就使用php5-script处理,这是apache自己内置处理的钩子,它能够实现在内部完成怎么识别这种文件)
AddType text/html .php(添加类别,多媒体类型,仍然把.php识别成纯文本格式)

DirectoryIndex index.php(默认主页面)

提示:如果核心模块是prefork和worker,它使用的模块不一样,apache基于线程工作或基于进程工作的时候,它们所依赖的php模块也是不一样的,在woker模型下php必须以zts
方式工作,在profork模型下是传统意义的php模块;

[root@localhost conf.d]# service httpd restart(重启httpd服务)
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

测试:通过真实机器windows系统的IE浏览器访问www.a.org,可以正常访问;

[root@localhost conf.d]# cd(切换到家目录)
[root@localhost ~]# cd /www/a.org/(切换到/www/a.org目录)
[root@localhost a.org]# ls(查看当前目录文件及子目录)
index.html
[root@localhost a.org]# mv index.html index.php(更改index.html文件名字为index.php)
[root@localhost a.org]# vim index.php(编辑index.php文件)
<title>A</title>
<h1>a.org</h1>
<?php
phpinfo();(php内置函数,能够通过web页面方式显示当前php服务器的所有信息)
?>

测试:通过真实机器windows系统的IE浏览器访问www.a.org,可以正常访问;

[root@localhost a.org]# vim /etc/php.ini(编辑php.ini配置文件)
[PHP]

; max_input_time(等待用户输入时间)
;   Default Value: -1 (Unlimited)(默认-1,无限的)
;   Development Value: 60 (60 seconds)(建议开发环境使用值60秒)
;   Production Value: 60 (60 seconds)(生产环境使用值60秒)

提示:分号;都是注释符,
[root@localhost a.org]# vim index.php(编辑index.php文件) 
<title>A</title>
<h1>a.org</h1>
<?php
phpinfo();
?>
提示:PHP的每个语句在嵌入的时候要使用<?php ?>封装起来,每个语句要以;分号结尾,否则语法错误;

 程序由指令加数据组成,问题是指令放在什么地方,数据放在什么地方,在写shell脚本中数据是保存在变量中,如果打开的是文件,文件就保存在这个进程地址空间中,作为数据流来访问,如果数据量非常大,作为webapp应用程序,webapp应用程序最后所有处理的数据中无非就是bbs(论坛)程序,而这个论坛上面注册了尽百万个用户,如果某个用户在登录论坛的时候,程序要验证这个程序是否存在,于是要验证用户帐号对不对,用户所给的密码和用户帐号是否相匹配,如果一旦正确还要给它授权,它能够在那发帖,而有着百万用户的论坛,可能里面有上亿的帖子,当一个用户登录的时候,我们这个程序,就以PHP为例,这个程序本身必须要能够去找到这个用户,怎么找,到哪找,用户存储在什么地方,像此前程序处理数据的时候,如果数据太大了,我们不足以保存在内存中,用起来不方便的话,我们可以把它保存在一个临时文件当中,而后对这个临时文件再读进来进行处理就可以了,我们操作系统用户登录的时候,是如何检索用户信息的,/etc/passwd和/etc/shadown,而passwd文件很小,几十个用户数百个用户已经变的很大了,而一百万个用户,从这一百万个用户找一个用户如何找,还以操作系统为例,当root用户登录的时候,可以grep命令,如果能找到,这个用户就存在,grep在众多用户当中是一个一个比较的,比如grep root,如何知道root在不在,拿着这个模式逐行逐行进行扫描,扫描个几十行没有问题,扫描一百万行,什么概念,会很慢,该怎么办,事实上就找用户本身,也没必须每一行每个字符都比较一下,只需要比较那一行用户名那一段就可以了,首先可以将这个文件切割成段,切割成各个不同的字段,只拿其中一个字段进行比较,这是第一种,虽然只比较一个字段,范围仍然很大,我们从上倒下挨个比较也是很麻烦的,怎么能够加速这个过程,有多种办法,可以排序,排序以后如何比较,通过二分法查找,比如有一百万个用户,我们拿着root用户,跟最中间的比较,中间的比较发现,比中间的大,意味着在下半段,于是在下半段中间再比较,比中间这个要小,跟这段上半部分中间比较,发现比这部分又大,往下半部分中继比较,假如从小往大排序,平均需要找14次左右,就可以找到这个对应的结果,这样速度就快的多了,这是二分法查找,这里有个问题,文件需要先排好序,建立的用户不一定是按顺序排列的,很简单,比较的都是用户名本身,将所有用户名的信息提出来,再建立一个文件,这个文件里面只放有用户名,而且这个文件是自动建立的,并且是有序的,所以在找的时候针对这些有序的文件找就可以了,但是找到用户只包含用户名,要想知道用户ID怎么办,一旦查到这个用户名以后,用户名必须要有一个指针,指向它实际数据所在的位置,比如指向原有文件中,原文件放有用户名还有ID号等信息,于是找到建立的用户名文件,通过二分法平均14次找到这个用户,根据这个用户名指针找到真正文件中所存在位置,这时候真正文件中可能是无序的,但是不管怎么讲找到这个位置是没有问题的,而且根据这个结果找到用户的其他信息,这个文件就是原来的数据文件,自动生成的用户名文件称为索引文件,二分法是一种方法,但是这种方法太慢了,还需要找14次,还有更快的办法,可以使用稀疏索引,比如使用B树索引,使用B+树索引,就完全能实现,B+树索引它结合使用稠密索引和稀疏索引来完成对文件的索引,使得一般情况下找到任何一个数据平均4次就可以了,这样速度会更快,但不管怎么讲要依赖别的数据结构,现在想象一下这一百万用户放在什么地方,假如找一个文本文件,放一百万用户,我们要针对这一百万用户建立一个索引,自己如何手动建立这个索引,我们建立这个索引是针对用户名来建,还是针对用户ID号来建立,下次查找如何根据ID查找怎么办,根据ID号查找某用户是多少,根据这个索引就没用,比较他的用户名和ID号没有任何关系,所以可能一个索引还不够,因为查找标准不相同,而这种查找标准叫做搜索码,因此索引应该跟搜索码相匹配的,谁来帮我们管理索引呢,更重要的是如何新增一个用户,假如这个用户的排序不是在最后的,而是在中间的,怎么办,你的索引就要更新,这中间就要插入一个新的,如果从这里面删除三十个用户,三十个用户在索引里面也有数据,这些数据也需要删除,这需要多复杂的工作,它们两个文件之间没有任何关联性,我们需要开发一个程序来维护它们之间的关联性,不然手动维护两个,在文件加入一个用户,索引就需要更新一个条目,在文件删除三十个用户,索引就要更新三十个条目,这是非常麻烦的,于是需要开发一个程序,这个程序能够很简单的告诉我们只要指定一个标准,自动根据你所指定的字段给你创建这个索引,而且以后你新增一个用户,这个程序自身会关联性的把这个用户,添加一个用户,添加一个条目,删除一个用户,删除一个条目,而这个软件叫做数据管理软件,它能够帮我们维护索引关联性,有了索引关联性维护软件以后,当我们的PHP应用程序想去查找一个用户它该怎么查找,是靠程序查找还是靠这个管理软件查找,管理软件提供了维护了索引,而且维护了两者间的关联性,没有说帮我查找某个用户,还需要PHP自己实现,所以PHP自己通过开发一段程序,这个程序使用独特的查找算法,这个查找算法可以根据我们的索引结构来实现快速查找文件,所以查找过程PHP来完成,也就意味着我们这个程序无论什么时候想查找一个用户或者根据某个标准查找某个数据都得自己开发一段程序,假如说今天开发一个PHP程序,后台开发一个,每隔项目里面都要用到一个查找算法,而且每一次都要自己去实现很困难,而且大量的工作都浪费了重复了,于是可以把一个工作简化,第一可以把查找算法做成公共模块,谁用的时候谁拿来用就可以了,这是一种机制,但不管如何这种算法都需要跟PHP结合,能不能做另外一种机制,把查找算法做到这个软件里面,让这个软件来完成查找,只需要告诉它根据什么来查找,查找标准是什么,搜索码是什么,搜索过程由它完成,把搜过放到管理软件里面,以后再查找的时候程序只需要告诉管理软件查找某个数据文件中用户名为某某的用户,并且把结果返回给我,于是这个算法本身它来负责查找,并且把结果返回给这个程序就可以了,因此程序只告诉标准并取得最终数据,这是两种不同的管理机制,这样数据管理软件自身就要具备数据查找能力,也就是查找算法的应用程序的实现过程,管理软件又多了一种功能,能够安装标准查找数据,如果更新数据,新建用户,按道理来讲新建用户只需要使用PHP程序在我们文件尾部追加用户就可以了,它会自动的维护索引的,我们追加用户建立新的条目在里面找对应的位置把它建立起来就可以了,但现在的问题是每一次往这个文件插入数据都得靠程序来完成,这也是非常麻烦的,这次插入这个数据,下一次插入另外一个数据,万一这两个用户同名了,怎么办,插入用户新建用户之前还要检查重名,万一同名了,也就意味着我们这个程序在负责往这个数据文件中插入新的用户的时候还要检查这个用户此前有没有叫这个用户的,所以任何时候对数据文件更新的时候得先查询,先查询有没有它,没它才能更新,才能创建的,所以每次更新也是这个道理,删除也需要查询,所以无论是更新操作还是删除操作都要涉及到查询操作,所以每一次更新都得查询一次,每一次删除都要查询一次,对我们这个程序来讲是很麻烦的,如果能将一切功能都外包出去,有一个外包公司专门负责要好很多,于是把这个功能又放进数据管理软件,它还能够帮我们更新,还能帮我们删除等这些功能,但是现在有一个文件,现在众多的功能和数据管理的功能都交给了这个软件来实现,现在问题是PHP如何跟这个软件通信,apache跟PHP通信要么模块、要么cgi、要么fastcgi,必须要一种协议,前端的PHP怎么跟这个数据软件通信,它怎么告诉它我的查找标准是什么,还有数据返回的时候怎么知道这是什么格式的数据,都需要双方的协定,就是所谓的协议,双方必须要事先遵循一种标准,我们称作叫一种协议,或一种规范都行,遵循这种规范以后我们两个之间怎么通信,tcp/ip协议可以实施,tcp/ip功能要靠程序实现,同样web服务叫http服务,只有http服务不行,得有实现http功能的软件apache才可以,这里得靠协议让他俩之间进行交互,问题是能够把这种协议予以实施的,让他俩之间能够真正通信的还得靠程序,这是什么程序,还有我们这个软件本身所提供给我们的查找、新建、删除等能力通过那种接口输出出来,怎么调用,在web服务器下载页面要get方法,提交数据要使用post方法,它有很多不同的操作,每一种操作都调用具体的命令,现在是这个命令怎么能够发过来,而且命令进入什么样的语法格式,还有为什么是个命令,这里能不能理解这个命令,这个命令怎么交互,所以这个软件虽然具有了这种功能,这种功能还需要向其他软件共享出来,怎么共享,最简单方式通过API(应用编程接口),假如这里提供一个API,开发程序直接调用这个功能就可以了,这个API就是库,这库本身可以提供查找、删除、增加等功能,这个API本身使用什么语言写的,比如使用C语言写了一个API,很显然这里是PHP程序不能调用C语言的API,他俩好像不是完全兼容,两个不是同一种语言,怎么办,意味还要提供PHP的API,这样子就意味着API有多种语言,提供那种语言,那种语言就可以利用它来完成这种功能,比如提供C的API,提供JAVA的API,提供PHP的API,提供C++的API,不管怎么的用户要想使用这里面数据就必须要基于这个接口来开发程序,而后取得数据再把数据返回给用户,如果不是程序员,想根据某个标准到这里面找数据无法找出,这个层次只是提供一堆编程接口,往里面输入一段数据就必须调用API的功能才能完成,人家给的接口就是调用API,非得自己手动查,查不出来,所以必须先是程序员,但现在的问题是我们的增、删、查、改都是API,API都是function()函数,函数的调用方法是无法就是使用函数名传递一堆参数然后取得一些返回值,跟shell中的函数是一样的道理,那数据返回回来之后怎么显示出来,怎么输入到屏幕而且还能显示,都是应用程序自身问题,怎么格式化,是否转换成html文档由web服务器显示是PHP的问题,跟底层数据库管理软件没有关系,现在问题是,今天是C程序员,要学习C的API使用数据,明天学一门新语言PHP,是不是想用新语言开发数据的时候,还要学习PHP的API,C的API和PHP的API格式肯定不一样,甚至名称也可能不一样,那这就太困难了,这些API,哪怕对程序员来讲用起来也太困难了,风格不统一,今天使用C明天使用JAVA大家的调用接口都不一样,那要背一堆的函数,或者每次开发程序都要先放一个库字典,用到那个库查半天,设置不知道用那个库,那个库的功能都不知道事先还需要背会,这就太困难了,如果风格能统一那就好很多,在上面再封装一层将他们统一起来,统一成ODBC(开放数据库系统互联),它把各种API都通过用一种统一的风格输入出来了,几乎任何一种语言都可以使用这种统一风格来调用,那这样子使用C语言调用ODBC,使用C++、JAVA都可以调用ODBC,ODBC要统一到各种语言上,每一种语言都能用,我们如果把ODBC做的非常接近于C的使用方法,PHP用起来很困难,要非常接近于PHP,JAVA用起来照样很困难,所以我们又不能做的过于接近于语言,那就意味着ODBC仍然非常底层,虽然说比各种API要高端点,但它仍然非常的底层,还是很底层,那就意味着程序员在调用的时候还得写麻烦的指令,能不能再简单点,对于PHP程序员来讲,C程序员来讲,无论使用API还是使用ODBC都要自己去写函数,都要去调用函数,如果有一种模块,也不需要调用了,给我们一个非常简单的接口,只需要告诉你干什么,它就会去自动干了,会更好,假如说本来从不统一到统一,现在从统一又走到不统一了,我们期望这种机制能够做成那种语言非常简单的调用接口,只需要告诉它搜索码是什么,你帮我查出来就完了,这就更简单了,但是这种简单一定要非常接近那种语言才行,所以我们从不统一到统一,从统一又走到了不统一,而这种不统一最终非常非常接近于语言,但是离我们数据库管理软件越来越远了,而接近于语言的这种接口叫驱动,这种驱动其实就是一种翻译软件,上层的程序非常容易理解,但是底层的数据库软件不理解,驱动就负责把他翻译成对应的API,其实ODBC就用不着了,这个驱动负责翻译成C的API,我们的程序很可能使用C开发的,C或者C++的性能是最好的,所以这个驱动负责翻译成对应的C的API就可以了,对于PHP程序员只需要使用PHP驱动就可以了,而JAVA程序员,只需要用到JAVA驱动就可以了,这些驱动跟这些语言结合非常紧密,而且是这个语言内部库的使用风格是非常近似的,所以用起来非常简单,这就是驱动程序,很显然如果开发了PHP程序,到到了驱动的功能,而我们没有提供这个驱动,它就不能跟数据库交互,如果开发的PHP程序,这个PHP程序员非常牛,它直接调用PHP的API来开发的,那这个驱动有没有都无所谓,要看怎么去调用了,所以他们直接可能有很多中间层,这个中间层你用或者不用,取决于编程程序员,当然这个中间层越接近于用户,用户用起来越方便,但是如果作为中间层的管理员来讲我们所需要提供的运行环境越来越复杂,对方直接使用API来编程,很显示只需要提供这个API中间层就可以了,但是如果用到驱动我们就需要自己部署好驱动它才能够调用,而驱动跟程序语言本身是分离的,驱动由数据软件提供还是由程序来提供,是由PHP解释器提供,还是由数据管理软件提供,其实谁提供都可以,谁提供的好就用谁的,反正作为运维人员来讲,作为系统管理员来讲需要自己让它存在,只要别人要用,需要部署好,不管谁提供的,有了驱动我们想从中访问数据,那就意味着我们通过这个驱动就可以简单的完成数据访问了,但现在问题是这个驱动仍然是个编程接口,只不过比API接口更高级一点,更简单、简化了许许多多而已,现在问题是如果不是程序员还是想从中查数据怎么办,还是干不了,还得开发程序,就跟操作系统一样,计算机底层是硬件,上层是内核,内核把硬件的各种能力通过API输出出来,通过系统调用输出出来的,但是现在让使用计算机,内核准备好了,你去使用把,怎么用,没办法,找一个位置利用它的API开发程序,然后这个程序能够完成特定工作了,有多少人是程序员,如果不是程序员就不能利用内核所提供的计算机管理功能了,怎么办,找一个人开发好的这个预留的接口能够帮我们,让我们跟内核去交互,这就是shell,shell就是接口,只不过shell要调用一些库功能,为什么要用到库的概念,shell可以直接使用系统调用来开发,系统调用就类似于数据库软件的API,太底层了,将系统调用封装成更高级的模块,就是驱动,这些模块封装的API使得应用程序程序员在开发的时候直接调用这个模块就可以了,这样开发周期就缩短了,对应数据管理软件在上层提供命令行接口,用户通过这个命令行接口,这个命令行接口提供了一些内置的命令,或者外置的命令,这些命令本身可以调用这些API的功能完成其相应的工作的,shell只是能够提供跟某些命令交互功能,提供命令行接口,真正完成工作好需要命令,于是在外部它还提供了命令给我们,这些命令可能是很多程序员开发的,而这些命令可以利用这些API的功能完成具体的数据的查找、新增、删除等功能,而这些命令有select、delete、update等等,由此有了这些接口就可以跟用户进行交互,我们是怎么打开shell的,要么是远程登录,要么是在一个物理终端上登录,所以必须要关联在一个物理硬件上才能打开一个shell,这就意味着shell程序必须有一个附着点,它要附着在某个物理设备上,就是所谓的终端,这个终端可以是模拟的,也可以是伪终端,不管怎么的它是个设备,这个设备可以是个假设备,也可以是虚拟设备,也可以是真正物理设备,我们当前命令行接口从那打开,它类似跟shell一样,它必须有一个位置让能打开,这个位置它不是操作系统,它是应用程序,只需要我们有一个客户端或者有个专用程序就可以了,所以这个程序有个客户端,这个客户端接口能够借助于shell,打开让它俩之间建立基于tcp/ip的通信,任何时候我们在这个客户端上就能够打开类似shell的交互式界面,在这里面可以输入命令,命令通过协议送给这里的服务器端,服务器端接收命令,并做命令分析以后去运行这个命令,所以这是命令的解释器,而shell也是这样子,客户端是ssh客户端,对方是sshd服务器端,而sshd需要接收bash解释命令,解释器本身没有服务器端,在它的上层还应该提供一个服务器能够跟用户建立会话的功能,这才是客户端,所以客户端连到服务器端上,服务器端这个本身能够将这个解释器所提供的功能输出给我们命令行接口,跟ssh一样,不是ssh帮你执行命令,ssh只是负责把命令送到服务器上去的,而且是安全送过去的,如果有多个用户连进来,就像web服务一样,作为一个服务器端监听在某端口上,如果有多个用户同时访问,prefork模型一个进程响应一个请求,ssh怎么办,两个用户同时连进来,一个进程一个请求,要启动多个进程,这里也是这个概念,如果有多个用户连接进来,多进程,如果进程过多软件变得过于复杂,它基于线程来工作,每个用户连接就在里面生成一个线程来相应,每个用户连接都生成一个线程,就像prefork一样它总有一个上限,我们服务器如果只能允许20个用户同时连接进来,一下涌入80个用户怎么办,先接待前20个,后面60个等待,就可以了,怎么限定,一般使用所谓线程池来定义,这个池子里面只能放20个,一下子最多只能装进20个,所以线程池是一种大量用户并发涌来的时候如何控制它的流量的,由此这个软件完整了,用户接进来不想使用开发的用户,也可以使用命令来调用功能,而开发用户也可以使用驱动来在软件里面完成这种功能,而这一切组合起来,这个软件就是数据库管理系统,它不是数据,只是管理系统,它能帮我们增加数据,创建索引,建立索引之间的关联关系,往里面插入数据,帮我们更新索引,它要实现的功能要多的多,比如用户不能随意访问里面数据,还要实现权限管理,谁想到这里面查找数据先提供帐号密码,还有这里面管理的数据文件不止一个,所以不同用户访问的文件也不一样,每个用户到底能够访问那些数据,甚至访问这个文件中的多少行数据,我们都可以定义的,这就是用户和权限模型,而这一切糅合起来,专门负责数据管理的工具,就叫做DBMS(database management system)数据库管理系统。

DBMS

  DataBase Management System

数据的组织结构

  层次型

  网状型

  关系型

    表

RDBMS(关系型数据库)

  Relational DataBase Management System

RDBMS:

1、数据库创建、删除

2、创建表、删除表、修改表

3、索引的创建、删除

4、用户和权限

5、数据增、删、改

6、查询

DML: Data Manapulate Lanague:数据操作语言

  INSERT(插入数据), REPLACE(替换数据),UPDATE(修改数据), DELETE(删除数据)

DDL: Data Defination Lanuage:数据定义语言

  CREATE(创建数据库创建表),ALTER(修改数据库修改表),DROP(删除数据库删除表)

DCL: DATE Control Language:数据控制语言

  GRANT(授权用户),REVOKE(取消授权)

SELECT(查询)

RDBMS: egreSQL

  Oracle, Sybase, Infomix, SQL Server, DB2

  MySQL, PostgreSQL, pgsql, EnterpriseDB

  MySQL, SQL, MySQL AB

    去IOE: IBM, Oralce, EMC

Oracle,

IBM,

SUN-->MySQL

BEA: WebLogic

PepoleSoft

OpenOffice

LibreOffice

MariaDB

MySQL

--> Percona

反关系模型: NoSQL

  MongoDB(文档数据库)

  Redis(缓存数据库)

  HBase(稀疏基于建制度数据库)

[root@localhost ~]# ls(查看当前目录文件及子目录)
anaconda-ks.cfg  install.log  install.log.syslog

DBMS:

  数据管理独立性;

  游戏地完成数据存取;

  数据完整性和安全性;

  数据集中管理;

  并发存储与故障恢复;

  减少应用程序开发时间;

SQL: 结构化查询语言那,ANSI

sql86, sql89, sql92, sql99

当用户输入sql命令以后,就像shell解释器一样,要对命令进行词法分析、语法分析,所以一个关系型数据库内部结构上应该具有的几个基本组建有那些,前端用户对于SQL的使用通常通过sql命令来发出的,有可能是应用程序,PHP有自己前端驱动,这个驱动也可以发出sql命令的,用户也可以,只要能发出sql命令都行,应用前端、sql接口、外部表格、各种应用程序等等都可以,sql命令送给我们DBMS以后,DBMS必须要接受下来,并且做处理,判断用户的权限等,对于sql功能来讲RDBMS必须要完成以下几个基本功能,第一要提供分析器,要提供词法分析、语法分析等等,分析用户输出的命令到底在语法上有没有问题,分析器的下一步分析的结果要生成执行计划,生成计划的计划执行器,计划执行器用来干什么,一个sql语句执行结束之后它可能会生成N个执行路径,也就是一个语句有多种执行方法,比如说执行一个select语句,这个select语句要从某个表中查询出来一些数据,我们可以做全表扫描,对表中的每一行逐个进行比较,这是一种查询方法,也可以使用索引,现在有三个索引,其中两个索引都可以用,用第一种索引能够生成执行方法,用第二个索引也可以生成执行方法,这就意味着我们为了完成这条语句,事实上有三个可执行的路径,有三条路径都能完成对应的任务,因此计划执行器就是分析到底有多少种路径可以完成相应任务的,那分析结束以后应该使用哪一种方法,很显然代价最小、性能最好的最简单,是我们最终选择的,谁的代价最小要做分析,要做优化,所以生成以后要使用优化器对结果做优化,真正选择一条语句以后它也不能直接执行,而是从中选择最优的运行方式,甚至不惜于对查询语句做改写方式,只要执行结果一样,这一切分析结束以后,要执行这个语句,语句要执行就意味着要操作数据了,数据在磁盘文件中,因此还应该有一个系统完成将数据从磁盘中取出来,于是文件的存取,文件存取的方法有N种,至少要完成一种,完成文件存取之后,进程也不会直接才磁盘中操作数据的,它应该把数据载入进内存中,也就意味着文件读进来以后先缓存到内存里面,所以应该提供缓存器,将文件基于文件的存取方法存取的时候先读到缓存器里面才能进行操作,如果数据文件有500G或者1T大小,显然不能把整个数据都载入内存,因此缓存器当中所能够缓存的文件量纵然是有限的,一旦缓存器满了,现在需要载入新的数据怎么办,需要置换,把缓存器中最近最少使用的内容给它替换出来腾出空间再读入新的内容,所以必须要提供一种策略来管理缓存器当中的内容,策略到底是怎么提供的,不同的数据库服务器或不同的DBMS提供的算法是不一样的,缓存器所提供的任何内容最终,我们要在里面做了修改以后还要会存到磁盘上去,如何进行回存呢,存到什么位置呢,还需要一个工具来实现对应的管理,这个工具叫做磁盘空间管理器,它要实现对磁盘空间中的某个数据文件中的数据到底该怎么存储进行管理的,因此数据必须要由磁盘管理器转化以后存储在磁盘上,除此之外一个DBMS还能提供故障恢复的功能,所以它还应该提供故障恢复管理器,万一服务器正在运行过程中突然崩溃了,下一次启动以后应该让我们的服务器某些数据,本来正在存储过程中的数据、存储一半的数据将它恢复为正常状态,这就是故障恢复管理器提供的功能,事实上除此之外我们还应该有并发事物管理器等等,此外通常还有一个并发功能管理器的辅助工具叫锁管理器,这是DBMS所具备的几个基本功能。

DDL(数据定义语言), DML(数据操作语言), DCL(数据控制语言)

MySQL: http://www.mysql.com/

  Community Edition(社区版)

  Enterprise Edtion(企业版)

软件包格式:

  软件包管理器特有的格式

    rpm包, .exe

  通用二进制格式

  源程序

RHEL 5.8(32bit)

mysql, mysql-server

MySQL的RPM包

注意:红帽官方RHEL上其他应用程序将依赖于系统本身所提供的rpm包,所以要使用mysql官方提供的rpm包,可能红帽上的一些软件它还会自动安装红帽官方提供的rpm包,由此在红帽上我们要使用很多依赖于mysql服务器应用程序的话,不建议使用mysql官方所提供的rpm包,建议还是使用红帽自有的,因为这样子依赖关系所必须强制提供的功能,而且很多应用程序彼此的版本是有依赖性的,提供太新的版本,它未必适用,除非专门把这台主机就做为mysql服务器,不安装其他额外应用程序,也没有依赖mysql, 这时候可以使用mysql官方的rpm包;

LAMP:

  MySQL

  通用二进制

mysql(客户端), mysql-server(服务器端)

二进制程序

mysql(客户端)

  -u USERNAME: 指定用户,不指定默认root;

  -p ' ': 指定密码,不指定默认空密码;

  -h MYSER_SERVER: 制定mysql服务器地址,不指定默认localhost;

  -h 127.0.0.1

    Linux: secket

    Windows:memory

mysql客户端:

  交互式模式

  批处理模式

    执行mysql脚步

交互式模式中的命令类别:

  客户端命令:在客户端本身执行的命令;

  服务器端命令:命令发送到服务器端,由服务器执行并返回到客户端的命令;

    都必须使用语句结束符,默认为分号;

SQL接口:

  Oracle, PL/SQL

  SQL Server, T-SQL

用户:USERNAME@HOST(HOST为客户端主机)

注意:

连接mysql服务器的时候,指定服务器使用的ip地址是使用-h制定,但我们创建一个用户的时候,也是在mysql服务器上创建用户,而这个用户必须要明确指定这个用户用户名叫什么,密码是什么,而且这个用户也只能通过那些客户端主机登录,所以mysql服务器用户名非常独特是两段结合起来组成的,由此我们允许root通过本机来空密码登录,它不允许使用172.16.100.1,因为使用172.16.100.1的时候说明我们客户端已经类似于远程主机了;

特性:

mysql还有一个独特的特性,当我们连接远程服务器的时候,服务器客户端是怎么连接的,它们两个之间是基于什么协议来连接,想http是基于tcp协议的,dhcp是基于udp的,dns即有udp又有tcp的,mysql是基于tcp的,是长时间处于连接状态的协议,但是如果客户端和服务器端在同一台主机上,那是另外一码事,使用-h 127.0.0.1,如果是linux使用的是secket方式,如果是在windows上使用的是memory;

mysqld(服务器端)

tcp/3306, mysql, mysql

RDBMS:
  /var/lib/mysql/(mysql默认安装路径)

初始化:

  对于mysql服务器来讲它可以帮我们管理很多的数据库,比如建立一个数据库叫档案管理系统、图书管理系统、学员信息库等等,这每一个数据库数据库名叫什么,数据库应该有名字来引用它,每一个数据库中有多少张表、每一个表的表名、每一个表中的字段、字段的属性等等这些信息存在什么地方,就像存一个文件一样,一个文件文件名名、文件大小本身不属于文件的数据,这些数据放在什么地方,这些数据称为文件元数据,磁盘格式化以后将磁盘分为两个区域,一个叫元数据区域,一个叫数据区域,数据区域还要划分成磁盘块,元数据在元数据区域里面,主要是靠inode保存的,这就是文件的inode, 或者称为文件的元数据区,对于mysql数据库而言它也有很多的元数据,数据库服务器名字、表的名称、字段名称、字段属性信息,这些本身跟数据没有关系,它们也都是元数据,这些数据放在什么地方,也需要一个位置来存放,所以mysql创建完成以后有个独特的数据库就叫mysql,mysql首先是一个服务器软件,而在这个服务器软件内部还有一个数据库叫mysql, 这个数据库里面放的就是元数据,当前整个数据库上有多少个数据库、每个名字叫什么、一个库里面有多少张表、每个表的名字叫什么、每个表有多少个字段、字段的属性定义等等,很显然刚开始安装好数据库的时候这个库是不存在的,初始化的过程就是让我们建立这个数据库;

关系数据库对象:

  库

  表

  索引

  视图

  约束

  存储过程

  存储函数

  触发器

  游标

  用户

  权限

  事务

表:

  行,列

  表:实体

    行:row

    列:field, column

字段名称,数据类型,类型修饰(限制)

  字符:字符型默认不区分大小写;

    CHAR(n):n字符长度,最多存储256字符,如果n为10,表示最多能存10个字符,如果没存够10个,占据10个空间,无论如何分给它10个,它一定是10个,无论占用不占用,有可能浪费;

    VARCHAR(n):可变化长度,最多存储65536字符,可变长度的CHAR,如果n为10,如果里面只存两个字符,它占据2个字符,其实不是2个,而是2+1个,它有一个结束修饰符;

    BINARY(n):二进制格式,也是字符型,区分大小写的字符,BINARY跟CHAR一样也只存储固定长度的;

    VARBINARY(n):可变长度二进制格式;

    TEXT(n):文本大对象,明确说明存储多大长度的TEST;

    BLOB(n):二进制大对象,区分大小写;
  数值

    精确数值

      整型

        TINYINT:微整型,1个字节,128-127或0-255;

        SMALLINT:小整型,2个字节;

        MEDIUMINT:普通整型,3个字节;

        INT:整型,4个字节;

        BIGINT:大整型,8个字节;

        修饰符:UNSIGNED, 无符号,只有整数或0

          NOT NULL不允许为空;

      十进制

        DECIMAL

    近似数值

      浮点型

        FLOAT:单精度浮点型;

        DOUBLE:双精度浮点型;
  日期时间

    DATE: 日期

    TIME: 时间

    DATETIME: 日期时间

    STAMP: 时间戳

  布尔

  内置: ENUM(枚举类型,最多允许使用几种类型), SET

DDL: 定义数据对象

  CREATE: 创建

  ALTER: 修改

  DROP: 删除

DML: 操作语言

  INSERT: 插入

  UPDATE: 修改

  DELETE: 删除

DCL: 控制语言

  GRANT: 授权用户

  REVOKE: 取消授权

创建数据库

  CREATE DATABASE db_name;(创建数据库db_name)

  CREATE DATABASE IF NOTE EXISTS db_name;(判断db_name数据库是否存在,如果不存在就创建)

  删除数据库:DROP DATABASE [IF EXISTS] db_name;(删除数据库db_name, IF EXISTS存在才删除)

创建表

  CREATE TABLE tb_name(col1,col2,...);(创建表tb_Name,col1字段名及属性,几个字段写几个,如果不指定默认数据库,创建表时需要使用CREATE TABLE db_name(数据库名).tb_name(表名称),不然不知道创建那个数据库,或者使用USE db_name;设定默认数据库;)

  查看表:SHOW TABLES

  查看库中的表:SHOW TABLES FROM db_name;(如果不指定db_name就显示默认数据库中的表)

  查看表的结构:DESC tb_name;

  删除表: DROP TABLE tb_name;

修改表:

  ALTER TABLE tb_name(修改表tb_name)

    MODIFY(修改某个字段,把字段属性改改,字段名不改)

    CHANGE(改变某个字段,字段名称也会改变)

    ADD(添加字段)

    DROP(删除字段)

DML:数据修改

  INSERT INTO tb_name (col1,col2,...) VALUES|VALUE ('STRING',NUM,...);((插入数据,tb_name表名,col字段,字符串需要引号引起来,数值不需要引号,如果把表中每个字段都给一个值,就不需要写字段名称)

  INSERT INTO tb_name (col1,col2,...) VALUES|VALUE ('STRING',NUM,...),('STRING',NUM,...);(插入一批数据)

  REPLACE INTO(替换数据)

  UPDATE tb_name SET column=value WHERE(修改tb_name表中的数据,column字段值,WHERE指定条件)

  DELETE FROM tb_name WHERE CONDITION;(删除tb_name表中的数据,WHERE指定条件)

选择:

  SELECT 字段 FROM tb_name WHERE CONDITION(选择tb_name中数据,WHERE指定条件)

  *: 所有字段

  WHERE: 没有条件显示所有行;

创建用户:

  CREATE USER 'USERNAME'@'HOST' [IDENTIFIED BY 'PASSWORD'];(创建用户USERNAME@HOST.并指定密码,这个用户只能连接到mysql上来,其它操作能做查看,其它创建数据库权限都没有,这只是创建用户)

  DROP USER 'USERNAME'@'HOST';(删除用户USERNAME@HOST)

  HOST:主机表示;

    IP:IP地址

    HOSTNAME:主机名称

    NETWORK:网络地址

    通配符:

      _: 匹配任意单个字符,172.16.0._

      %: 匹配任意长度任意字符;


  jerry@localhost, jerry@172.16.100.1(不属于同一个用户)

  jerry@'%':jerry可以从所有主机登录;

DCL:

  GRANT pri1,pri2,... ON DB_NAME.TB_NAME TO 'USERNAME'@'HOST' [IDENTIFIED BY 'PASSWORD'];(授权,pri1权限1,pri2权限2,...DB_NAME.TB_NAME那个数据库那张表,USERNAME@HOST用户,并且可以指定密码)

  REVOKE pri1,pri2,... ON DB_NAME.TB_NAME FROM 'USERNAME'@'HOST';(取消权限,pri1权限1,pri2权限2,...DB_NAME.TB_NAME那个数据库那张表,USERNAME@HOST用户)

  查看用户的授权:SHOW GRANTS FOR 'USERNAME'@'HOST';(查看USERNAME@HOST用户具有的权限)

  ALL PRIVILEGES(所有权限)


选择和投影

选择:选择行的,指定以某字段做为搜索码,做逻辑比较,筛选符合条件的行;所谓选择根据某一个选择码,或者叫搜索码,表中有字段,每个字段可能有值,无论它是字符串还是数值或者是日期时间,我们指定这个字段符合一定条件行才给它显示出来,这个过程叫做选择;

  WHERE: 指定选择条件;

投影:选择列的;

INT(整型) A=10

  4位

CHAR(字符型)A=10

  16位

[root@localhost ~]# yum list all | grep mysql
Unable to read consumer identity
apr-util-mysql.i386                     1.2.7-11.el5_5.2          Server        
freeradius-mysql.i386                   1.1.3-1.6.el5             Server        
freeradius2-mysql.i386                  2.1.12-3.el5              Server        
libdbi-dbd-mysql.i386                   0.8.1a-1.2.2              Server        
mod_auth_mysql.i386                     1:3.0.0-3.2.el5_3         Server        
mysql.i386                              5.0.77-4.el5_6.6          Server(mysql客户端)        
mysql-bench.i386                        5.0.77-4.el5_6.6          Server(mysql性能分析组建)        
mysql-connector-odbc.i386               3.51.26r1127-2.el5        Server(mysql专用odbc连接器)        
mysql-connector-odbc64.i386             5.1.8-1.el5               Server        
mysql-devel.i386                        5.0.77-4.el5_6.6          Server        
mysql-server.i386                       5.0.77-4.el5_6.6          Server(mysql服务器端)        
mysql-test.i386                         5.0.77-4.el5_6.6          Server(mysql测试组建)        
php-mysql.i386                          5.1.6-32.el5              Server        
php53-mysql.i386                        5.3.3-5.el5               Server        
qt4-mysql.i386                          4.2.1-1.el5_7.1           Server        
rsyslog-mysql.i386                      3.22.1-7.el5              Server        
[root@localhost ~]# yum -y install mysql-server(安装mysql-server服务器端软件)
提示:一般安装mysql-server会自动解决依赖关系安装mysql客户端;
[root@localhost ~]# service mysqld start(启动mysqld服务) 
Initializing MySQL database:  Installing MySQL system tables...(初始化mysql数据库:安装mysql系统表)
141123  3:37:27 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
141123  3:37:27 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
OK
Filling help tables...
141123  3:37:28 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
141123  3:37:28 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
OK

To start mysqld at boot time you have to copy(正在复制mysqld当中某些数据)
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !(mysqld有一个root用户,这个root用户跟操作系统root是两码事,这是mysql服务器的root,mysql
服务器中数据应该能够背那些用户访问应该定义权限的,一个用户能够访问那些数据库对象,这些都要靠用户标识来识别的,这个用户是数据库服务器的用户,跟操作系统的用户没有关系,
而这个用户默认密码为空,所以为了安全性,应该将它的密码设定为一个特定密码,而这个用户是具有最高权限的,所以不设定密码对我们而言是非常危险的)
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h localhost password 'new-password'

Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/bin/mysqlbug script!

The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
                                                           [  OK  ]
Starting MySQL:                                            [  OK  ]
提示:第一次启动mysqld它会自动完成初始化;
[root@localhost ~]# netstat -tnlp(查看系统服务,-t代表tcp,-n以数字显示,-l监听端口,-p显示服务名称)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      3494/./hpiod        
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      23938/mysqld        
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      3175/portmap        
tcp        0      0 0.0.0.0:852                 0.0.0.0:*                   LISTEN      3214/rpc.statd      
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      3515/sshd           
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      3527/cupsd          
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      3564/sendmail       
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      23587/sshd          
tcp        0      0 127.0.0.1:6011              0.0.0.0:*                   LISTEN      22983/sshd          
tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN      3499/python         
tcp        0      0 :::8080                     :::*                        LISTEN      20981/httpd         
tcp        0      0 :::80                       :::*                        LISTEN      20981/httpd         
tcp        0      0 :::22                       :::*                        LISTEN      3515/sshd           
tcp        0      0 ::1:6010                    :::*                        LISTEN      23587/sshd          
tcp        0      0 ::1:6011                    :::*                        LISTEN      22983/sshd          
tcp        0      0 :::443                      :::*                        LISTEN      20981/httpd     
[root@localhost ~]# mysql(连接mysql服务器)
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> \q(退出mysql服务器)
Bye
[root@localhost ~]# mysql -uroot -p -h 172.16.100.1(连接mysql服务器,-u指定用户root,-p指定密码,-h指定服务器地址)
Enter password: (密码为空,直接敲回车)
ERROR 1130 (00000): Host '172.16.100.1' is not allowed to connect to this MySQL server
提示:使用172.16.100.1连接不上去;
[root@localhost ~]# mysql -uroot -p -h 127.0.0.1(连接mysql服务器,-u指定用户root,-p指定密码,-h制定服务器地址) 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> \quiet(退出mysql)
Bye
提示:通过127.0.0.1可以连接上mysql服务器,这是因为mysql用户比较独特,mysql用户不是仅有用户名,mysql用户名包含用户和允许它登录主机;
[root@localhost ~]# mysql -uroot -p -h 127.0.0.1(连接mysql服务器,-u指定用户root,-p指定密码,-h制定服务器地址) 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> \q(退出mysql)
Bye
[root@localhost ~]# ls /var/lib/(查看/var/lib/目录文件及子目录)
alternatives  dbus      games  logrotate.status  multipath  ntp          rhsm          sepolgen        up2date
bluetooth     dhclient  hal    misc              mysql      php          rpm           setroubleshoot  xkb
dav           dhcpv6    iscsi  mlocate           nfs        random-seed  scrollkeeper  stateless       yum
[root@localhost ~]# ls /var/lib/mysql/(查看/var/lib/mysql目录文件及子目录)
ibdata1  ib_logfile0  ib_logfile1  mysql  mysql.sock  test
提示:mysql.sock是实现本机进程间通信,这样就使得它不需要使用网络驱动连接,这种速度要快的多的多;
[root@localhost ~]# ls -l /var/lib/mysql/(查看/var/lib/mysql目录下详细信息)
total 20552
-rw-rw---- 1 mysql mysql 10485760 Nov 23 03:37 ibdata1
-rw-rw---- 1 mysql mysql  5242880 Nov 23 03:37 ib_logfile0
-rw-rw---- 1 mysql mysql  5242880 Nov 23 03:37 ib_logfile1
drwx------ 2 mysql mysql     4096 Nov 23 03:37 mysql
srwxrwxrwx 1 mysql mysql        0 Nov 23 03:37 mysql.sock
drwx------ 2 mysql mysql     4096 Nov 23 03:37 test
提示:如果客户端和服务器端不在同一台主机上,那就必须要使用tcp/ip来进行连接了;
[root@localhost ~]# mysql -uroot -p -h 127.0.0.1(连接mysql服务器,-u指定用户,-p指定密码,-h指定地址)
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> \h  

For information about MySQL products and services, visit:
   http://www.mysql.com/
For developer information, including the MySQL Reference Manual, visit:
   http://dev.mysql.com/
To buy MySQL Network Support, training, or other products, visit:
   https://shop.mysql.com/

List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
?         (\?) Synonym for `help'.(获取帮助)
clear     (\c) Clear command.
connect   (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter. NOTE: Takes the rest of the line as new delimiter.
edit      (\e) Edit command with $EDITOR.
ego       (\G) Send command to mysql server, display result vertically.
exit      (\q) Exit mysql. Same as quit.
go        (\g) Send command to mysql server.
help      (\h) Display this help.
nopager   (\n) Disable pager, print to stdout.
notee     (\t) Don't write into outfile.
pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER.
print     (\p) Print current command.
prompt    (\R) Change your mysql prompt.
quit      (\q) Quit mysql.(退出客户端)
rehash    (\#) Rebuild completion hash.
source    (\.) Execute an SQL script file. Takes a file name as an argument.
status    (\s) Get status information from the server.
system    (\!) Execute a system shell command.
tee       (\T) Set outfile [to_outfile]. Append everything into given outfile.
use       (\u) Use another database. Takes database name as argument.
charset   (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
warnings  (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.

For server side help, type 'help contents'

mysql> SHOW DATABASES;(显示数据库)
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
| test               | 
+--------------------+
3 rows in set (0.00 sec)

提示:安装完mysql以后默认创建3个数据库,最重要的是mysql的库,information_schema库是为了保证兼容的,如果其他服务器不支持SHOW这样命令,我们也能够查找有多少数据
库,所以information_schema当中所保留的就是类似将我们数据库当中所产生执行中的信息保存在一个数据库的格式并且提供一个查询接口,说白了information_schema是mysql
运行过程中位于内存中的信息,test数据库是空的,测试的时候才用到它,而这每一个库其实对应于文件系统中一个目录;

[root@localhost ~]# ls /var/lib/mysql/(查看/var/lib/mysql目录)
ibdata1  ib_logfile0  ib_logfile1  mysql  mysql.sock  test
提示:mysql默认将数据库放在/var/lib/mysql目录,有mysql、test就是没有information_schema,这是因为information_schema是位于内存中的;
[root@localhost ~]# cd /var/lib/mysql/(切换到/var/lib/mysql目录)
[root@localhost mysql]# ls(查看当前目录文件及子目录)
ibdata1  ib_logfile0  ib_logfile1  mysql  mysql.sock  test
[root@localhost mysql]# mkdir mydb(创建mydb目录)
[root@localhost mysql]# ls(查看当前目录文件及子目录)
ibdata1  ib_logfile0  ib_logfile1  mydb  mysql  mysql.sock  test
[root@localhost ~]#  mysql -uroot -p -h 127.0.0.1(连接mysql服务器,-u指定用户,-p指定密码,-h指定地址)
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mydb               | 
| mysql              | 
| test               | 
+--------------------+
4 rows in set (0.01 sec)

提示:在/var/lib/mysql创建目录mydb,就是创建数据库mydb,所以数据库其实简单映射就是目录,对mysql而言就是在数据库目录下一个子目录,而且它的名称都是相同的,数
据库是否区分大小写取决于文件系统,ext3区分大小写,windows不区分大小写;
mysql> CREATE DATABASE testdb;(创建数据库testdb)
Query OK, 1 row affected (0.11 sec)

mysql> SHOW DATABASES;(显示数据库)
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mydb               | 
| mysql              | 
| test               | 
| testdb             | 
+--------------------+
5 rows in set (0.00 sec)

提示:mysql数据库是由记忆功能的,也就是说有命令历史;

mysql> CREATE DATABASE testdb;(创建数据库testdb)
ERROR 1007 (HY000): Can't create database 'testdb'; database exists
提示:不能创建数据库testdb,数据库存在;
mysql> CREATE DATABASE IF NOT EXISTS testdb;(判断testdb数据库是否存在,如果不存在就创建)
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> DROP DATABASE testdb;(删除数据库testdb) 
Query OK, 0 rows affected (0.10 sec)

mysql> SHOW DATABASES;(显示数据库)
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mydb               | 
| mysql              | 
| test               | 
+--------------------+
4 rows in set (0.03 sec)

mysql>USE mydb;(设定默认数据库为mydb)          
Database changed
提示:如果不指定默认数据库,创建表时需要使用CREATE TABLE db_name(数据库名).tb_name(表名称),不然不知道创建那个数据库里面;
mysql> CREATE TABLE students(Name CHAR(20) NOT NULL,Age TINYINT UNSIGNED,Gender CHAR(1) NOT NULL);(创建表students,字段:Name名称,字符型,
20字符,不允许为空;Age年龄,微整型1个字节,UNSIGNED无符号,只能整数或0;Gender性别,字符型,1个字符,不能为空)          
ERROR 1005 (HY000): Can't create table 'students' (errno: 13)
提示:不能创建数据库students;
mysql> SELECT DATABASE();(查看默认数据库)
+------------+
| DATABASE() |
+------------+
| mydb       | 
+------------+
1 row in set (0.00 sec)
[root@localhost mysql]# ll(查看/var/lib/mysql目录文件及子目录详细信息)
total 20560
-rw-rw---- 1 mysql mysql 10485760 Nov 23 03:37 ibdata1
-rw-rw---- 1 mysql mysql  5242880 Nov 23 03:37 ib_logfile0
-rw-rw---- 1 mysql mysql  5242880 Nov 23 03:37 ib_logfile1
drwxr-xr-x 2 root  root      4096 Nov 23 09:46 mydb
drwx------ 2 mysql mysql     4096 Nov 23 03:37 mysql
srwxrwxrwx 1 mysql mysql        0 Nov 23 03:37 mysql.sock
drwx------ 2 mysql mysql     4096 Nov 23 03:37 test
提示:刚才创建mydb数据库是直接在/var/lib/mysql目录创建目录,这个目录属主属组是root,运行mysql服务器的是mysql,没权限;
[root@localhost mysql]# rm -rf mydb/(删除mydb目录,-r删除目录,-f强制删除)

mysql> CREATE DATABASE mydb;(创建mydb数据库)
Query OK, 1 row affected (0.01 sec)

[root@localhost mysql]# ll(查看/var/lib/mysql目录文件及子目录详细信息)
total 20560
-rw-rw---- 1 mysql mysql 10485760 Nov 23 03:37 ibdata1
-rw-rw---- 1 mysql mysql  5242880 Nov 23 03:37 ib_logfile0
-rw-rw---- 1 mysql mysql  5242880 Nov 23 03:37 ib_logfile1
drwx------ 2 mysql mysql     4096 Nov 23 12:09 mydb
drwx------ 2 mysql mysql     4096 Nov 23 03:37 mysql
srwxrwxrwx 1 mysql mysql        0 Nov 23 03:37 mysql.sock
drwx------ 2 mysql mysql     4096 Nov 23 03:37 test

mysql> CREATE TABLE students(Name CHAR(20) NOT NULL,Age TINYINT UNSIGNED,Gender CHAR(1) NOT NULL);(创建表students,字段:Name名称,字
符型,20字符,不允许为空;Age年龄,微整型1个字节,UNSIGNED无符号,只能整数或0;Gender性别,字符型,1个字符,不能为空)         

mysql> SHOW TABLES;(查看表)
+----------------+
| Tables_in_mydb |
+----------------+
| students       | 
+----------------+
1 row in set (0.00 sec)

mysql> DESC students;(查看students表中的结构)
+--------+---------------------+------+-----+---------+-------+
| Field  | Type                | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| Name   | char(20)            | NO   |     | NULL    |       | 
| Age    | tinyint(3) unsigned | YES  |     | NULL    |       | 
| Gender | char(1)             | NO   |     | NULL    |       | 
+--------+---------------------+------+-----+---------+-------+
3 rows in set (0.06 sec)

提示:表名区分大小写,因为表对应单个的文件放在数据库上;

mysql> help CREATE TABLE;(查看CREATE TABLE命令的帮助)
Name: 'CREATE TABLE'
Description:
Syntax:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_option] ...

Or:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    [(create_definition,...)]
    [table_option] ...
    select_statement

Or:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    { LIKE old_tbl_name | (LIKE old_tbl_name) }

create_definition:
    col_name column_definition
  | [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
        [index_type]
  | {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
        [index_type]
  | [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]
        [index_name] [index_type] (index_col_name,...)
        [index_type]
  | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)
        [index_type]
  | [CONSTRAINT [symbol]] FOREIGN KEY
        [index_name] (index_col_name,...) reference_definition
  | CHECK (expr)

column_definition:
    data_type [NOT NULL | NULL] [DEFAULT default_value]
      [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
      [COMMENT 'string'] [reference_definition]

data_type:
    BIT[(length)]
  | TINYINT[(length)] [UNSIGNED] [ZEROFILL]
  | SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
  | MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
  | INT[(length)] [UNSIGNED] [ZEROFILL]
  | INTEGER[(length)] [UNSIGNED] [ZEROFILL]
  | BIGINT[(length)] [UNSIGNED] [ZEROFILL]
  | REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
  | DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
  | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
  | DECIMAL[(length[,decimals])] [UNSIGNED] [ZEROFILL]
  | NUMERIC[(length[,decimals])] [UNSIGNED] [ZEROFILL]
  | DATE
  | TIME
  | TIMESTAMP
  | DATETIME
  | YEAR
  | CHAR[(length)]
      [CHARACTER SET charset_name] [COLLATE collation_name]
  | VARCHAR(length)
      [CHARACTER SET charset_name] [COLLATE collation_name]
  | BINARY[(length)]
  | VARBINARY(length)
  | TINYBLOB
  | BLOB
  | MEDIUMBLOB
  | LONGBLOB
  | TINYTEXT [BINARY]
      [CHARACTER SET charset_name] [COLLATE collation_name]
  | TEXT [BINARY]
      [CHARACTER SET charset_name] [COLLATE collation_name]
  | MEDIUMTEXT [BINARY]
      [CHARACTER SET charset_name] [COLLATE collation_name]
  | LONGTEXT [BINARY]
      [CHARACTER SET charset_name] [COLLATE collation_name]
  | ENUM(value1,value2,value3,...)
      [CHARACTER SET charset_name] [COLLATE collation_name]
  | SET(value1,value2,value3,...)
      [CHARACTER SET charset_name] [COLLATE collation_name]
  | spatial_type

index_col_name:
    col_name [(length)] [ASC | DESC]

index_type:
    USING {BTREE | HASH | RTREE}

reference_definition:
    REFERENCES tbl_name (index_col_name,...)
      [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
      [ON DELETE reference_option]
      [ON UPDATE reference_option]

reference_option:
    RESTRICT | CASCADE | SET NULL | NO ACTION

table_option:
    {ENGINE|TYPE} [=] engine_name
  | AUTO_INCREMENT [=] value
  | AVG_ROW_LENGTH [=] value
  | [DEFAULT] CHARACTER SET [=] charset_name
  | CHECKSUM [=] {0 | 1}
  | [DEFAULT] COLLATE [=] collation_name
  | COMMENT [=] 'string'
  | CONNECTION [=] 'connect_string'
  | DATA DIRECTORY [=] 'absolute path to directory'
  | DELAY_KEY_WRITE [=] {0 | 1}
  | INDEX DIRECTORY [=] 'absolute path to directory'
  | INSERT_METHOD [=] { NO | FIRST | LAST }
  | MAX_ROWS [=] value
  | MIN_ROWS [=] value
  | PACK_KEYS [=] {0 | 1 | DEFAULT}
  | PASSWORD [=] 'string'
  | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}
  | UNION [=] (tbl_name[,tbl_name]...)

select_statement:
    [IGNORE | REPLACE] [AS] SELECT ...   (Some legal select statement)

CREATE TABLE creates a table with the given name. You must have the
CREATE privilege for the table.

Rules for allowable table names are given in
http://dev.mysql.com/doc/refman/5.0/en/identifiers.html. By default,
the table is created in the default database. An error occurs if the
table exists, if there is no default database, or if the database does
not exist.

URL: http://dev.mysql.com/doc/refman/5.0/en/create-table.html

mysql> help ALTER TABLE;(查看ALTER TABLE命令的帮助)
Name: 'ALTER TABLE'
Description:
Syntax:
ALTER [IGNORE] TABLE tbl_name
    alter_specification [, alter_specification] ...

alter_specification:
    table_option ...
  | ADD [COLUMN] col_name column_definition
        [FIRST | AFTER col_name ](添加字段,|表示或者,col_name字段名称,column_definition字段定义,FIRST把这个字段加到第一个字段,AFTER col_name
放在某个字段后面,不指定位置默认放在最后)
  | ADD [COLUMN] (col_name column_definition,...)
  | ADD {INDEX|KEY} [index_name]
        [index_type] (index_col_name,...) [index_type]
  | ADD [CONSTRAINT [symbol]] PRIMARY KEY
        [index_type] (index_col_name,...) [index_type]
  | ADD [CONSTRAINT [symbol]]
        UNIQUE [INDEX|KEY] [index_name]
        [index_type] (index_col_name,...) [index_type]
  | ADD [FULLTEXT|SPATIAL] [INDEX|KEY] [index_name]
        (index_col_name,...) [index_type]
  | ADD [CONSTRAINT [symbol]]
        FOREIGN KEY [index_name] (index_col_name,...)
        reference_definition
  | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
  | CHANGE [COLUMN] old_col_name new_col_name column_definition
        [FIRST|AFTER col_name](改变字段,old_col_name原字段名称,new_col_name新字段名称,column_definition字段定义,FIRST把则个字段加到第一个字
段,AFTER col_name放在某个字段后面,不指定位置默认放在最后)
  | MODIFY [COLUMN] col_name column_definition
        [FIRST | AFTER col_name](修改字段)
  | DROP [COLUMN] col_name(删除字段,col_name字段名)
  | DROP PRIMARY KEY
  | DROP {INDEX|KEY} index_name
  | DROP FOREIGN KEY fk_symbol
  | DISABLE KEYS
  | ENABLE KEYS
  | RENAME [TO] new_tbl_name
  | ORDER BY col_name [, col_name] ...
  | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
  | [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]
  | DISCARD TABLESPACE
  | IMPORT TABLESPACE

index_col_name:
    col_name [(length)] [ASC | DESC]

index_type:
    USING {BTREE | HASH | RTREE}

ALTER TABLE enables you to change the structure of an existing table.
For example, you can add or delete columns, create or destroy indexes,
change the type of existing columns, or rename columns or the table
itself. You can also change the comment for the table and type of the
table.

URL: http://dev.mysql.com/doc/refman/5.0/en/alter-table.html

mysql> ALTER TABLE students ADD course VARCHAR(100);(修改表students添加字段sourse课程,可变长度字符型,最多100字符)
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC students;(查看students表中结构)
+--------+---------------------+------+-----+---------+-------+
| Field  | Type                | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| Name   | char(20)            | NO   |     | NULL    |       | 
| Age    | tinyint(3) unsigned | YES  |     | NULL    |       | 
| Gender | char(1)             | NO   |     | NULL    |       | 
| course | varchar(100)        | YES  |     | NULL    |       | 
+--------+---------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

提示:添加字段course默认在字段最后;

mysql> ALTER TABLE students CHANGE course Course VARCHAR(100) AFTER Name;(修改表students,改变字段名course为Course,就算只改变字段名称也需要
写字段属性,并放在Name之后)
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC students;(查看students表中结构)
+--------+---------------------+------+-----+---------+-------+
| Field  | Type                | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| Name   | char(20)            | NO   |     | NULL    |       | 
| Course | varchar(100)        | YES  |     | NULL    |       | 
| Age    | tinyint(3) unsigned | YES  |     | NULL    |       | 
| Gender | char(1)             | NO   |     | NULL    |       | 
+--------+---------------------+------+-----+---------+-------+

4 rows in set (0.00 sec)

mysql> DESC students;(查看students表中结构)
+--------+---------------------+------+-----+---------+-------+
| Field  | Type                | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| Name   | char(20)            | NO   |     | NULL    |       | 
| Course | varchar(100)        | YES  |     | NULL    |       | 
| Age    | tinyint(3) unsigned | YES  |     | NULL    |       | 
| Gender | char(1)             | NO   |     | NULL    |       | 
+--------+---------------------+------+-----+---------+-------+

4 rows in set (0.00 sec)

mysql> INSERT INTO students (Name,Gender) VALUE ('LingHuchong','M'),('XiaoLongnv','F');(向students表中插入数据)
Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM students;(查看表sutdents表中所有字段数据)
+-------------+--------+------+--------+
| Name        | Course | Age  | Gender |
+-------------+--------+------+--------+
| LingHuchong | NULL   | NULL | M      | 
| XiaoLongnv  | NULL   | NULL | F      | 
+-------------+--------+------+--------+
2 rows in set (0.00 sec)

mysql> INSERT INTO students VALUES ('XiaoXiangzi','HaMogong',57,'M');(向students表中插入数据)
Query OK, 1 row affected (0.00 sec)

提示:给一个用户所有值就不需要指定字段名称,没指定字段表示每个字段都有值;

mysql> SELECT * FROM students;(查看表students表中所有字段数据)
+-------------+----------+------+--------+
| Name        | Course   | Age  | Gender |
+-------------+----------+------+--------+
| LingHuchong | NULL     | NULL | M      | 
| XiaoLongnv  | NULL     | NULL | F      | 
| XiaoXiangzi | HaMogong |   57 | M      | 
+-------------+----------+------+--------+
3 rows in set (0.00 sec)

mysql> UPDATE students SET Course='Pixiejianfa';(修改sutdents表中Course字段为Pixiejianfa)
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> SELECT * FROM students;(查看students表中所有字段数据)
+-------------+-------------+------+--------+
| Name        | Course      | Age  | Gender |
+-------------+-------------+------+--------+
| LingHuchong | Pixiejianfa | NULL | M      | 
| XiaoLongnv  | Pixiejianfa | NULL | F      | 
| XiaoXiangzi | Pixiejianfa |   57 | M      | 
+-------------+-------------+------+--------+
3 rows in set (0.00 sec)

mysql> UPDATE students SET Course='Hamogong' WHERE Name='Xiaoxiangzi';(修改students表中Course字段为Hamogong,并且条件Name为Xiaoxiangzi)
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM students;(查看students表中所有字段数据)
+-------------+-------------+------+--------+
| Name        | Course      | Age  | Gender |
+-------------+-------------+------+--------+
| LingHuchong | Pixiejianfa | NULL | M      | 
| XiaoLongnv  | Pixiejianfa | NULL | F      | 
| XiaoXiangzi | Hamogong    |   57 | M      | 
+-------------+-------------+------+--------+
3 rows in set (0.01 sec)

mysql> SELECT Name,Course FROM students;(查看students表中Name,Course字段数据)
+-------------+-------------+
| Name        | Course      |
+-------------+-------------+
| LingHuchong | Pixiejianfa | 
| XiaoLongnv  | Pixiejianfa | 
| XiaoXiangzi | Hamogong    | 
+-------------+-------------+
3 rows in set (0.00 sec)

mysql> SELECT Name,Course FROM students WHERE Gender='M';(查看students表中Name,Course字段,条件为Gender为M)
+-------------+-------------+
| Name        | Course      |
+-------------+-------------+
| LingHuchong | Pixiejianfa | 
| XiaoXiangzi | Hamogong    | 
+-------------+-------------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM students;(查看students表所有字段数据)
+-------------+-------------+------+--------+
| Name        | Course      | Age  | Gender |
+-------------+-------------+------+--------+
| LingHuchong | Pixiejianfa | NULL | M      | 
| XiaoLongnv  | Pixiejianfa | NULL | F      | 
| XiaoXiangzi | Hamogong    |   57 | M      | 
+-------------+-------------+------+--------+
3 rows in set (0.00 sec)

mysql> DELETE FROM students WHERE Course='Pixiejianfa';(删除students表中Course字段为Pixiejianfa数据)
Query OK, 2 rows affected (0.03 sec)

mysql> SELECT * FROM students;(查看students表中所有字段数据)
+-------------+----------+------+--------+
| Name        | Course   | Age  | Gender |
+-------------+----------+------+--------+
| XiaoXiangzi | Hamogong |   57 | M      | 
+-------------+----------+------+--------+
1 row in set (0.00 sec)

mysql> CREATE USER 'jerry'@'%' IDENTIFIED BY 'jerry';(创建用户jerry@%,并指定密码为jerry)
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GRANTS FOR 'jerry'@'%';(查看jerry@%用户具有的权限)
+-----------------------------------------------------------------------------+
| Grants for jerry@%                                                          |
+-----------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'jerry'@'%' IDENTIFIED BY PASSWORD '7e82afb618ffeb73' | 
+-----------------------------------------------------------------------------+
1 row in set (0.00 sec)

提示:jerry@%只有USAGE权限,USAGE表示连到服务器上来,别的权限都没有;

mysql> GRANT ALL PRIVILEGES ON mydb.* TO 'jerry'@'%';(给jerry@%用户所有权限,在mydb数据库中所有表)
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GRANTS FOR 'jerry'@'%';(查看jerry@%用户具有的权限)
+-----------------------------------------------------------------------------+
| Grants for jerry@%                                                          |
+-----------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'jerry'@'%' IDENTIFIED BY PASSWORD '7e82afb618ffeb73' | 
| GRANT ALL PRIVILEGES ON `mydb`.* TO 'jerry'@'%'                             | 
+-----------------------------------------------------------------------------+
2 rows in set (0.00 sec)

提示:当前jerry@%具有ALL PRIVILEGES所有权限;

测试:此时可以通过jerry@%用户远程连接到mysql数据库,打开一个新的linux主机,这个主机只要安装mysql客户端就可以连接到mysql服务器端;
[root@localhost ~]# yum install mysql(安装mysql客户端)
[root@localhost ~]# mysql -ujerry -p -h172.16.100.1(连接mysql数据库,-u用户,-p密码,-h主机)
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mydb               | 
| test               | 
+--------------------+
3 rows in set (0.00 sec)

提示:普通用户是看不到mysql数据库的,只能看到有权限访问的库,mysql库里面都是管理数据,只有管理员才能查看;
mysql> \q(退出)
Bye

MySQL基础操作练习(所属的库叫做testdb):

新建如下表(包括结构和内容):

ID      Name      Age      Gender      Course

1        Ling Huchong   24         Male          Hamogong

2        Huang Rong     19         Female        Chilian Shenzhang

3        Lu Wushaung   18         Female        Jiuyang Shenggong

4        Zhu Ziliu      52         Male          Pixie Jianfa

5        Chen Jialuo      22         Male          Xianglong Shiba Zhang

2、完成如下操作

  (1)找出性别为女性的所有人;

  (2)找出年龄大于20的所有人;

  (3)修改Zhu Ziliu的Course为Kuihua Baodian;

  (4)删除年龄小于等于19岁的所有人;

  (5)创建此表及所属的库;

  (6)授权给testuser对testdb库有所有访问权限;

mysql> FLUSH PRIVILEGES;(刷新授权表)

为用户设定密码:

1、mysql>SET PASSWORD FOR 'USERNAME'@'HOST'=PASSWORD('password');

2、#mysqladmin -uUSERNAME -hHOST -p -password 'password'(此命令在shell下执行,-p指定老密码)

3、mysql> UPDATE user SET Password=PASSWORD('password') WHERE USER='root' AND Host='127.0.01';(修改user表Password内容,USER为root,并且Host为127.0.0.1)

逻辑运算:

AND

OR

NOT

图形客户端:

1、phpMyAdmin(最常用一种,客户端不需要安装任何工具,只要在服务器装php程序,这个程序就能够给我们提供管理mysql服务器的界面)

2、Workbench(官方提供)

3、MySQL Front(商业)

4、Navicat for MySQL(商业)

5、Toad

PHP和MySQL关系:

apache进程要想实现支持动态网站内容,要使用PHP、JSP或者CGI中的perl、python能够支持动态站点的程序员开发动态网页才可以,这个网页要能够执行,PHP就是其中一种,假如PHP以CGI方式执行,很显然apache需要执行动态内容需要提交给PHP进程来运行,PHP解释器来运行,还是PHP解释器自己运行的PHP开发的脚步,当用户访问一个站点的时候,用户要访问一个页面,这个页面会启动一个PHP进程,这个进程到底是运行的程序是什么东西,是脚步中开发的程序还是解释器自身,解释器运行的脚步,解释器自身没有必要访问数据,谁来访问数据,如果脚步中开发了需要用到数据,脚步中说用到数据才能用到数据,解释器不能用到数据,是开发的脚步中需要用到程序才需要跟MySQL打交道,所以这个数据里面说我们要使用MySQL开发的驱动连接MySQL的时候,于是开始装载这个驱动程序,通过这个驱动连接到MySQL, 把它的SQL命令到MySQL服务器,来实现对于数据的请求,可能包括增、删、查、改或者创建数据对象都有可能,甚至创建用户也都有可能,所以这就是apache跟PHP跟MySQL的关系,PHP本身跟MySQL没有任何关系,只不过这里面的程序需要访问用到MySQL服务器的时候,它通过这个驱动连接上MySQL才能跟MySQl建立联系的。

单层结构

两层结构

三层结构

php连接mysql并获取数据测试:

<?php

$conn=mysql_connect('localhost','root','123456');(定义变量,对于php来讲定义变量使用$符定义,使用mysql函数,mysql_connect是phpmysql提供的的函数,能够让php连接到mysql服务器的函数,它有三个参数,第一mysql服务器是谁,第二用户名,第三密码,连接以后到底能不能连接成功,开始判断,mysql_connect这个函数执行状态返回值,保存到$conn当中)

if (!$conn)()(开始判断,$conn如果为真,就连接上去了,变量如果为假就没有连接上)

  {

  die('Could not connect: ' . mysql_error());(如果为假,告诉连接不上,而且mysql发生错误)

  }

mysql_select_db("mydb", $conn);

$result = mysql_query("SELECT * FROM tb1");

while($row = mysql_fetch_array($result))

  {

  echo $row['Name'] . " " . $row['Age'];

  echo "<br />";

  }

mysql_close();

?>

测试PHP连接MySQL脚步:

<?php

  $conn=mysql_connect('localhost','root','redhat');

  if ($conn)

    echo "Success...";

  else

    echo "Failure...";

?>

LAMP:

  phpMyAdmin(PHP的web服务器程序,这个程序有一个特点,它能够提供管理MySQL界面的,能不能运行还要驱动PHP所提供的模块是不是足够)

论坛:
  discuz(腾讯,不能做广告赚钱,有两种授权,免费授权和商业授权,网站http://www.discuz.net/)

  phpwind

  phpbb(国际)

CMS:内容管理系统,可以帮企业快速建网站;

  drupal(国外程序)

  jcomla

LAMP
  wordpress: 全球性个人博客系统;

[root@localhost ~]# mysql(连接mysql服务器)
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SHOW DATABASES;(显示数据库)
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mydb               | 
| mysql              | 
| test               | 
+--------------------+
4 rows in set (0.00 sec)

mysql> USE mysql;(改变默认数据库为mysql)
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SHOW TABLES;(显示默认数据库中的表)
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              | 
| db                        | 
| func                      | 
| help_category             | 
| help_keyword              | 
| help_relation             | 
| help_topic                | 
| host                      | 
| proc                      | 
| procs_priv                | 
| tables_priv               | 
| time_zone                 | 
| time_zone_leap_second     | 
| time_zone_name            | 
| time_zone_transition      | 
| time_zone_transition_type | 
| user                      | 
+---------------------------+
17 rows in set (0.00 sec)

mysql> DESC user;(查看user表结构)
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field                 | Type                              | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host                  | char(60)                          | NO   | PRI |         |       | 
| User                  | char(16)                          | NO   | PRI |         |       | 
| Password              | char(41)                          | NO   |     |         |       | 
| Select_priv           | enum('N','Y')                     | NO   |     | N       |       | 
| Insert_priv           | enum('N','Y')                     | NO   |     | N       |       | 
| Update_priv           | enum('N','Y')                     | NO   |     | N       |       | 
| Delete_priv           | enum('N','Y')                     | NO   |     | N       |       | 
| Create_priv           | enum('N','Y')                     | NO   |     | N       |       | 
| Drop_priv             | enum('N','Y')                     | NO   |     | N       |       | 
| Reload_priv           | enum('N','Y')                     | NO   |     | N       |       | 
| Shutdown_priv         | enum('N','Y')                     | NO   |     | N       |       | 
| Process_priv          | enum('N','Y')                     | NO   |     | N       |       | 
| File_priv             | enum('N','Y')                     | NO   |     | N       |       | 
| Grant_priv            | enum('N','Y')                     | NO   |     | N       |       | 
| References_priv       | enum('N','Y')                     | NO   |     | N       |       | 
| Index_priv            | enum('N','Y')                     | NO   |     | N       |       | 
| Alter_priv            | enum('N','Y')                     | NO   |     | N       |       | 
| Show_db_priv          | enum('N','Y')                     | NO   |     | N       |       | 
| Super_priv            | enum('N','Y')                     | NO   |     | N       |       | 
| Create_tmp_table_priv | enum('N','Y')                     | NO   |     | N       |       | 
| Lock_tables_priv      | enum('N','Y')                     | NO   |     | N       |       | 
| Execute_priv          | enum('N','Y')                     | NO   |     | N       |       | 
| Repl_slave_priv       | enum('N','Y')                     | NO   |     | N       |       | 
| Repl_client_priv      | enum('N','Y')                     | NO   |     | N       |       | 
| Create_view_priv      | enum('N','Y')                     | NO   |     | N       |       | 
| Show_view_priv        | enum('N','Y')                     | NO   |     | N       |       | 
| Create_routine_priv   | enum('N','Y')                     | NO   |     | N       |       | 
| Alter_routine_priv    | enum('N','Y')                     | NO   |     | N       |       | 
| Create_user_priv      | enum('N','Y')                     | NO   |     | N       |       | 
| ssl_type              | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       | 
| ssl_cipher            | blob                              | NO   |     | NULL    |       | 
| x509_issuer           | blob                              | NO   |     | NULL    |       | 
| x509_subject          | blob                              | NO   |     | NULL    |       | 
| max_questions         | int(11) unsigned                  | NO   |     | 0       |       | 
| max_updates           | int(11) unsigned                  | NO   |     | 0       |       | 
| max_connections       | int(11) unsigned                  | NO   |     | 0       |       | 
| max_user_connections  | int(11) unsigned                  | NO   |     | 0       |       | 
+-----------------------+-----------------------------------+------+-----+---------+-------+
37 rows in set (0.01 sec)

mysql> SELECT User,Host,Password FROM user;(查看user表中User,Host,Password字段数据)
+-------+-----------+------------------+
| User  | Host      | Password         |
+-------+-----------+------------------+
| root  | localhost |                  | 
| root  | 127.0.0.1 |                  | 
|       | localhost |                  | 
| jerry | %         | 7e82afb618ffeb73 | 
+-------+-----------+------------------+
4 rows in set (0.00 sec)

提示:当前root用户只能从本机登录,所以root用户没办法远程登录;

测试:通过远程主机登录;
[root@localhost ~]# mysql -uroot -p -h172.16.100.1(连接mysql数据库,-u用户,-p密码,-h主机)
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'172.16.100.8' (using password: NO)
[root@server41 ~]# vim /etc/hosts(编辑hosts文件)
172.16.100.1    server41.example.com
[root@server41 ~]# ping server41.example.com(ping测试)
PING server41.example.com (172.16.100.1) 56(84) bytes of data.
64 bytes from server41.example.com (172.16.100.1): icmp_seq=1 ttl=64 time=0.178 ms
64 bytes from server41.example.com (172.16.100.1): icmp_seq=2 ttl=64 time=0.027 ms
64 bytes from server41.example.com (172.16.100.1): icmp_seq=3 ttl=64 time=0.028 ms

--- server41.example.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.027/0.077/0.178/0.071 ms
[root@server41 ~]# mysql -uroot -p -hserver41.example.com(连接mysql数据库,-u用户,-p密码,-h主机)
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'server41.example.com' (using password: NO)

提示:对mysql而言,root localhost和root 127.0.0.1不是同一个用户,本来127.0.0.1和localhost指的的同一个东西,但对mysql而言他俩不是同一个用户,mysql
在识别主机的时候要么靠主机名,要么靠IP地址,就算是同一台主机它也是两个各自独立的用户,所以明确说明只能通过server41.example.com来登录,只有那个客户端是这个
主机名才能登录,而不是服务器端,用户名为空表示匿名用户;

mysql> SET PASSWORD FOR 'root'@'localhost'=PASSWORD('123456');(给root@localhost用户设置密码)                                                    
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT User,Host,Password FROM user;(查看user表中User,Host,Password字段数据)
+-------+-----------+------------------+
| User  | Host      | Password         |
+-------+-----------+------------------+
| root  | localhost | 565491d704013245 | 
| root  | 127.0.0.1 |                  | 
|       | localhost |                  | 
| jerry | %         | 7e82afb618ffeb73 | 
+-------+-----------+------------------+
4 rows in set (0.00 sec)

提示:这种修改密码结果是直接修改表的内容,而mysql对于用户认证的所有信息在内存中,所以只有让内存加载这张表它才能够知道这个用户密码改变,所以一般而言改了用户授
权或密码以后通常mysql数据重读授权表;

mysql> FLUSH PRIVILEGES;(让mysql数据库重读授权表)
Query OK, 0 rows affected (0.00 sec)

mysql> \q(退出mysql)
Bye
[root@server41 ~]# mysqladmin -uroot -h127.0.0.1 -p password '123456'(修改root@127.0.0.1用户密码为123456)
Enter password: (输入老密码,为空)
mysqladmin: connect to server at '127.0.0.1' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
提示:root@localohost和root@127.0.0.1两个用户被识别为不同的用户,但是最终结果还是同一个主机,因此它们彼此间还是会受到影响;
[root@server41 ~]# mysqladmin -uroot -h127.0.0.1 -p password '123456'
Enter password: (输入root@localohost用户密码123456)
[root@server41 ~]# mysql(连接mysql服务器)
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@server41 ~]# mysql -uroot -p(连接mysql数据库,-u用户,-p密码)
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> USE mysql;(修改默认数据库为mysql)
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SELECT User,Host,Password FROM user;(查看user表中User,Host,Password字段数据)
+-------+-----------+------------------+
| User  | Host      | Password         |
+-------+-----------+------------------+
| root  | localhost | 565491d704013245 | 
| root  | 127.0.0.1 |                  | 
|       | localhost |                  | 
| jerry | %         | 7e82afb618ffeb73 | 
+-------+-----------+------------------+
4 rows in set (0.00 sec)

提示:改的还是root@localhost密码,使用-h指定127.0.0.1改的不是客户端,表示服务器是127.0.0.1,而本机客户端仍然被识别为localhost,所以mysqladmin并不能
随心所欲的改变用户密码,如果要改某个特定用户密码最好的方式还是使用SET PASSWORD;

mysql> UPDATE user SET Password=PASSWORD('123456') WHERE User='root' AND Host='127.0.0.1';(修改user表中Password字段内容,条件User为root
,并且Host为127.0.0.1)
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT User,Host,Password FROM user;(查看user表中User,Host,Password字段的数据)
+-------+-----------+------------------+
| User  | Host      | Password         |
+-------+-----------+------------------+
| root  | localhost | 565491d704013245 | 
| root  | 127.0.0.1 | 565491d704013245 | 
|       | localhost |                  | 
| jerry | %         | 7e82afb618ffeb73 | 
+-------+-----------+------------------+
4 rows in set (0.00 sec)

提示:密码一样加密结果也一样,没有加salt(盐);

mysql> FLUSH PRIVILEGES;(让mysql数据库重读授权表)
Query OK, 0 rows affected (0.00 sec)

mysql> UPDATE user SET Password=PASSWORD('redhat') WHERE User='root';(修改user表中Password字段内容,条件User为root)
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> SELECT User,Host,Password FROM user;(查看user表中User,Host,Password字段数据)
+-------+-----------+------------------+
| User  | Host      | Password         |
+-------+-----------+------------------+
| root  | localhost | 27c30f0241a5b69f | 
| root  | 127.0.0.1 | 27c30f0241a5b69f | 
|       | localhost |                  | 
| jerry | %         | 7e82afb618ffeb73 | 
+-------+-----------+------------------+
4 rows in set (0.01 sec)

mysql> FLUSH PRIVILEGES;(让mysql数据库重读授权表)
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.%.%' IDENTIFIED BY 'redhat';(授权root@127.16.%.%用户对所有库所有表所有权限,并设定
密码为redhat,%表示匹配任意长度任意字符,*表示所有)
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;(让mysql数据库重读授权表)
Query OK, 0 rows affected (0.00 sec)

测试:通过远程主机连接mysql数据库;
[root@localhost ~]# mysql -uroot -p -h172.16.100.1(连接mysql数据库,-u用户,-p密码,-h主机)
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 27
Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SHOW DATABASES;(显示数据库)
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mydb               | 
| mysql              | 
| test               | 
+--------------------+
4 rows in set (0.00 sec)

提示:一般不建议让管理员远程登录的权限,因为它的权利太大了,非常有风险,而且登录的时候帐号密码都是明文发送;

mysql> \q(退出mysql)
Bye

MySQL图形客户端Navicat for MySQL:

安装Navicat for MySQL, 安装完成后点Connection(连接)--新建连接,填写名称(随意)、主机名或IP地址、端口、用户名和密码,点击test Connection(测试连接),有问题;

[root@server41 ~]# mysql -uroot -p(连接mysql服务器,-u用户,-p密码)
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 30
Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> FLUSH PRIVILEGES;(让mysql数据库重读授权表)
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'redhat';(授权用户root@'%'对所有库所有表具有所有权限,并且设置密码为redhat)
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;(让mysql数据库重读授权表)
Query OK, 0 rows affected (0.00 sec)

点击连接,点击mydb库--表--students,可以通过+新增表数据;

PHP、apache、MySQL建立关联性:

[root@server41 ~]# yum install php53-mysql(安装php53-mysql驱动)
提示:php53-mysql是专门用于php访问mysql的程序;
[root@server41 ~]# cd /www/a.org/(切换到/www/a.org目录)
[root@server41 a.org]# vim index.php(编辑index.php文件)
<title>A</title>
<h1>a.org</h1>
<?php
  $conn=mysql_connect('localhost','root',redhat');
  if ($conn)
    echo "Success...";
  else
    echo "Failur...";
?>

测试:通过windows的ie浏览器访问www.a.org,无法连接;

[root@server41 a.org]# tail /var/log/httpd/error_log(查看httpd错误日志文件后10行)
[Sun Nov 23 21:19:22 2014] [error] [client 172.16.100.254] PHP Parse error:  syntax error, unexpected T_ENCAPSED_AND_WHITESPACE in /www/a.
org/index.php on line 4
[Sun Nov 23 21:19:23 2014] [error] [client 172.16.100.254] PHP Parse error:  syntax error, unexpected T_ENCAPSED_AND_WHITESPACE in /www/a.
org/index.php on line 4
[Sun Nov 23 21:19:24 2014] [error] [client 172.16.100.254] PHP Parse error:  syntax error, unexpected T_ENCAPSED_AND_WHITESPACE in /www/a.
org/index.php on line 4
[Sun Nov 23 21:19:24 2014] [error] [client 172.16.100.254] PHP Parse error:  syntax error, unexpected T_ENCAPSED_AND_WHITESPACE in /www/a.
org/index.php on line 4
[Sun Nov 23 21:19:40 2014] [error] [client 172.16.100.254] PHP Parse error:  syntax error, unexpected T_ENCAPSED_AND_WHITESPACE in /www/a.
org/index.php on line 4
[Sun Nov 23 21:19:41 2014] [error] [client 172.16.100.254] File does not exist: /www/a.org/favicon.ico, referer: http://www.a.org/
[Sun Nov 23 21:19:46 2014] [error] [client 172.16.100.254] PHP Parse error:  syntax error, unexpected T_ENCAPSED_AND_WHITESPACE in /www/a.
org/index.php on line 4
[Sun Nov 23 21:19:49 2014] [error] [client 172.16.100.254] PHP Parse error:  syntax error, unexpected T_ENCAPSED_AND_WHITESPACE in /www/a.
org/index.php on line 4
[Sun Nov 23 21:19:59 2014] [error] [client 172.16.100.254] File does not exist: /www/magedu.com/favicon.ico, referer: http://172.16.100.1/
[Sun Nov 23 21:20:03 2014] [error] [client 172.16.100.254] PHP Parse error:  syntax error, unexpected T_ENCAPSED_AND_WHITESPACE in /www/a.
org/index.php on line 4
[root@server41 a.org]# service httpd restart(重启httpd服务)
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

测试:通过windows的ie浏览器访问www.a.org;

[root@server41 ~]# service mysqld stop(停止mysqld服务)
Stopping MySQL:                                            [  OK  ]

测试:通过windows的ie浏览器访问www.a.org;

[root@server41 a.org]# vim index.php(编辑index.php文件)
[root@server41 a.org]# rm index.php(删除index.php文件)
rm: remove regular file `index.php'? y
[root@server41 a.org]# lftp 172.16.0.1/pub/Sources(连接ftp服务器)
cd ok,cwd=/pub/Sources
lftp 172.16.0.1:/pub/Sources> cd new_lamp
lftp 172.16.0.1:/pub/Sources/new_lamp> get phpMyAdmin-3.4.3.2-all-languages.tar.bz2(下载phpMyAdmin文件)
4924912 bytes transferred
lftp 172.16.0.1:/pub/Sources/new_lamp> bye(退出)
[root@server41 a.org]# ls(查看当前目录文件及子目录)                         
phpMyAdmin-3.4.3.2-all-languages.tar.bz2
[root@server41 a.org]# tar xf phpMyAdmin-3.4.3.2-all-languages.tar.bz2(解压phpMyAdmin文件,x解压,f后面跟文件)
[root@server41 a.org]# ls(查看当前目录文件及子目录)
phpMyAdmin-3.4.3.2-all-languages  phpMyAdmin-3.4.3.2-all-languages.tar.bz2
[root@server41 a.org]# mv phpMyAdmin-3.4.3.2-all-languages pma(修改php-MyAdmin名字为pma)

测试:通过windows的ie浏览器输入http://www.a.org/pma/,输入用户root,密码redhat,点击执行,无法登录MySQL服务器,MySQL服务器关闭了;

 

[root@server41 a.org]# service mysqld start(启动mysqld服务)
Starting MySQL:                                            [  OK  ]

测试:通过windows的ie浏览器输入http://www.a.org/pma/,输入用户root,密码redhat,点击执行,

点击mydb表--students--浏览,会自动生成MySQL语句;

 

 提示:为了安全,应该安装上php-mcrypt,php-mcrypt在php53没有提供;

[root@server41 a.org]# yum list all | grep php53(列出yum源,将结果送给管道只显示php53相关)
Unable to read consumer identity
php53.i386                              5.3.3-5.el5               installed     
php53-cli.i386                          5.3.3-5.el5               installed     
php53-common.i386                       5.3.3-5.el5               installed     
php53-mbstring.i386                     5.3.3-5.el5               installed     
php53-mysql.i386                        5.3.3-5.el5               installed     
php53-pdo.i386                          5.3.3-5.el5               installed     
php53-bcmath.i386                       5.3.3-5.el5               Server        
php53-dba.i386                          5.3.3-5.el5               Server        
php53-devel.i386                        5.3.3-5.el5               Server        
php53-gd.i386                           5.3.3-5.el5               Server        
php53-imap.i386                         5.3.3-5.el5               Server        
php53-intl.i386                         5.3.3-5.el5               Server        
php53-ldap.i386                         5.3.3-5.el5               Server        
php53-odbc.i386                         5.3.3-5.el5               Server        
php53-pgsql.i386                        5.3.3-5.el5               Server        
php53-process.i386                      5.3.3-5.el5               Server        
php53-pspell.i386                       5.3.3-5.el5               Server        
php53-snmp.i386                         5.3.3-5.el5               Server        
php53-soap.i386                         5.3.3-5.el5               Server        
php53-xml.i386                          5.3.3-5.el5               Server        
php53-xmlrpc.i386                       5.3.3-5.el5               Server        
[root@server41 ~]# lftp 172.16.0.1/pub/Sources(连接ftp服务器)
lftp 172.16.0.1:/pub/Sources> cd new_lamp/php53(切换到new_lamp/php53目录)
lftp 172.16.0.1:/pub/Sources/new_lamp/php53> ls(查看当前目录文件及子目录)
-rw-r--r--   1 500    500        2055387 Jun 29  2012 php53-eaccelerator-0.9.6.1-1.el5_0.wing.i686.rpm
-rw-r--r--   1 500    500          16165 Jun 02  2012 php53-mcrypt-5.3.3-1.el5.i386.rpm
-rw-r--r--   1 500    500         196118 Jun 29  2012 php53-xcache-1.3.2-1.el5_0.wing.i686.rpm(加速PHP执行的)
lftp 172.16.0.1:/pub/Sources/new_lamp/php53> bye(退出)
[root@server41 ~]# !lft(连接ftp服务器)
lftp 172.16.0.1/pub/Sources
cd ok, cwd=/pub/Sources
lftp 172.16.0.1:/pub/Sources> cd new_lamp/(切换到new_lamp目录)
lftp 172.16.0.1:/pub/Sources/new_lamp> get Discuz_X2.5_SC_GBK.zip(下载Discuz_X2.5_SC_GBK.zip文件)
9522601 bytes transferred
lftp 172.16.0.1:/pub/Sources/new_lamp> bye(退出)
[root@server41 ~]# ls(查看当前目录文件及子目录)    
anaconda-ks.cfg  Discuz_X2.5_SC_GBK.zip  install.log  install.log.syslog
[root@server41 ~]# unzip Discuz_X2.5_SC_GBK.zip(解压Discuz文件)
[root@server41 ~]# ls(查看当前目录文件及子目录)
anaconda-ks.cfg  Discuz_X2.5_SC_GBK.zip  install.log  install.log.syslog  readme  upload  utility
提示:对我们有用的是upload文件,表示这个里面的内容需要上传到服务器网站目录下去;
[root@server41 ~]# ls /www/b.net/(查看/www/b.net目录文件及子目录)
index.html
[root@server41 ~]# rm /www/b.net/index.html(删除index.html文件)
rm: remove regular file `/www/b.net/index.html'? y
[root@server41 ~]# mv upload/* /www/b.net/(将upload目录下所有文件移动到/www/b.net目录)

在测试的windows主机上修改C:\Windows\System32\drivers\etc目录下的hosts文件,添加如下;

172.16.100.2 www.b.net;

通过windows测试机的开始--运行,输入cmd命令打开命令提示符;

C:\Users\Smoke>ping www.b.net(ping测试www.b.net解析)

正在 Ping www.b.net [172.16.100.2] 具有 32 字节的数据:
来自 172.16.100.2 的回复: 字节=32 时间<1ms TTL=64
来自 172.16.100.2 的回复: 字节=32 时间<1ms TTL=64
来自 172.16.100.2 的回复: 字节=32 时间<1ms TTL=64
来自 172.16.100.2 的回复: 字节=32 时间<1ms TTL=64

172.16.100.2 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 0ms,平均 = 0ms

测试:通过windows的ie浏览器访问www.b.net,测试失败;

[root@server41 ~]# vim /etc/httpd/conf.d/virtual.conf(编辑httpd虚拟主机配置文件)

NameVirtualHost 172.16.100.2:80

<VirtualHost 172.16.100.1:80>
        ServerName hello.magedu.com
        DocumentRoot "/www/magedu.com"
        CustomLog /var/log/httpd/magedu.com/access_log combined
</VirtualHost>

<VirtualHost 172.16.100.2:80>
        ServerName _default_
        DocumentRoot "/www/default"
</VirtualHost>

<VirtualHost 172.16.100.2:80>
        ServerName www.a.org
        DocumentRoot "/www/a.org"
        CustomLog /var/log/httpd/a.org/access_log combined
        <Directory "/www/a.org">
                Options none
                AllowOverride Authconfig
                AuthType basic
                AuthName "Restrict area."
                AuthUserFile "/etc/httpd/.htpasswd"
                Require valid-user
        </Directory>
</VirtualHost>

<VirtualHost 172.16.100.2:80>
        ServerName www.d.gov
        DocumentRoot "/www/d.gov"
        CustomLog /var/log/httpd/d.gov/access_log combined
        <Directory "/www/d.gov">
                Options none
                AllowOverride none
                Order deny,allow
                Deny from 172.16.100.254
        </Directory>
</VirtualHost>

<VirtualHost 172.16.100.1:8080>
        ServerName www.b.net
        DocumentRoot "/www/b.net"
</VirtualHost>
提示:解析错误; [root@server41 ~]# cd /www/(切换到/www目录) [root@server41 www]# rm -rf d.gov/*(删除d.gov目录下所有文件,-r目录,-f强制删除) [root@server41 www]# mv b.net/* d.gov/(移动b.net下所有文件到d.gov目录)

测试:通过windows的ie浏览器访问www.d.gov,成功访问,但是字体是乱码,因为这里是GBK的编码,UTF-8默认是不支持的;

[root@server41 www]# vim /etc/httpd/conf/httpd.conf(编辑httpd主配置文件)

#AddDefaultCharset UTF-8

/DefaultCharset

提示:注释掉默认的UTF-8编码;
[root@server41 www]# service httpd restart(重启httpd服务)
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

测试:通过windows的ie浏览器访问www.d.gov,点击我同意;

需要将以下目录文件及权限改为可写;

[root@server41 www]# cd d.gov/(切换到d.gov目录)
[root@server41 d.gov]# ls(查看当前目录文件及子目录)
admin.php  archiver     cp.php           favicon.ico  home.php   member.php  portal.php  source    uc_client
api        config       crossdomain.xml  forum.php    index.php  misc.php    robots.txt  static    uc_server
api.php    connect.php  data             group.php    install    plugin.php  search.php  template  userapp.php
[root@server41 d.gov]# chmod 777 config/ data/ data/cache data/avatar/ data/plugindata/ data/download/ data/addonmd5/  data/template/ 
data/threadcache/(给目录权限为777)
[root@server41 d.gov]# chmod 777 data/attachment/ data/attachment/forum/ data/attachment/group/ data/log/ data/attachment/album/ 
uc_client/data/cache/ uc_server/data/ uc_server/data/cache/ uc_server/data/avatar/ uc_server/data/backup/(给目录权限为777)
[root@server41 d.gov]# chmod 777 uc_server/data/{logs,tmp,view}(给目录权限为777)

测试:刷新http://www.d.gov/页面,点击下一步;

选择全新安装 Discuz! X(含 UCenter Server),点击下一步;

填写数据库服务器地址、数据库用户名、数据库密码、管理员帐号密码,点击下一步;

开始安装,安装完成后,会跳转到Discuz! 安装向导,点击暂不开通,输入用户名admin,密码admin登录;

点击管理中心,再输入密码,点击提交,到网站管理后台,提示还没有将安装文件删除;

[root@server41 d.gov]# cd install/(切换到install目录)
[root@server41 install]# ls(查看当前目录文件及子目录)
data  images  include  index.php
[root@server41 install]# mv index.php index.php.bak(重命名index.php为index.php.bak)