Let's Go!

发布新日志

  • 设置mysql最大连接数的方法

    2011-11-30 10:48:46

    MYSQL数据库安装完成后,默认最大连接数是100,一般流量稍微大一点的论坛或网站这个连接数是远远不够的,增加默认MYSQL连接数的方法有两个

    方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100   修改为 max_connections=1000 服务里重起MYSQL即可

    方法二:MySQL的最大连接数默认是100客户端登录:mysql -uusername -ppassword

    设置新的最大连接数为200:mysql> set GLOBAL max_connections=200

    显示当前运行的Query:mysql> show processlist

    显示当前状态:mysql> show status

    退出客户端:mysql> exit

    查看当前最大连接数:mysqladmin -uusername -ppassword variables

     

    方法三:以centos 4.4 下面的mysql 5.0.33 手工编译版本为例说明:

      vi /usr/local/mysql/bin/mysqld_safe

      找到safe_mysqld编辑它,找到mysqld启动的那两行,在后面加上参数 :

      -O max_connections=1500

      具体一点就是下面的位置:

      用红字特别说明:

      then $NOHUP_NICENESS $ledir/$MYSQLD

      $defaults --basedir=$MY_BASEDIR_VERSION

      --datadir=$DATADIR $USER_OPTION

      --pid-file=$pid_file

      --skip-external-locking

      -O max_connections=1500

      >> $err_log 2>&1 else

      eval "$NOHUP_NICENESS $ledir/$MYSQLD

      $defaults --basedir=$MY_BASEDIR_VERSION

      --datadir=$DATADIR $USER_OPTION

      --pid-file=$pid_file

      --skip-external-locking $args

      -O max_connections=1500 >>

      $err_log 2>&1"

      保存。

      # service mysqld restart

      # /usr/local/mysql/bin/mysqladmin -uroot -p variables

      输入root数据库账号的密码后可看到

      max_connections 1500 即新改动已经生效。

      还有一种方法,

      修改原代码:

      解开MySQL的原代码,进入里面的sql目录修改mysqld.cc找到下面一行:

      {"max_connections", OPT_MAX_CONNECTIONS,

      "The number of simultaneous clients allowed.", (gptr*) &max_connections,

      (gptr*) &max_connections, 0, GET_ULONG, REQUIRED_ARG, 100, 1, 16384, 0, 1,

      0},

      把它改为:

      {"max_connections", OPT_MAX_CONNECTIONS,

      "The number of simultaneous clients allowed.", (gptr*) &max_connections,

      (gptr*) &max_connections, 0, GET_ULONG, REQUIRED_ARG, 1500, 1, 16384, 0, 1,

      0},

      存盘退出,然后./configure ;make;make install可以获得同样的效果。



    http://www.cnblogs.com/stable/archive/2010/12/02/1894295.html

  • MySQL数据库服务器优化

    2011-08-30 11:57:34

    MySQL数据库服务器优化

    转自:http://www.iteye.com/topic/154700

    我最近在网上查了一些有关优化MySql的资料,并对照MySql手册对一些调优设置进行了细结,但是由于时间比较勿忙,没来得及对这些设置进行实验/测试,你可以把这些方法应用到实际中,得出具体结论。调优方法大致如下:

    MySql服务器的后台管理程序,要想使用客户端程序,该程序必须运行,因为客户端通过连接服务器来访问数据库。下面让我们以服务器的系统变量和状态变量为根据,优化我们的MySql数据库服务。


    在这之前,我们需要掌握以下方法:


    查看MySql状态及变量的方法:


    Mysql> show status ——显示状态信息(扩展show status like 'XXX')
    Mysql> show variables ——显示系统变量(扩展show variables like 'XXX')
    Mysql> show innodb status ——显示InnoDB存储引擎的状态
    Shell> mysqladmin variables -u username -p password——显示系统变量
    Shell> mysqladmin extended-status -u username -p password——显示状态信息


    查看状态变量及帮助:


    Shell> mysqld --verbose --help [|more #逐行显示]


    首先,让我们看看有关请求连接的变量:


    为了能适应更多数据库应用用户,MySql提供了连接(客户端)变量,以对不同性质的用户群体提供不同的解决方案,笔者就max_connections,back_log 做了一些细结,如下:


    max_connections 是指MySql的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySql会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。可以过'conn%'通配符查看当前状态的连接数量,以定夺该值的大小。


    back_log 是要求MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。如果期望在一个短时间内有很多连接,你需要增加它。也就是说,如果MySql的连接数据达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。另外,这值(back_log)限于您的操作系统对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制(可以检查你的OS文档找出这个变量的最大值),试图设定back_log高于你的操作系统的限制将是无效的。


    优化了MySql的连接后属性后,我们需要看看缓冲区变量:


    使用MySql数据库存储大量数据(或使用复杂查询)时,我们应该考虑MySql的内存配置。如果配置MySQL服务器使用太少的内存会导致性能不是最优的;如果配置了太多的内存则会导致崩溃,无法执行查询或者导致交换操作严重变慢。在现在的32位平台下,仍有可能把所有的地址空间都用完,因此需要审视。


    计算内存使用的秘诀公式就能相对地解决这一部分问题。不过,如今这个公式已经很复杂了,更重要的是,通过它计算得到的值只是“理论可能”并不是真正消耗的值。事实上,有8GB内存的常规服务器经常能运行到最大的理论值(100GB甚至更高)。此外,你轻易不会使用到“超额因素”(它实际上依赖于应用以及配置)。一些应用可能需要理论内存的10%而有些仅需1%。
    那么,我们可以做什么呢?


    来看看那些在启动时就需要分配并且总是存在的全局缓冲吧!


    全局缓冲:
    key_buffer_size, innodb_buffer_pool_size, innodb_additional_mem_pool_size,innodb_log_buffer_size, query_cache_size


    注:如果你大量地使用MyISAM表,那么你也可以增加操作系统的缓存空间使得MySQL也能用得着。把这些也都加到操作系统和应用程序所需的内存值之中,可能需要增加32MB甚至更多的内存给MySQL服务器代码以及各种不同的小静态缓冲。这些就是你需要考虑的在MySQL服务器启动时所需的内存。其他剩下的内存用于连接。


    key_buffer_size 决定索引处理的速度,尤其是索引读的速度。一般我们设为16M,通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用'key_read%'获得用来显示状态数据)。key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值。可以使用检查状态值'created_tmp_disk_tables'得知详情。


    innodb_buffer_pool_size 对于InnoDB表来说,作用就相当于key_buffer_size对于MyISAM表的作用一样。InnoDB使用该参数指定大小的内存来缓冲数据和索引。对于单独的MySQL数据库服务器,最大可以把该值设置成物理内存的80%。


    innodb_additional_mem_pool_size 指定InnoDB用来存储数据字典和其他内部数据结构的内存池大小。缺省值是1M。通常不用太大,只要够用就行,应该与表结构的复杂度有关系。如果不够用,MySQL会在错误日志中写入一条警告信息。


    innodb_log_buffer_size 指定InnoDB用来存储日志数据的缓存大小,如果您的表操作中包含大量并发事务(或大规模事务),并且在事务提交前要求记录日志文件,请尽量调高此项值,以提高日志效率。


    query_cache_size 是MySql的查询缓冲大小。(从4.0.1开始,MySQL提供了查询缓冲机制)使用查询缓冲,MySQL将SELECT语句和查询结果存放在缓冲区中,今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。通过检查状态值’Qcache_%’,可以知道query_cache_size设置是否合理:如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况,如果Qcache_hits的值也非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小;如果Qcache_hits的值不大,则表明你的查询重复率很低,这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲。此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲。


    除了全局缓冲,MySql还会为每个连接发放连接缓冲。


    连接缓冲:
    每个连接到MySQL服务器的线程都需要有自己的缓冲。大概需要立刻分配256K,甚至在线程空闲时,它们使用默认的线程堆栈,网络缓存等。事务开始之后,则需要增加更多的空间。运行较小的查询可能仅给指定的线程增加少量的内存消耗,然而如果对数据表做复杂的操作例如扫描、排序或者需要临时表,则需分配大约read_buffer_size,sort_buffer_size,read_rnd_buffer_size,tmp_table_size 大小的内存空间。不过它们只是在需要的时候才分配,并且在那些操作做完之后就释放了。有的是立刻分配成单独的组块。tmp_table_size 可能高达MySQL所能分配给这个操作的最大内存空间了。注意,这里需要考虑的不只有一点 —— 可能会分配多个同一种类型的缓存,例如用来处理子查询。一些特殊的查询的内存使用量可能更大——如果在MyISAM表上做成批的插入时需要分配 bulk_insert_buffer_size 大小的内存;执行 ALTER TABLE, OPTIMIZE TABLE, REPAIR TABLE 命令时需要分配 myisam_sort_buffer_size 大小的内存。


    read_buffer_size 是MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。


    sort_buffer_size 是MySql执行排序使用的缓冲大小。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引而不是额外的排序阶段。如果不能,可以尝试增加sort_buffer_size变量的大小。


    read_rnd_buffer_size 是MySql的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySql会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySql会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。


    tmp_table_size是MySql的heap (堆积)表缓冲大小。所有联合在一个DML指令内完成,并且大多数联合甚至可以不用临时表即可以完成。大多数临时表是基于内存的(HEAP)表。具有大的记录长度的临时表 (所有列的长度的和)或包含BLOB列的表存储在硬盘上。如果某个内部heap(堆积)表大小超过tmp_table_size,MySQL可以根据需要自动将内存中的heap表改为基于硬盘的MyISAM表。还可以通过设置tmp_table_size选项来增加临时表的大小。也就是说,如果调高该值,MySql同时将增加heap表的大小,可达到提高联接查询速度的效果。


    当我们设置好了缓冲区大小之后,再来看看:


    table_cache 所有线程打开的表的数目,增大该值可以增加mysqld需要的文件描述符的数量。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值’Open_tables’和’Opened_tables’,可以决定是否需要增加table_cache的值。如果你发现open_tables等于table_cache,并且opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用’Open%tables’获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。


    做了以上方面的调优设置之后,MySql应该基本能满足您需求(当然是建立在调优设置适当的情况下),我们还应该了解并注意:


    只有简单查询OLTP(联机事务处理)应用的内存消耗经常是使用默认缓冲的每个线程小于1MB,除非需要使用复杂的查询否则无需增加每个线程的缓冲大小。使用1MB的缓冲来对10行记录进行排序和用16MB的缓冲基本是一样快的(实际上16MB可能会更慢,不过这是其他方面的事了)。


    找出MySQL服务器内存消耗的峰值。这很容易就能计算出操作系统所需的内存、文件缓存以及其他应用。在32位环境下,还需要考虑到32位的限制,限制 “mysqld” 的值大约为2.5G(实际上还要考虑到很多其他因素)。现在运行 “ps aux” 命令来查看 “VSZ” 的值(MySQL 进程分配的虚拟内存)。监视着内存变化的值,就能知道是需要增加或减少当前的内存值了。

     

    最后来看看调优设置方法:

     

    安装好MySql后,配制文件应该在 ./share/mysql ("./"即MySql安装目录) 目录中,配制文件有几个,有my-huge.cnf my-medium.cnf my-large.cnf my-small.cnf。win环境下即存在于MySql安装目录中的.ini文件。不同的流量的网站和不同配制的服务器环境,当然需要有不同的配制文件了。

    一般的情况下,my-medium.cnf这个配制文件就能满足我们的大多需要;一般我们会把配置文件拷贝到 /etc/my.cnf ,win环境下则拷备到 my.ini 下即可,只需要修改这个配置文件就可以了。

  • mysql中文乱码

    2011-04-08 11:43:10

    mysql_query("set names gbk;"); 
  • mysql取出以上用户名(去除重复),score值最高的所有记录,查出重复记录

    2011-01-06 16:15:42

    tt 表:
    有如下数据:

    insert into tt values('yy1',35) ;
    insert into tt values('yy1',36) ;
    insert into tt values('yy1',357) ;
    insert into tt values('yy1',351) ;


    insert into tt values('yy2',35) ;
    insert into tt values('yy2',36) ;
    insert into tt values('yy2',357) ;
    insert into tt values('yy2',351) ;

    insert into tt values('yy3',35) ;
    insert into tt values('yy3',36) ;
    insert into tt values('yy3',357) ;
    insert into tt values('yy3',351) ;

    insert into tt values('yy4',351) ;

     

    1.取出以上用户名(去除重复),score值最高的所有记录 :

     
     select name ,max(score) as max_score  from tt group by name ;

    其他聚合函数:
    select name ,sum(score) as max_score  from tt group by name ;
     
     select name ,min(score) as max_score  from tt group by name ;

     
     
     查出重复的记录:
     
     select name,score from tt group by name having count(name) > 2 ;
     
     
    select name,max(score) max_score from tt group by name having count(name) > 2 ;
     

     

  • mysql下如何执行sql脚本

    2011-01-06 15:47:35

    mysql下如何执行sql脚本

    首要步骤(一般可省略):
    开启mysql服务(默认是开机时就自动运行了):
    控制面板-->管理工具-->服务,在里面找到名称为mysql的项,双击就可看它的服务状态是启动还是停止,把它设为启动

    连接mysql:
    在命令行下输入 mysql -h localhost -u root -p回车,然后输入密码即可;或直接运行mysql自带的连接工具,然后输入密码即可.

    1.编写sql脚本,假设内容如下:

    create database dearabao;
    use dearabao;
    create table niuzi (name varchar(20));

    保存脚本文件,假设我把它保存在F盘的hello world目录下,于是该文件的路径为:F:\hello world\niuzi.sql


    2.执行sql脚本,可以有2种方法:
    第一种方法:
    在命令行下(未连接数据库),输入 mysql -h localhost -u root -p123456 < F:\hello world\niuzi.sql (注意路径不用加引号的!!) 回车即可.
    第二种方法:
    在命令行下(已连接数据库,此时的提示符为 mysql> ),输入 source F:\hello world\niuzi.sql (注意路径不用加引号的) 或者 \. F:\hello world\niuzi.sql (注意路径不用加引号的) 回车即可


    在程序初始化时一般会把要执行的SQL语句放到一个SQL文件,在程序安装时自动执行,其实就是批处理执行SQL命令。同样,可以手动执行sql文件,具体步骤如下:
           1、使用root帐户登录到MySQL服务器;
           2、执行source命令:
            mysql> source c:/test.sql
            注意:文件路径中建议使用“/”,如果使用“\”,要首先进行转义即“\\”,否则可能会出现错误。

           另外还有一个load命令可以批量插入数据,但是这个对文件中数据格式的要求比较严格,否则容易出现错误,很少使用。


    mysql 查看所有用户的语句

    输入指令select user();
     

  • Delete、Drop、Truncate的比较

    2011-01-03 11:33:30

    http://java-007.javaeye.com/blog/450636

     

    2009-08-16
    Delete、Drop、Truncate的比较
    关键字: delete、drop、truncate
    相同点:truncate和不带where子句的delete, 以及drop都会删除表内的数据

    不同点:
    1. truncate和 delete只删除数据不删除表的结构(定义)
    drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.

    2.delete语句是DML,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.
    truncate,drop是DDL, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.

    3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
    显然drop语句将表所占用的空间全部释放
    truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始).

    4.速度,一般来说: drop> truncate > delete

    5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及
    使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.
    想删除表,当然用drop
    想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.
    如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据

    附加DDL,DML,DCL区别:
    DDL is Data Definition Language statements. Some examples:

    * CREATE - to create objects in the database
    * ALTER - alters the structure of the database
    * DROP - delete objects from the database
    * TRUNCATE - remove all records from a table, including all spaces allocated for the records are removed
    * COMMENT - add comments to the data dictionary
    * GRANT - gives user's access privileges to database
    * REVOKE - withdraw access privileges given with the GRANT command

    DML is Data Manipulation Language statements. Some examples:

    * SELECT - retrieve data from the a database
    * INSERT - insert data into a table
    * UPDATE - updates existing data within a table
    * DELETE - deletes all records from a table, the space for the records remain
    * CALL - call a PL/SQL or Java subprogram
    * EXPLAIN PLAN - explain access path to data
    * LOCK TABLE - control concurrency

    DCL is Data Control Language statements. Some examples:

    * COMMIT - save work done
    * SAVEPOINT - identify a point in a transaction to which you can later roll back
    * ROLLBACK - restore database to original since the last COMMIT
    * SET TRANSACTION - Change transaction options like what rollback segment to use

     

     

     

     


    DML、DDL、DCL区别
    总体解释:
    DML(data manipulation language):
           它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言
    DDL(data definition language):
           DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用
    DCL(Data Control Language):
           是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL

    详细解释:
    一、DDL is Data Definition Language statements. Some examples:数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言
          1.CREATE - to create objects in the database   创建
          2.ALTER - alters the structure of the database   修改
          3.DROP - delete objects from the database   删除
          4.TRUNCATE - remove all records from a table, including all spaces allocated for the records are removed
          TRUNCATE TABLE [Table Name]。
      下面是对Truncate语句在MSSQLServer2000中用法和原理的说明:
      Truncate table 表名 速度快,而且效率高,因为:
      TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。
      DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
      TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。
      对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。
      TRUNCATE TABLE 不能用于参与了索引视图的表。
           5.COMMENT - add comments to the data dictionary 注释
           6.GRANT - gives user's access privileges to database 授权
           7.REVOKE - withdraw access privileges given with the GRANT command   收回已经授予的权限

    二、DML is Data Manipulation Language statements. Some examples:数据操作语言,SQL中处理数据等操作统称为数据操纵语言
           1.SELECT - retrieve data from the a database           查询
           2.INSERT - insert data into a table                    添加
            3.UPDATE - updates existing data within a table    更新
           4.DELETE - deletes all records from a table, the space for the records remain   删除
           5.CALL - call a PL/SQL or Java subprogram
           6.EXPLAIN PLAN - explain access path to data
           Oracle RDBMS执行每一条SQL语句,都必须经过Oracle优化器的评估。所以,了解优化器是如何选择(搜索)路径以及索引是如何被使用的,对优化SQL语句有很大的帮助。Explain可以用来迅速方便地查出对于给定SQL语句中的查询数据是如何得到的即搜索路径(我们通常称为Access Path)。从而使我们选择最优的查询方式达到最大的优化效果。
           7.LOCK TABLE - control concurrency 锁,用于控制并发

    三、DCL is Data Control Language statements. Some examples:数据控制语言,用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等
           1.COMMIT - save work done 提交
            2.SAVEPOINT - identify a point in a transaction to which you can later roll back 保存点
           3.ROLLBACK - restore database to original since the last COMMIT   回滚
           4.SET TRANSACTION - Change transaction options like what rollback segment to use   设置当前事务的特性,它对后面的事务没有影响.

     

     

     

    turncate,delete,drop异同点分析 收藏
     从功能上区别,turncate,delete都是只删除表中的数据,而表结构,索引,约束等都保持不变;而 drop语句将删除表的结构以及被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态。

    再分析turncate与delete异同:

    相同点: turncate talbe 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。

    不同点:

    1 事务管理:delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.delele可以回滚。  truncate是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.

               

    2 速度:turncate table比delete速度快,且使用的系统和事务日志资源少。

                原因是delete语句每次删除一行,并在事务日志中为删除的每一行记录一项;而turncate table通过释放存储表数据的数据页来删除数据,并且只在事务日志中记录页的释放。  

    3 对于由FOREIGN   KEY 约束引用的表,不能使用   TRUNCATE   TABLE,而应使用不带   WHERE   子句的   DELETE   语句。由于   TRUNCATE   TABLE   不记录在日志中,所以它不能激活触发器。

    应用中,如果不再需要该表时,用drop

    如果想要保留表结构,但要删除所有记录,用turncate

    如果只删除部分记录,用带where条件的delete

     

     

     

     

    JVM内存分配 收藏
    如果对JVM的内存分配不合理,应用程序运行中常常用抛出java.lang.OutOfMemory和java.lang.OutOfMemoryError: PermGen space异常。

    所以我们要对JVM调优以避免出现此类问题。

    JVM的内存分配主要通过这几个参数设定:-Xms -Xmx -XX:PermSize -XX:MaxPermSize

    我们先对几个概念进行解释:

          ◆堆(Heap)和非堆(Non-heap)内存

      按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。

        堆内存主要存放类实例(Instance)等,而非堆区为java永久生成对象(Permanate generation)如,class对象、方法对象这些可反射(reflective)对象分配内存,Class被loader的时候就会被放到非堆区。

      ◆堆内存分配

      JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置 -Xms、-Xmx相等以避免在每次GC 后调整堆的大小。

          说明:如果-Xmx不指定或者指定偏小,应用可能会导致java.lang.OutOfMemory错误,此错误来自JVM不是Throwable的,无法用try...catch捕捉。

      ◆非堆内存分配

      JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。

         如果应用程序使用了大量第三方的jar包,非堆内存分配过小就会导致:java.lang.OutOfMemoryError: PermGen space。GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。

      ◆JVM内存限制(最大值)

      首先JVM内存限制于实际的最大物理内存(废话!呵呵),假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。

          通过上面对JVM内存管理的介绍我们已经了解到JVM内存包含两种:堆内存和非堆内存,另外JVM最大内存首先取决于实际的物理内存和操作系统。

          我们在实际配置中还要注意以下几点:

          1) 参数中-Xms的值大于-Xmx,或者-XX:PermSize的值大于-XX:MaxPermSize;

      2) -Xmx的值和-XX:MaxPermSize的总和超过了JVM内存的最大限制,比如当前操作系统最大内存限制,或者实际的物理内存等等。说到实际物理内存这里需要说明一点的是,如果你的内存是1024MB,但实际系统中用到的并不可能是1024MB,因为有一部分被硬件占用了。

    示例:-Xmx1024m -Xms1024m -XX:PermSize:256m -XX:MaxPermSize:512m

  • csv是什么格式的文件,csv文件格式简介

    2010-12-23 12:46:06

     

    你可能问,为什么要了解这个文件格式,

    是这样的,在linux下用shell统计数据,写成csv文件格式

    下载到本机,就可以用excel进行处理了,包括生成图表。

    文件格式简单,通用,但是非常实用。

     

    CSVComma Separate Values,这种文件格式经常用来作为不同程序之间的数据交互的格式。

     

     

    具体文件格式

     

     

    每条记录占一行

    以逗号为分隔符

    逗号前后的空格会被忽略

    字段中包含有逗号,该字段必须用双引号括起来

    字段中包含有换行符,该字段必须用双引号括起来

    字段前后包含有空格,该字段必须用双引号括起来

    字段中的双引号用两个双引号表示

    字段中如果有双引号,该字段必须用双引号括起来

    第一条记录,可以是字段名

     

     

    CSV其实就是COMMA SEPARATED VALUE的缩写,出现在档案总管中的档案类型是「逗号分格」,依计算机原来的设定,如果直接点选该档案,计算机将以EXCEL的模式开启该档案。但建议您千万不要这么做,因为CSV档如果以EXCEL开启,由于计算机档案数据转换的原因,会将其CRC之数值改做科学记号方式储存,而造成档案中的 CRC值发生错误。这也是笔者初出茅庐时所得到的惨痛经验,但如果想一窥CSV档的真实面貌,笔者建议您使用WORDPAD或是记事本(NOTE)来开启,再则先另存新档后用EXCEL开启,也是方法之一。开启后的CSV档包含了四或五个字段(部分),由左至右分别记载着:文件名称(XXXX.JPG)、档案大小(以BYTE为单位)、CRC32值(八个英文字母或数字组成)、档案路径(档案储存的子目录名称)和档案内容描述(一般来说都是明星的英文姓名甚或是专辑名称,也可能空白)。而其中第四栏「档案路径」因为每个人储存整理图档的方式不同,所以本栏通常不存在,而一般有含有「档案路径」这栏的CSV档,又称为ECSV档案

     

     

    CSV" 逗号分隔文件 (Comma Separated Values) 的首字母英文缩写,是一种用来存储数据的纯文本格式,通常用于电子表格数据库软件。在 CSV 文件中,数据以逗号分隔,可允许程序通过读取文件为数据重新创建正确的栏结构,并在每次遇到逗号时开始新的一栏。
    创建 CSV 文件有许多方法。最常用的方法是用电子表格程序,如 Microsoft Excel。在 Microsoft Excel 中,选择文件”>“另存为,然后在文件类型下拉选择框中选择 "CSV (逗号分隔) (*.csv)"
    csv
    格式(即文件后缀为.csv,属于用excel软件可编辑的逗号分隔的一种文件格式)。

     

    xls 文件就是Microsoft excel电子表格的文件格式。我想就不用多介绍了吧,学校里多少都学过的。
    CSV
    是最通用的一种文件格式,它可以非常容易地被导入各种PC表格及数据库中。此文件,一行即为数据表的一行。生成数据表字段用半角逗号隔开。

    CSV是文本文件,用记事本就能打开,XLS是二进制的文件只有用EXCEL才能打

    CSV(以逗号分隔)

    CSV (*.csv) 文件格式只能保存活动工作表中的单元格所显示的文本和数值。工作表中所有的数据行和字符都将保存。数据列以逗号分隔,每一行数据都以回车符结束。如果单元格中包含逗号,则该单元格中的内容以双引号引起。

    如果单元格显示的是公式而不是数值,该公式将转换为文本方式。所有格式、图形、对象和工作表的其他内容将全部丢失。欧元符号将转换为问号。

    文本文件的内容有ASCII字符集中的字符组成

    首先:文本文件和二进制文件是有区别的,对于文本文件来说,每个字节(或每几个字节)的意义相同,你只要一个一个字节的读出来就OK了;而对于二进制文件来说,可能有4个字节保存了一个整形,接下去有4个字节保存了一个浮点型等等……所以要想打开二进制文件需要了解它的文件格式。
    要想知道文件格式,你可以用16进制编辑器打开一个二进制文件,然后猜测它的格式。

     

     

     

  • mysql explain 及 profile,优化SQL

    2010-09-21 15:07:02

     

     

     

     


    http://hi.baidu.com/gguoyu/blog/item/f811d7f4cfd9b0e27709d752.html

    mysql explain 及 profile

     

    2010-07-09 14:22在mysql查询性能分析中最常用的就是explain了,profile查看一些具体的性能也是不错的
    1. profile
    我们可以先使用
    SELECT @@profiling;
    来查看是否已经启用profile,如果profilng值为0,可以通过
    SET profiling = 1;
    来启用。启用profiling之后,我们执行一条查询语句,比如:
    select count(*) from roi_summary;
    然后show profiles查看如下:
    +----------+------------+----------------------------------+
    | Query_ID | Duration       | Query                            |
    +----------+------------+----------------------------------+
    |        1       | 0.00021500 | select @@profiling               |
    |        2       | 0.05522700 | select count(*) from roi_summary |
    +----------+------------+----------------------------------+
    2 rows in set (0.00 sec)

    其中ID为5的语句是刚执行的查询语句,这时候我们执行show profile for query 2来查看这条语句的执行过程如下;
    +--------------------------------+----------+
    | Status                         | Duration |
    +--------------------------------+----------+
    | starting                       | 0.000021 |
    | checking query cache for query | 0.000045 |
    | checking permissions           | 0.000007 |
    | Opening tables                 | 0.000011 |
    | System lock                    | 0.000004 |
    | Table lock                     | 0.000040 |
    | init                           | 0.000012 |
    | optimizing                     | 0.000005 |
    | statistics                     | 0.000010 |
    | preparing                      | 0.000010 |
    | executing                      | 0.000005 |
    | Sending data                   | 0.055021 |
    | end                            | 0.000007 |
    | end                            | 0.000004 |
    | query end                      | 0.000003 |
    | storing result in query cache | 0.000004 |
    | freeing items                  | 0.000008 |
    | closing tables                 | 0.000005 |
    | logging slow query             | 0.000002 |
    | cleaning up                    | 0.000003 |
    +--------------------------------+----------+
    20 rows in set (0.00 sec)
    可以看出此条查询语句的执行过程及执行时间,总的时间约为0.05s。
    这时候我们再执行一次
    select count(*) from roi_summary;
    show profiles;
    +----------+------------+----------------------------------+
    | Query_ID | Duration   | Query                            |
    +----------+------------+----------------------------------+
    |        1 | 0.00021500 | select @@profiling               |
    |        2 | 0.05522700 | select count(*) from roi_summary |
    |        3 | 0.00006000 | select count(*) from roi_summary |
    +----------+------------+----------------------------------+


    然后执行show profile for query 3来查看本条语句的执行过程
    +--------------------------------+----------+
    | Status                         | Duration |
    +--------------------------------+----------+
    | starting                       | 0.000016 |
    | checking query cache for query | 0.000007 |
    | checking privileges on cached | 0.000004 |
    | checking permissions           | 0.000005 |
    | sending cached result to clien | 0.000022 |
    | logging slow query             | 0.000003 |
    | cleaning up                    | 0.000003 |
    +--------------------------------+----------+

    可以看出此次第二次查询因为前一次的查询生成了cache,所以这次无需从数据库文件中再次读取数据而是直接从缓存中读取,结果查询时间比第一次快了N倍。

    2. explain
    至于EXPLAIN 官方文档讲解的相当详细了,
    地址:http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#explain

     

     

     

     

     

     

     

     

    =============================================================================

     


    首先,影响所有语句的一个因素是:你的许可设置得越复杂,所需要的开销越多。

    执行GRANT语句时使用简单的许可,当客户执行语句时,可以使MySQL降低许可检查开销。例如,如果未授予任何表级或列级权限,服务器不需要检查tables_priv和columns_priv表的内容。同样地,如果不对任何 账户进行限制,服务器不需要对资源进行统计。如果查询量很高,可以花一些时间使用简化的授权结构来降低许可检查开销。

    如果你的问题是与具体MySQL表达式或函数有关,可以使用mysql客户程序所带的BENCHMARK()函数执行定时测试。其语法为BENCHMARK(loop_count,expression)。例如:

    mysql> SELECT BENCHMARK(1000000,1+1);+------------------------+| BENCHMARK(1000000,1+1) |+------------------------+|                      0 |+------------------------+1 row in set (0.32 sec)上面结果在PentiumII 400MHz系统上获得。它显示MySQL在该系统上在0.32秒内可以执行1,000,000个简单的+表达式运算。

    所有MySQL函数应该被高度优化,但是总有可能有一些例外。BENCHMARK()是一个找出是否查询有问题的优秀的工具。

    7.2.1. EXPLAIN语法(获取SELECT相关信息)
    EXPLAIN tbl_name或:

    EXPLAIN [EXTENDED] SELECT select_optionsEXPLAIN语句可以用作DESCRIBE的一个同义词,或获得关于MySQL如何执行SELECT语句的信息:

    ·         EXPLAIN tbl_name是DESCRIBE tbl_name或SHOW COLUMNS FROM tbl_name的一个同义词。

    ·         如果在SELECT语句前放上关键词EXPLAIN,MySQL将解释它如何处理SELECT,提供有关表如何联接和联接的次序。

    该节解释EXPLAIN的第2个用法。

    借助于EXPLAIN,可以知道什么时候必须为表加入索引以得到一个使用索引来寻找记录的更快的SELECT。

    如果由于使用不正确的索引出现了问题,应运行ANALYZE TABLE更新表的统计(例如关键字集的势),这样会影响优化器进行的选择。参见13.5.2.1节,“ANALYZE TABLE语法”。

    还可以知道优化器是否以一个最佳次序联接表。为了强制优化器让一个SELECT语句按照表命名顺序的联接次序,语句应以STRAIGHT_JOIN而不只是SELECT开头。

    EXPLAIN为用于SELECT语句中的每个表返回一行信息。表以它们在处理查询过程中将被MySQL读入的顺序被列出。MySQL用一遍扫描多次联接(single-sweep multi-join)的方式解决所有联接。这意味着MySQL从第一个表中读一行,然后找到在第二个表中的一个匹配行,然后在第3个表中等等。当所有的表处理完后,它输出选中的列并且返回表清单直到找到一个有更多的匹配行的表。从该表读入下一行并继续处理下一个表。

    当使用EXTENDED关键字时,EXPLAIN产生附加信息,可以用SHOW WARNINGS浏览。该信息显示优化器限定SELECT语句中的表和列名,重写并且执行优化规则后SELECT语句是什么样子,并且还可能包括优化过程的其它注解。

    EXPLAIN的每个输出行提供一个表的相关信息,并且每个行包括下面的列:

    ·         id

    SELECT识别符。这是SELECT的查询序列号。

    ·         select_type

    SELECT类型,可以为以下任何一种:

    o        SIMPLE

    简单SELECT(不使用UNION或子查询)

    o        PRIMARY

    最外面的SELECT

    o        UNION

    UNION中的第二个或后面的SELECT语句

    o        DEPENDENT UNION

    UNION中的第二个或后面的SELECT语句,取决于外面的查询

    o        UNION RESULT

    UNION的结果。

    o        SUBQUERY

    子查询中的第一个SELECT

    o        DEPENDENT SUBQUERY

    子查询中的第一个SELECT,取决于外面的查询

    o        DERIVED

    导出表的SELECT(FROM子句的子查询)

    ·         table

    输出的行所引用的表。

    ·         type

    联接类型。下面给出各种联接类型,按照从最佳类型到最坏类型进行排序:

    o        system

    表仅有一行(=系统表)。这是const联接类型的一个特例。

    o        const

    表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数。const表很快,因为它们只读取一次!

    const用于用常数值比较PRIMARY KEY或UNIQUE索引的所有部分时。在下面的查询中,tbl_name可以用于const表:

    SELECT * from tbl_name WHERE primary_key=1; SELECT * from tbl_nameWHERE primary_key_part1=1和 primary_key_part2=2;o        eq_ref

    对于每个来自于前面的表的行组合,从该表中读取一行。这可能是最好的联接类型,除了const类型。它用在一个索引的所有部分被联接使用并且索引是UNIQUE或PRIMARY KEY。

    eq_ref可以用于使用= 操作符比较的带索引的列。比较值可以为常量或一个使用在该表前面所读取的表的列的表达式。

    在下面的例子中,MySQL可以使用eq_ref联接来处理ref_tables:

    SELECT * FROM ref_table,other_table  WHERE ref_table.key_column=other_table.column; SELECT * FROM ref_table,other_table  WHERE ref_table.key_column_part1=other_table.column    AND ref_table.key_column_part2=1;o        ref

    对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。如果联接只使用键的最左边的前缀,或如果键不是UNIQUE或PRIMARY KEY(换句话说,如果联接不能基于关键字选择单个行的话),则使用ref。如果使用的键仅仅匹配少量行,该联接类型是不错的。

    ref可以用于使用=或<=>操作符的带索引的列。

    在下面的例子中,MySQL可以使用ref联接来处理ref_tables:

    SELECT * FROM ref_table WHERE key_column=expr; SELECT * FROM ref_table,other_table  WHERE ref_table.key_column=other_table.column; SELECT * FROM ref_table,other_table  WHERE ref_table.key_column_part1=other_table.column    AND ref_table.key_column_part2=1;o        ref_or_null

    该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。在解决子查询中经常使用该联接类型的优化。

    在下面的例子中,MySQL可以使用ref_or_null联接来处理ref_tables:

    SELECT * FROM ref_tableWHERE key_column=expr OR key_column IS NULL;参见7.2.7节,“MySQL如何优化IS NULL”。

    o        index_merge

    该联接类型表示使用了索引合并优化方法。在这种情况下,key列包含了使用的索引的清单,key_len包含了使用的索引的最长的关键元素。详细信息参见7.2.6节,“索引合并优化”。

    o        unique_subquery

    该类型替换了下面形式的IN子查询的ref:

    value IN (SELECT primary_key FROM single_table WHERE some_expr)unique_subquery是一个索引查找函数,可以完全替换子查询,效率更高。

    o        index_subquery

    该联接类型类似于unique_subquery。可以替换IN子查询,但只适合下列形式的子查询中的非唯一索引:

    value IN (SELECT key_column FROM single_table WHERE some_expr)o        range

    只检索给定范围的行,使用一个索引来选择行。key列显示使用了哪个索引。key_len包含所使用索引的最长关键元素。在该类型中ref列为NULL。

    当使用=、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN或者IN操作符,用常量比较关键字列时,可以使用range:

    SELECT * FROM tbl_nameWHERE key_column = 10; SELECT * FROM tbl_nameWHERE key_column BETWEEN 10 and 20; SELECT * FROM tbl_nameWHERE key_column IN (10,20,30); SELECT * FROM tbl_nameWHERE key_part1= 10 AND key_part2 IN (10,20,30);o        index

    该联接类型与ALL相同,除了只有索引树被扫描。这通常比ALL快,因为索引文件通常比数据文件小。

    当查询只使用作为单索引一部分的列时,MySQL可以使用该联接类型。

    o        ALL

    对于每个来自于先前的表的行组合,进行完整的表扫描。如果表是第一个没标记const的表,这通常不好,并且通常在它情况下很差。通常可以增加更多的索引而不要使用ALL,使得行能基于前面的表中的常数值或列值被检索出。

    ·         possible_keys

    possible_keys列指出MySQL能使用哪个索引在该表中找到行。注意,该列完全独立于EXPLAIN输出所示的表的次序。这意味着在possible_keys中的某些键实际上不能按生成的表次序使用。

    如果该列是NULL,则没有相关的索引。在这种情况下,可以通过检查WHERE子句看是否它引用某些列或适合索引的列来提高你的查询性能。如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询。参见13.1.2节,“ALTER TABLE语法”。

    为了看清一张表有什么索引,使用SHOW INDEX FROM tbl_name。

    ·         key

    key列显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。参见13.2.7节,“SELECT语法”。

    对于MyISAM和BDB表,运行ANALYZE TABLE可以帮助优化器选择更好的索引。对于MyISAM表,可以使用myisamchk --analyze。参见13.5.2.1节,“ANALYZE TABLE语法”和5.9.4节,“表维护和崩溃恢复”。

    ·         key_len

    key_len列显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。注意通过key_len值我们可以确定MySQL将实际使用一个多部关键字的几个部分。

    ·         ref

    ref列显示使用哪个列或常数与key一起从表中选择行。

    ·         rows

    rows列显示MySQL认为它执行查询时必须检查的行数。

    ·         Extra

    该列包含MySQL解决查询的详细信息。下面解释了该列可以显示的不同的文本字符串:

    o        Distinct

    MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。

    o        Not exists

    MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。

    下面是一个可以这样优化的查询类型的例子:

    SELECT * 从t1 LEFT JOIN t2 ON t1.id=t2.id  WHERE t2.id IS NULL;假定t2.id定义为NOT NULL。在这种情况下,MySQL使用t1.id的值扫描t1并查找t2中的行。如果MySQL在t2中发现一个匹配的行,它知道t2.id绝不会为NULL,并且不再扫描t2内有相同的id值的行。换句话说,对于t1的每个行,MySQL只需要在t2中查找一次,无论t2内实际有多少匹配的行。

    o        range checked for each record (index map: #)

    MySQL没有发现好的可以使用的索引,但发现如果来自前面的表的列值已知,可能部分索引可以使用。对前面的表的每个行组合,MySQL检查是否可以使用range或index_merge访问方法来索取行。关于适用性标准的描述参见7.2.5节,“范围优化”和7.2.6节,“索引合并优化”,不同的是前面表的所有列值已知并且认为是常量。

    这并不很快,但比执行没有索引的联接要快得多。

    o        Using filesort

    MySQL需要额外的一次传递,以找出如何按排序顺序检索行。通过根据联接类型浏览所有行并为所有匹配WHERE子句的行保存排序关键字和行的指针来完成排序。然后关键字被排序,并按排序顺序检索行。参见7.2.12节,“MySQL如何优化ORDER BY”。

    o        Using index

    从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。当查询只使用作为单一索引一部分的列时,可以使用该策略。

    o        Using temporary

    为了解决查询,MySQL需要创建一个临时表来容纳结果。典型情况如查询包含可以按不同情况列出列的GROUP BY和ORDER BY子句时。

    o        Using where

    WHERE子句用于限制哪一个行匹配下一个表或发送到客户。除非你专门从表中索取或检查所有行,如果Extra值不为Using where并且表联接类型为ALL或index,查询可能会有一些错误。

    如果想要使查询尽可能快,应找出Using filesort 和Using temporary的Extra值。

    o        Using sort_union(...), Using union(...), Using intersect(...)

    这些函数说明如何为index_merge联接类型合并索引扫描。详细信息参见7.2.6节,“索引合并优化”。

    o        Using index for group-by

    类似于访问表的Using index方式,Using index for group-by表示MySQL发现了一个索引,可以用来查询GROUP BY或DISTINCT查询的所有列,而不要额外搜索硬盘访问实际的表。并且,按最有效的方式使用索引,以便对于每个组,只读取少量索引条目。详情参见7.2.13节,“MySQL如何优化GROUP BY”。

    通过相乘EXPLAIN输出的rows列的所有值,你能得到一个关于一个联接如何的提示。这应该粗略地告诉你MySQL必须检查多少行以执行查询。当你使用max_join_size变量限制查询时,也用这个乘积来确定执行哪个多表SELECT语句。参见7.5.2节,“调节服务器参数”。

    下列例子显示出一个多表JOIN如何能使用EXPLAIN提供的信息逐步被优化。

    假定你有下面所示的SELECT语句,计划使用EXPLAIN来检查它:

    EXPLAIN SELECT tt.TicketNumber, tt.TimeIn,               tt.ProjectReference, tt.EstimatedShipDate,               tt.ActualShipDate, tt.ClientID,               tt.ServiceCodes, tt.RepetitiveID,               tt.CurrentProcess, tt.CurrentDPPerson,               tt.RecordVolume, tt.DPPrinted, et.COUNTRY,               et_1.COUNTRY, do.CUSTNAME        FROM tt, et, et AS et_1, do        WHERE tt.SubmitTime IS NULL          AND tt.ActualPC = et.EMPLOYID          AND tt.AssignedPC = et_1.EMPLOYID          AND tt.ClientID = do.CUSTNMBR;对于这个例子,假定:

    ·         被比较的列声明如下:


     列
     列类型
     
    tt
     ActualPC
     CHAR(10)
     
    tt
     AssignedPC
     CHAR(10)
     
    tt
     ClientID
     CHAR(10)
     
    et
     EMPLOYID
     CHAR(15)
     
    do
     CUSTNMBR
     CHAR(15)
     

    ·         表有下面的索引:


     索引
     
    tt
     ActualPC
     
    tt
     AssignedPC
     
    tt
     ClientID
     
    et
     EMPLOYID(主键)
     
    do
     CUSTNMBR(主键)
     

    ·         tt.ActualPC值不是均匀分布的。

    开始,在进行优化前,EXPLAIN语句产生下列信息:

     

    table type possible_keys key  key_len ref  rows  Extraet    ALL  PRIMARY       NULL NULL    NULL 74do    ALL  PRIMARY       NULL NULL    NULL 2135et_1  ALL  PRIMARY       NULL NULL    NULL 74tt    ALL  AssignedPC,   NULL NULL    NULL 3872           ClientID,           ActualPC      range checked for each record (key map: 35) 因为type对每张表是ALL,这个输出显示MySQL正在对所有表产生一个笛卡尔乘积;即每一个行的组合!这将花相当长的时间,因为必须检查每张表的行数的乘积!对于一个实例,这是74 * 2135 * 74 * 3872 = 45,268,558,720行。如果表更大,你只能想象它将花多长时间……

    这里的一个问题是MySQL能更高效地在声明具有相同类型和尺寸的列上使用索引。在本文中,VARCHAR和CHAR是相同的,除非它们声明为不同的长度。因为tt.ActualPC被声明为CHAR(10)并且et.EMPLOYID被声明为CHAR(15),长度不匹配。

    为了修正在列长度上的不同,使用ALTER TABLE将ActualPC的长度从10个字符变为15个字符:

    mysql> ALTER TABLE tt MODIFY ActualPC VARCHAR(15);现在tt.ActualPC和et.EMPLOYID都是VARCHAR(15),再执行EXPLAIN语句产生这个结果:

     

    table type   possible_keys key     key_len ref         rows    Extratt    ALL    AssignedPC,   NULL    NULL    NULL        3872    Using             ClientID,                                         where             ActualPCdo    ALL    PRIMARY       NULL    NULL    NULL        2135      range checked for each record (key map: 1)et_1  ALL    PRIMARY       NULL    NULL    NULL        74      range checked for each record (key map: 1)et    eq_ref PRIMARY       PRIMARY 15      tt.ActualPC 1 这不是完美的,但是好一些了:rows值的乘积少了一个因子74。这个版本在几秒内执行完。

    第2种方法能消除tt.AssignedPC = et_1.EMPLOYID和tt.ClientID = do.CUSTNMBR比较的列的长度失配问题:

    mysql> ALTER TABLE tt MODIFY AssignedPC VARCHAR(15),    ->                MODIFY ClientID   VARCHAR(15);EXPLAIN产生的输出显示在下面:

    table type   possible_keys key      key_len ref           rows Extraet    ALL    PRIMARY       NULL     NULL    NULL          74tt    ref    AssignedPC,   ActualPC 15      et.EMPLOYID   52   Using             ClientID,                                         where             ActualPCet_1  eq_ref PRIMARY       PRIMARY  15      tt.AssignedPC 1do    eq_ref PRIMARY       PRIMARY  15      tt.ClientID   1 这几乎很好了。

    剩下的问题是,默认情况,MySQL假设在tt.ActualPC列的值是均匀分布的,并且对tt表不是这样。幸好,很容易告诉MySQL来分析关键字分布:

    mysql> ANALYZE TABLE tt;现在联接是“完美”的了,而且EXPLAIN产生这个结果:

    table type   possible_keys key     key_len ref           rows Extratt    ALL    AssignedPC    NULL    NULL    NULL          3872 Using             ClientID,                                        where             ActualPCet    eq_ref PRIMARY       PRIMARY 15      tt.ActualPC   1et_1  eq_ref PRIMARY       PRIMARY 15      tt.AssignedPC 1do    eq_ref PRIMARY       PRIMARY 15      tt.ClientID   1注意在从EXPLAIN输出的rows列是一个来自MySQL联接优化器的“教育猜测”。你应该检查数字是否接近事实。如果不是,可以通过在SELECT语句里面使用STRAIGHT_JOIN并且试着在FROM子句以不同的次序列出表,可能得到更好的性能。

    7.2.2. 估计查询性能
    在大多数情况下,可以通过计算磁盘搜索来估计性能。对小的表,通常能在1次磁盘搜索中找到行(因为索引可能被缓存)。对更大的表,可以使用B-树索引进行估计,将需要log(row_count)/log(index_block_length/3 * 2/(index_length + data_pointer_length))+1次搜索才能找到行。

    在MySQL中,索引块通常是1024个字节,数据指针通常是4个字节,这对于有一个长度为3(中等整数)的索引的500,000行的表,通过公式可以计算出log(500,000)/log(1024/3*2/(3+4))+1= 4次搜索。

    上面的索引需要大约500,000 * 7 * 3/2 = 5.2MB,(假设典型情况下索引缓存区填充率为2/3),可以将大部分索引保存在内存中,仅需要1-2调用从OS读数据来找出行。

    然而对于写,将需要4次搜索请求(如上)来找到在哪儿存放新索引,并且通常需要2次搜索来更新这个索引并且写入行。

    注意,上述讨论并不意味着应用程序的性能将缓慢地以logN 退化!当表格变得更大时,所有内容缓存到OS或SQL服务器后,将仅仅或多或少地更慢。在数据变得太大不能缓存后,将逐渐变得更慢,直到应用程序只能进行磁盘搜索(以logN增加)。为了避免这个问题,随数据增加而增加 键高速缓冲区大小。对于MyISAM表, 由key_buffer_size系统变量控制 键高速缓冲区大小。参见7.5.2节,“调节服务器参数”。

    7.2.3. SELECT查询的速度
    总的来说,要想使一个较慢速SELECT ... WHERE更快,应首先检查是否能增加一个索引。不同表之间的引用通常通过索引来完成。你可以使用EXPLAIN语句来确定SELECT语句使用哪些索引。参见7.4.5节,“MySQL如何使用索引”和7.2.1节,“EXPLAIN语法(获取关于SELECT的信息)”。

    下面是一些加速对MyISAM表的查询的一般建议:

    ·         为了帮助MySQL更好地优化查询,在一个装载数据后的表上运行ANALYZE TABLE或myisamchk --analyze。这样为每一个索引更新指出有相同值的行的平均行数的值(当然,如果只有一个索引,这总是1。)MySQL使用该方法来决定当你联接两个基于非常量表达式的表时选择哪个索引。你可以使用SHOW INDEX FROM tbl_name并检查Cardinality值来检查表分析结果。myisamchk --description --verbose可以显示索引分布信息。

    ·         要想根据一个索引排序一个索引和数据,使用myisamchk --sort-index --sort-records=1(如果你想要在索引1上排序)。如果只有一个索引,想要根据该索引的次序读取所有的记录,这是使查询更快的一个好方法。但是请注意,第一次对一个大表按照这种方法排序时将花很长时间!

     

  • Oracle 10g在Redhat Linux 4上安装笔记

    2010-08-25 16:25:05


    Oracle 10g在Redhat Linux 4上安装笔记


    废言:一直想在linux下学习 oracle,但是一切的开始就是安装,所以,我们踏上征程。。。。。。

    安装前的软件准备:
    1. 10201_database_linux32.zip
    2. RHEL4.8-i386-AS-DVD.iso
    3. VMware Workstation
    4. Xmanager
    5. xshell/SecureCRT/putty

    参考文档:
    1. 视频:牛牛公作品:Oracle 10gR2在Redhat Linux 4上的安装,可惜没有PPT文档
       http://www.boobooke.com/v/bbk4352.zip
       http://www.boobooke.com/v/bbk4353.zip
    2. http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html
    3. Oracle 10g联机文档


    总体步骤:
    第 1 部分: 安装linux操作系统,并安装好必要的依赖包
    1.安装system
    2. install vmware tools:
    3. 修改hosname
    4.修改参数:设置时间同步
    5.修改启动参数,字符界面启动,启动3个用户:
    6.安装依赖的包
    7.安装另外两个需要额外下载的包:
    8.安装sqlplus辅助工具

    第 2 部分:针对 Oracle 配置 Linux
    1.创建 Oracle 组和用户帐户
    2.创建目录
    3.配置 Linux 内核参数
    4.为 oracle 用户设置 Shell 限制
    5.配置oracle的环境变量:
    6. 准备oracle安装文件
    7. 准备Xmanager
    8. 开始安装oracle
    9. 创建数据库
    10. 创建一个 Listener
    11. 创建一个 service
    12. 验证是否安装成功,sqlplus 连接

     

    第 1 部分: 安装linux操作系统,并安装好必要的依赖包

    1.安装system

      网络设置:
       安装的时候设置了固定IP
       但是和公司的网段IP不符。
       故应设置在相同网段(推荐)
       或者设置成自动获取

    1.1 选择语言language:  U.S. English
    1.2 磁盘分区: Manually partition with Disk Druid
    Yes
    创建磁盘分区:

    一般来说建立LINUX 需要三个分区    
    一个挂载点是/BOOT 引导分区格式为EXT2 或者EXT3 大小在150-200MB 为合适太大了只是浪费    
    一个是 格式 SWAP类似WINDOWS 下的虚拟内存建议是 比实际内存大1/4为合适,SWAP 格式的没有挂载点     
    最后一个是挂载点 /      是LINUX 主分区 格式EXT3    这个装东西的话主要就在这个区了   
     顺序是先建立     /BOOT     然后     SWAP     最后 /
     
    具体操作:
    new ---> /boot,ext2,100 MB(Fixed size), 勾选 Force to be a primary partition  ---> OK
    new ---> swap, 1024 MB(Fixed size), 勾选 Force to be a primary partition      ---> OK
    new ---> / ,ext3, 51200 MB(Fixed size), 勾选 Force to be a primary partition  ---> OK
    new ---> /u01,ext3, fill to maximum allowable size, 勾选 Force to be a primary partition      ---> OK

    1.3 Network Devices:
    ---> Edit, 取消 Configure using DHCP
         勾选 Activate on boot
         IP Address: 192.168.1.253
         Netmask:    255.255.255.0
       
        Set the hostname :  manually --- > Redhat
        Gateway : 192.168.1.1
        ---> Next --> Continue

    1.4 firewall:
    No firewall
    SElinux --> Disable   
      
      1.5 Location
    Asia/Shanghai

    1.6 set Root Password: jonathan

    1.7 software --- Customize software packages to be installed

    勾选:Editors
          Development --- Development Tools,legacy software Development
          System --- System Tools---> sysstat

    取消: Servers--- Server Configuration To0ls, Web Server, Windows File Server
           System --- Printing Support
           可以不取消

    安装完毕 ---> Reboot
    1.8 重启后继续配置,创建新用户jonathan/jonathan

     

    2. install vmware tools:
    1)  VM ---> remove devices ---> cd rom ---> redhat
        vm--->install vmware tools
        桌面出现 VMware Tools ---->执行 VMwareTools.rpm
    2)  open new terminal ---> 执行 $vmware-config-tools.pl
    3) 设置时间同步:
       $vmware-toolbox
       勾选上即可
    4) 安装vmware tools后,需要重启网卡
       service network restart


      
    3. 修改hosname
    修改/etc/hosts里面的名字
    # vi /etc/hosts
    127.0.0.1 localhost.localdomain localhost
    yourip yourname //在这修改hostname
    192.168.1.253 redhat

     

    4.修改参数:设置时间同步
    vim /boot/grub/grub.conf
    ------------------
     
    default=0
    timeout=0
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title Red Hat Enterprise Linux Server (2.6.18-8.el5)
     root (hd0,0)
     kernel /vmlinuz-2.6.18-8.el5 ro root=LABEL=/ rhgb quiet clock=pit nosmp noapic nolapic
     initrd /initrd-2.6.18-8.el5.img

     

    5.修改启动参数,字符界面启动,启动3个用户:--- 可以不改
    vi /etc/inittab

    id:3:initdefault:

    # Run gettys in standard runlevels
    1:2345:respawn:/sbin/mingetty tty1
    2:2345:respawn:/sbin/mingetty tty2
    3:2345:respawn:/sbin/mingetty tty3
    #4:2345:respawn:/sbin/mingetty tty4
    #5:2345:respawn:/sbin/mingetty tty5
    #6:2345:respawn:/sbin/mingetty tty6


    6.安装依赖的包

    #查询依赖包:
    rpm -q xorg-x11-deprecated-libs xorg-x11-libs xorg-x11-xfs alsa-lib-devel fontconfig-devel freetype-devel libjpeg-devel libtiff-devel libungif-devel xorg-x11 xorg-x11-deprecated-libs-devel xorg-x11-devel audiofile-devel esound-devel libaio libaio-devel openmotif21 openmotif glib-devel gnome-libs-devel gtk+-devel imlib-devel ORBit-devel compat-libcwait compat-oracle-rhel4 binutils compat-db control-center gcc gcc-c++ glibc glibc-common gnome-libs libstdc++ libstdc++-devel make pdksh sysstat xscreensaver gdk-pixbuf setarch

    rpm -q  xorg-x11-deprecated-libs xorg-x11-libs xorg-x11-xfs alsa-lib-devel \
    fontconfig-devel freetype-devel libjpeg-devel libtiff-devel libungif-devel \
    xorg-x11 xorg-x11-deprecated-libs-devel xorg-x11-devel audiofile-devel \
    esound-devel libaio libaio-devel openmotif21 openmotif glib-devel \
    gnome-libs-devel gtk+-devel imlib-devel ORBit-devel compat-libcwait \
    compat-oracle-rhel4 binutils compat-db control-center gcc gcc-c++ glibc glibc-common \
    gnome-libs libstdc++ libstdc++-devel make pdksh sysstat xscreensaver gdk-pixbuf setarch

    #进入到RHEL的安装光盘的目录下 /media/cdrom/RedHat/RPMS 进行安装

    rpm -ivh alsa-lib-devel-1.0.6-5.RHEL4.i386.rpm fontconfig-devel-2.2.3-13.el4.i386.rpm freetype-devel-2.1.9-8.el4.6.i386.rpm libjpeg-devel-6b-33.i386.rpm libtiff-devel-3.6.1-12.el4_7.2.i386.rpm libungif-devel-4.1.3-1.el4.2.i386.rpm xorg-x11-deprecated-libs-devel-6.8.2-1.EL.63.i386.rpm xorg-x11-devel-6.8.2-1.EL.63.i386.rpm audiofile-devel-0.2.6-1.el4.1.i386.rpm esound-devel-0.2.35-2.i386.rpm libaio-devel-0.3.105-2.i386.rpm glib-devel-1.2.10-15.i386.rpm gnome-libs-devel-1.4.1.2.90-44.1.i386.rpm gtk+-devel-1.2.10-36.i386.rpm imlib-devel-1.9.13-23.i386.rpm ORBit-devel-0.5.17-14.i386.rpm sysstat-5.0.5-25.el4.i386.rpm

    7.安装另外两个需要额外下载的包:
    下载地址:  http://oss.oracle.com/projects/compat-oracle/files/RedHat/
    compat-libcwait-2.1-1.i386.rpm
    compat-oracle-rhel4-1.0-5.i386.rpm

    xftp上传到Linux上:
    chmod +x *
    [root@oracle10g software]# rpm -ivh compat-*
    [root@oracle10g software]# rpm -q compat-libcwait compat-oracle-rhel4


    8.安装sqlplus辅助工具:(解决sqlplus上翻出现乱码的问题)
    http://utopia.knoware.nl/~hlub/uck/rlwrap/

    $chmod -R 777 rlwrap-0.37
    $./configure
    $make
    $make check
    $make install

     

    第 2 部分:针对 Oracle 配置 Linux

     

    1.创建 Oracle 组和用户帐户

    以 root 用户身份执行以下命令:

    $ groupadd oinstall
    $ groupadd dba

    $ mkdir -p /u01/app/oracle/product/10.2.0/db_1

    $ useradd -g oinstall -G dba -d /u01/app/oracle oracle

    ##说明:
    #man useradd
           -g initial_group
                  The group name or number of the user?. initial login group.  The group  name
                  must  exist.   A  group number must refer to an already existing group.  The
                  default group number is 1 or whatever is specified in  /etc/default/useradd.

           -G group,[...]
                  A  list  of  supplementary  groups which the user is also a member of.  Each
                  group is separated from the next by a comma, with no intervening whitespace.
                  The  groups are subject to the same restrictions as the group given with the
                  -g option.  The default is for the user to belong only to the initial group.
                 
    $ id oracle  #查看oracle 用户信息:uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba)
    $ passwd oracle ##设置 oracle 帐户的口令:

    $ chown -R oracle:oinstall /u01
       #oracle:oinstall --- oracle--改变目录的所有者为oracle用户,oinstall---改变目录的所属组为oinstall
    $ chmod -R 775 /u01
    查看:
    [root@oracle10g ~]# ls -l /u01
    drwxr-xr-x  3 oracle oinstall 4096 Aug 25 13:27


    ###########################

    2.创建目录  --- 命令已经在上一步执行。

    ###########################


    3.配置 Linux 内核参数 ([root@oracle10g ~]# find /etc -name sysctl.conf)
    vi /etc/sysctl.conf

    添加如下内容:

    kernel.shmall = 2097152
    kernel.shmmax = 2147483648
    kernel.shmmni = 4096
    kernel.sem = 250 32000 100 128
    fs.file-max = 65536
    net.ipv4.ip_local_port_range = 1024 65000
    net.core.rmem_default = 1048576
    net.core.rmem_max = 1048576
    net.core.wmem_default = 262144
    net.core.wmem_max = 262144


    使内核参数生效:
    # /sbin/sysctl -p

    以 root 用户身份运行以下命令来验证您的设置:

    /sbin/sysctl -a | grep shm
    /sbin/sysctl -a | grep sem
    /sbin/sysctl -a | grep file-max
    /sbin/sysctl -a | grep ip_local_port_range


    ######################################################
     
     
     4.为 oracle 用户设置 Shell 限制
     
     $vi /etc/security/limits.conf
     #添加如下内容:
    oracle               soft    nproc   2047
    oracle               hard    nproc   16384
    oracle               soft    nofile  1024
    oracle               hard    nofile  65536

    $vi /etc/pam.d/login
    session    required     /lib/security/pam_limits.so
    session    required     pam_limits.s

     

    5.配置oracle的环境变量:

    $su oracle
    $cd
    $ls -al
    $vi /u01/oracle/.bash_profile

    export PATH
    unset USERNAME

    export EDITOR=vi
    export ORACLE_SID=ora10g
    export ORACLE_BASE=/u01/app/oracle
    export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
    export PATH=$ORACLE_HOME/bin:$PATH

    alias sqlplus="rlwrap sqlplus"
    alias rman="rlwrap rman"

    #export ORACLE_BASE ORACLE_HOME ORACLE_SID  PATH

    if [ \$USER = "oracle" ]; then 
     if [ \$SHELL = "/bin/ksh" ]; then
      ulimit -p 16384
      ulimit -n 65536
     else
      ulimit -u 16384 -n 65536
     fi
      umask 022
    fi


    $source .bash_profile    #立即生效
    $env                     #查看环境变量


    6. 准备oracle安装文件
    $su root
    上传oracle安装文件,解压缩
    $unzip  o.zip -d ./
    $chown -R oracle:oinstall database
    $mv database /u01/app/oracle/
    #移动安装文件到 oracle目录下

    7. 准备Xmanager
    安装Open Xmanage
    打开 Xstart
    输入
    Session name: myOracle
    Host: yourip
    protocol: SSH
    User Name: oracle
    Password : ***
    Execution Command: 选择:xterm (Linux)

    然后点击save、 run,连接并登陆。

    8. 开始安装oracle
    连接成功后,进入oracle家目录
    $ls
    $cd database
    $./runinstaller
    然后出现熟悉的Oracle 图形安装界面,按照提示进行安装。
    #安装过程中不创建数据库,在后面用dbca命令进行创建。


    需要root用户执行的两个脚本:
    /u01/app/oracle/oraInventory/orainstRoot.sh
    /u01/app/oracle/product/10.2.0/db_1/root.sh

     

    ## 视频教程中的做法,可以不用。
    #使用oracle用户进行安装:
    #su oracle
    #$export DISPLAY=local_host_ip:0.0 ;
    #进入database安装目录下:
    #$./runinstaller
    #使用XManager进行图形界面安装

    #####
    The following J2EE Applications have been deployed and are accessible at the URLs listed below.

    iSQL*Plus URL:
    http://oracle10g:5560/isqlplus

    iSQL*Plus DBA URL:
    http://oracle10g:5560/isqlplus/dba
    #####


    9. #创建数据库
    $dbca


    10. # 创建一个 Listener
    $netca

    11. # 创建一个 service
    $netmgr


    12. #验证是否安装成功,sqlplus 连接:
    $sqlplus
    :/as sysdba
    SQL> select * from dual ;
    SQL> select sysdate from dual ;

     

     

     


     

  • linux下mysql命令

    2010-08-07 13:32:16

    linux下mysql命令

    启动命令:
    $ ./mysqld_safe --defaults-file=/home/mysql/local/mysql_sale_mirror/etc/my.cnf --basedir=/home/mysql/local/mysql_sale_mirror/ --datadir=/home/mysql/local/mysql_sale_mirror/var/ --pid-file=/home/mysql/local/mysql_sale_mirror/var/mysql.pid --skip-external-locking --port=8100 --socket=/home/mysql/local/mysql_sale_mirror/tmp/mysql.sock &
    [1] 14815
    [mysql@db-testing-ecom959.db01.baidu.com bin]$ Starting mysqld daemon with databases from /home/mysql/local/mysql_sale_mirror/var/

    一、总结一下:

    1.linux下启动mysql的命令:
       mysqladmin start
    /ect/init.d/mysql start (前面为mysql的安装路径)

    2.linux下重启mysql的命令:
       mysqladmin restart
    /ect/init.d/mysql restart (前面为mysql的安装路径)

    3.linux下关闭mysql的命令:
       mysqladmin shutdown
       /ect/init.d/mysql   shutdown (前面为mysql的安装路径)

    4.连接本机上的mysql:
    进入目录mysql\bin,再键入命令mysql -uroot -p, 回车后提示输入密码。
    退出mysql命令:exit(回车)

    5.修改mysql密码:
    mysqladmin -u用户名 -p旧密码 password 新密码
    或进入mysql命令行SET PASSWORD FOR root=PASSWORD("root");

    6.增加新用户。(注意:mysql环境中的命令后面都带一个分号作为命令结束符)
    grant select on 数据库.* to 用户名@登录主机 identified by "密码"
    如增加一个用户test密码为123,让他可以在任何主机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:
    grant select,insert,update,delete on *.* to " Identified by "123";

    二、有关mysql数据库方面的操作
          必须首先登录到mysql中,有关操作都是在mysql的提示符下进行,而且每个命令以分号结束

    1、显示数据库列表。
         show databases;
    2、显示库中的数据表:
          use mysql; //打开库
          show tables;
    3、显示数据表的结构:
        describe 表名;
    4、建库:
        create database 库名;
    5、建表:
        use 库名;
        create table 表名(字段设定列表);
    6、删库和删表:
         drop database 库名;
          drop table 表名;
    7、将表中记录清空:
         delete from 表名;
    8、显示表中的记录:
        select * from 表名;

    9、编码的修改
    如果要改变整个mysql的编码格式:
    启动mysql的时候,mysqld_safe命令行加入
    --default-character-set=gbk

    如果要改变某个库的编码格式:在mysql提示符后输入命令
    alter database db_name default character set gbk;

    三、数据的导入导出

    1、文本数据转到数据库中
        文本数据应符合的格式:字段数据之间用tab键隔开,null值用来代替。例:
        1 name duty 2006-11-23
        数据传入命令 load data local infile "文件名" into table 表名;

    2、导出数据库和表
        mysqldump --opt news > news.sql(将数据库news中的所有表备份到news.sql文件,news.sql是一个文本文件,文件名任取。)
        mysqldump --opt news author article > author.article.sql(将数据库news中的author表和article表备份到author.article.sql文件, author.article.sql是一个文本文件,文件名任取。)
        mysqldump --databases db1 db2 > news.sql(将数据库dbl和db2备份到news.sql文件,news.sql是一个文本文件,文件名任取。)
         mysqldump -h host -u user -p pass --databases dbname > file.dump
    就是把host上的以名字user,口令pass的数据库dbname导入到文件file.dump中
        mysqldump --all-databases > all-databases.sql(将所有数据库备份到all-databases.sql文件,all-databases.sql是一个文本文件,文件名任取。)

    3、导入数据
        mysql < all-databases.sql(导入数据库)
        mysql>source news.sql;(在mysql命令下执行,可导入表)


    一、连接MySQL
            格式: mysql -h主机地址 -u用户名 -p用户密码

            1、例1:连接到本机上的MYSQL。

            首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>。

            2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:

            mysql -h110.110.110.110 -uroot -pabcd123

            (注:u与root可以不用加空格,其它也一样)

            3、退出MYSQL命令: exit (回车)。

            二、修改密码

            格式:mysqladmin -u用户名 -p旧密码 password 新密码

            1、例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令:

            mysqladmin -uroot -password ab12

            注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

            2、例2:再将root的密码改为djg345。

            mysqladmin -uroot -pab12 password djg345

            三、增加新用户。(注意:和上面不同,下面的因为是MySQL环境中的命令,所以后面都带一个分号作为命令结束符)

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

            例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MySQL,然后键入以下命令:

            grant select,insert,update,
            delete on *.* to test1@\"%\" Identified by \"abc\";

            但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的MySQL数据库并对你的数据可以为所欲为了,解决办法见例2。

            例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作 (localhost指本地主机,即MySQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据 库,只能通过MySQL主机上的web页来访问。

            grant select,insert,update,
            delete on mydb.* to test2@localhost identified by \"abc\";

            如果你不想test2有密码,可以再打一个命令将密码消掉。

            grant select,insert,update,delete on mydb
            .* to test2@localhost identified by \"\";

            在上面讲了登录、增加用户、密码更改等问题。下面我们来看看MySQL中有关数据库方面的操作。注意:你必须首先登录到MySQL中,以下操作都是在MySQL的提示符下进行的,而且每个命令以分号结束。

    一、操作技巧

            1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就完成。

            2、你可以使用光标上下键调出以前的命令。但以前我用过的一个MySQL旧版本不支持。我现在用的是mysql-3.23.27-beta-win。

            二、显示命令

            1、显示数据库列表:

            show databases;

            刚开始时才两个数据库:mysql和test。MySQL库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。

            2、显示库中的数据表:

            use mysql; //打开库,学过FOXBASE的一定不会陌生吧

            show tables;

            3、显示数据表的结构:

            describe 表名;

            4、建库:

            create database 库名;

            5、建表:

            use 库名;

            create table 表名 (字段设定列表);

            6、删库和删表:

            drop database 库名;

            drop table 表名;

            7、将表中记录清空:

            delete from 表名;

            8、显示表中的记录:

            select * from 表名;

            三、一个建库和建表以及插入数据的实例

            drop database if exists school; //如果存在SCHOOL则删除

            create database school; //建立库SCHOOL

            use school; //打开库SCHOOL

            create table teacher //建立表TEACHER

            (

            id int(3) auto_increment not null primary key,

            name char(10) not null,

            address varchar(50) default ’深圳’,

            year date

            ); //建表结束

            //以下为插入字段

            insert into teacher values(’’,’glchengang’,’深圳一中’,’1976-10-10’);

            insert into teacher values(’’,’jack’,’深圳一中’,’1975-12-23’);

            注:在建表中(1)将ID设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment并不能为空:not null而且让他成为主字段primary key(2)将NAME设为长度为10的字符字段(3)将ADDRESS设为长度50的字符字段,而且缺省值为深圳。varchar和char有什么区别 呢,只有等以后的文章再说了。(4)将YEAR设为日期字段。

            如果你在MySQL提示符键入上面的命令也可以,但不方便调试。你可以将以上命令原样写入一个文本文件中假设为school.sql,然后复制到c:\\下,并在DOS状态进入目录\\mysql\\bin,然后键入以下命令:

            mysql -uroot -p密码 < c:\\school.sql

            如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。

     

    四、将文本数据转到数据库中

            1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用\\n来代替。

            例:

            3 rose 深圳二中 1976-10-10

            4 mike 深圳一中 1975-12-23

            2、数据传入命令 load data local infile \"文件名\" into table 表名。

            注意:你最好将文件复制到\\mysql\\bin目录下,并且要先用use命令打表所在的库。

            五、备份数据库:

            1、mysqldump --opt school>school.bbb

            mysqldump --opt school>school.bbb
            (命令在DOS的\\mysql\\bin目录下执行)

            注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。

            后记:其实MySQL的对数据库的操作与其它的SQL类数据库大同小异,您最好找本将SQL的书看看。我在这里只介绍一些基本的,其实我也就只懂这些了, 呵呵。最好的MYSQL教程还是“晏子“译的“MYSQL中文参考手册“不仅免费每个相关网站都有下载,而且它是最权威的。可惜不是象\"PHP4中文手 册\"那样是chm的格式,在查找函数命令的时候不太方便。

            2、修改登录密码

            1) mysqladmin -u用户名 -p旧密码 password 新密码:

            例:mysqladmin -u root password 21century

            注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

            2)直接修改user表的root用户口令:

            mysql> user mysql;
            mysql> update user set pasword=password('21century') where user='root';
            mysql> flush privileges;

            注:flush privileges的意思是强制刷新内存授权表,否则用的还是缓冲中的口令。

            3、测试密码是否修改成功:

            1)不用密码登录:

            [root@test1 local]# mysql
            ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)

            显示错误,说明密码已经修改。

            2)用修改后的密码登录:

            [root@test1 local]# mysql -u root -p
            Enter password: (输入修改后的密码21century)
            Welcome to the MySQL monitor. Commands end with ; or \g.
            Your MySQL connection id is 177 to server version: 3.23.48
            Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
            mysql>

            成功!

            这是通过mysqladmin命令修改口令,也可通过修改库来更改口令。

     

    4、启动和停止:

            启动:Mysql从3.23.15版本开始作了改动,默认安装后服务要用MySQL用户来启动,不允许root用户启动。

            如果非要用root用户来启动,必须加上--user=root参数(./safe_mysqld --user=root &)停止:mysqladmin -u root -p shutdown。

            5、导出meeting数据库:

            mysqldump -uroot -p21century meeting > db_meeting.sql

            导人dbname数据库:

            mysqldump -uroot -p21century dbname < xxx.sql

            导入数据库还可用类似于oracle中@my_script.sql的方式一次执行大量sql语句,这在使用mysqldump不起作用时非常有用。

            例:#./mysql -uroot -p < /home/xuys/db_meeting_2003.sql

            (注:create database、use databasename、create table和insert into语句都可写在上面的脚步文件中)

            6、给表改名:

            RENAME TABLE ztemp TO ztemp4;

            7、修改字段属性:

            ALTER TABLE bbabase CHANGE news_id id VARCHAR(5) NOT NULL;

            8、在表中的content后增加一字段:

            ALTER TABLE bbabase ADD leave_time DATETIME NOT NULL AFTER

     

     

     


    ----------------------------------------

     

     

     

     


    linux下安装mysql 2009-11-25 09:35:14  www.hackbase.com  来源:互联网
      linux下安装mysql    一、引言    想使用Linux已经很长时间了,由于没有硬性任务一直也没有系统学习,近日由于工作需要必须使用Linux下的MySQL。本以为有    Windows下使用SQL Server的经验,觉 ...
      linux下安装mysql
      
      一、引言
      
      想使用Linux已经很长时间了,由于没有硬性任务一直也没有系统学习,近日由于工作需要必须使用Linux下的MySQL。本以为有
      
      Windows下使用SQL Server的经验,觉得在Linux下安装MySql应该是易如反掌的事,可在真正安装和使用MySQL时走了很多弯路,遇见
      
      很多问题,毕竟Linux 和Windows本身就有很大区别。为了让和我一样的初学者在学习的过程中少走弯路,尽快入门,写了此文,希
      
      望对您有所帮助。
      
      
      二、安装Mysql
      
      1、下载MySQL的安装文件
      安装MySQL需要下面两个文件:
      MySQL-server-5.0.22-0.i386.rpm
      MySQL-client-5.0.22-0.i386.rpm
      http://download.mysql.cn/download_file/rpm/5.0/MySQL-server-5.0.22-0.i386.rpm
      http://download.mysql.cn/download_file/rpm/5.0/MySQL-client-5.0.22-0.i386.rpm
      2、安装MySQL
      rpm文件是Red Hat公司开发的软件安装包,rpm可让Linux在安装软件包时免除许多复杂的手续。该命令在安装时常用的参数是
      
      –ivh ,其中i表示将安装指定的rmp软件包,V表示安装时的详细信息,h表示在安装期间出现“#”符号来显示目前的安装过程。这个
      
      符号将持续到安装完成后才停止。
      1)安装服务器端
      在有两个rmp文件的目录下运行如下命令:
      [root@test1 local]# rpm -ivh MySQL-server-5.0.22-0.i386.rpm
      显示如下信息。
      warning: MySQL-server-5.0.9-0.i386.rpm: V3 DSA signature: NOKEY, key ID 5072e1f5
      Preparing...       ########################################### [100%]
      1:MySQL-server     ########################################### [100%]
      。。。。。。(省略显示)
      /usr/bin/mysqladmin -u root password 'new-password'
      /usr/bin/mysqladmin -u root -h test1 password 'new-password'
      。。。。。。(省略显示)
      Starting mysqld daemon with databases from /var/lib/mysql
      如出现如上信息,服务端安装完毕。测试是否成功可运行netstat看Mysql端口是否打开,如打开表示服务已经启动,安装成功。
      
      Mysql默认的端口是3306。
      [root@test1 local]# netstat -nat
      Active Internet connections (servers and established)
      Proto Recv-Q Send-Q Local Address      Foreign Address     State
      tcp  0  0 0.0.0.0:3306     0.0.0.0:*      LISTEN
      上面显示可以看出MySQL服务已经启动。
      2)安装客户端
      运行如下命令:
      [root@test1 local]# rpm -ivh MySQL-client-5.0.22-0.i386.rpm
      warning: MySQL-client-5.0.9-0.i386.rpm: V3 DSA signature: NOKEY, key ID 5072e1f5
      Preparing...    ########################################### [100%]
      1:MySQL-client  ########################################### [100%]
      显示安装完毕。
      用下面的命令连接mysql,测试是否成功。
      三、登录MySQL
      
      登录MySQL的命令是mysql, mysql 的使用语法如下:
      mysql [-u username] [-h host] [-p[password]] [dbname]
      username 与 password 分别是 MySQL 的用户名与密码,mysql的初始管理帐号是root,没有密码,注意:这个root用户不是
      
      Linux的系统用户。MySQL默认用户是root,由于初始没有密码,第一次进时只需键入mysql即可。
      [root@test1 local]# mysql
      Welcome to the MySQL monitor. Commands end with ; or \g.
      Your MySQL connection id is 1 to server version: 4.0.16-standard
      
      Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
      mysql>
      出现了“mysql>”提示符,恭喜你,安装成功!
      增加了密码后的登录格式如下:
      mysql -u root -p
      Enter password: (输入密码)
      其中-u后跟的是用户名,-p要求输入密码,回车后在输入密码处输入密码。
      
      注意:这个mysql文件在/usr/bin目录下,与后面讲的启动文件/etc/init.d/mysql不是一个文件。
      
      四、MySQL的几个重要目录
      
      MySQL安装完成后不象SQL Server默认安装在一个目录,它的数据库文件、配置文件和命令文件分别在不同的目录,了解这些目
      
      录非常重要,尤其对于Linux的初学者,因为 Linux本身的目录结构就比较复杂,如果搞不清楚MySQL的安装目录那就无从谈起深入学
      
      习。
      
      下面就介绍一下这几个目录。
      
      1、数据库目录
      /var/lib/mysql/
      
      2、配置文件
      /usr/share/mysql(mysql.server命令及配置文件)
      
      3、相关命令
      /usr/bin(mysqladmin mysqldump等命令)
      
      4、启动脚本
      /etc/rc.d/init.d/(启动脚本文件mysql的目录)
      五、修改登录密码
      
      MySQL默认没有密码,安装完毕增加密码的重要性是不言而喻的。
      
      1、命令
      usr/bin/mysqladmin -u root password 'new-password'
      格式:mysqladmin -u用户名 -p旧密码 password 新密码
      
      2、例子
      例1:给root加个密码123456。
      键入以下命令 :
      [root@test1 local]# /usr/bin/mysqladmin -u root password 123456
      注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
      
      3、测试是否修改成功
      1)不用密码登录
      [root@test1 local]# mysql
      ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)
      显示错误,说明密码已经修改。
      2)用修改后的密码登录
      [root@test1 local]# mysql -u root -p
      Enter password: (输入修改后的密码123456)
      Welcome to the MySQL monitor. Commands end with ; or \g.
      Your MySQL connection id is 4 to server version: 4.0.16-standard
      Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
      mysql>
      成功!
      这是通过mysqladmin命令修改口令,也可通过修改库来更改口令。
      
      六、启动与停止
      
      1、启动
      MySQL安装完成后启动文件mysql在/etc/init.d目录下,在需要启动时运行下面命令即可。
      [root@test1 init.d]# /etc/init.d/mysql start
      
      2、停止
      /usr/bin/mysqladmin -u root -p shutdown
      
      3、自动启动
      1)察看mysql是否在自动启动列表中
      [root@test1 local]# /sbin/chkconfig –list
      2)把MySQL添加到你系统的启动服务组里面去
      [root@test1 local]# /sbin/chkconfig – add mysql
      3)把MySQL从启动服务组里面删除。
      [root@test1 local]# /sbin/chkconfig – del mysql
      七、更改MySQL目录
      
      MySQL默认的数据文件存储目录为/var/lib/mysql。假如要把目录移到/home/data下需要进行下面几步:
      
      1、home目录下建立data目录
      cd /home
      mkdir data
      
      2、把MySQL服务进程停掉:
      mysqladmin -u root -p shutdown
      
      3、把/var/lib/mysql整个目录移到/home/data
      mv /var/lib/mysql /home/data/
      这样就把MySQL的数据文件移动到了/home/data/mysql下
      
      4、找到my.cnf配置文件
      如果/etc/目录下没有my.cnf配置文件,请到/usr/share/mysql/下找到*.cnf文件,拷贝其中一个到/etc/并改名为my.cnf)中。
      
      命令如下:
      
      [root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
      
      5、编辑MySQL的配置文件/etc/my.cnf
      为保证MySQL能够正常工作,需要指明mysql.sock文件的产生位置。修改socket=/var/lib/mysql/mysql.sock一行中等号右边的
      
      值为:/home/mysql/mysql.sock 。操作如下:
      vi  my.cnf    (用vi工具编辑my.cnf文件,找到下列数据修改之)
      # The MySQL server
      [mysqld]
      port   = 3306
      #socket  = /var/lib/mysql/mysql.sock(原内容,为了更稳妥用“#”注释此行)
      socket  = /home/data/mysql/mysql.sock   (加上此行)
      
      6、修改MySQL启动脚本/etc/rc.d/init.d/mysql
      最后,需要修改MySQL启动脚本/etc/rc.d/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等号右边的路径改成你现在
      
      的实际存放路径:home/data/mysql。
      [root@test1 etc]# vi /etc/rc.d/init.d/mysql
      #datadir=/var/lib/mysql    (注释此行)
      datadir=/home/data/mysql   (加上此行)
      
      7、重新启动MySQL服务
      /etc/rc.d/init.d/mysql start
      或用reboot命令重启Linux
      如果工作正常移动就成功了,否则对照前面的7步再检查一下。
      
      八、MySQL的常用操作
      
      注意:MySQL中每个命令后都要以分号;结尾。
      
      1、显示数据库
      mysql> show databases;
      +----------+
      | Database |
      +----------+
      | mysql  |
      | test    |
      +----------+
      2 rows in set (0.04 sec)
      Mysql刚安装完有两个数据库:mysql和test。mysql库非常重要,它里面有MySQL的系统信息,我们改密码和新增用户,实际上
      
      就是用这个库中的相关表进行操作。
      
      2、显示数据库中的表
      mysql> use mysql; (打开库,对每个库进行操作就要打开此库,类似于foxpro )
      Database changed
      
      mysql> show tables;
      +-----------------+
      | Tables_in_mysql |
      +-----------------+
      | columns_priv  |
      | db       |
      | func       |
      | host      |
      | tables_priv      |
      | user      |
      +-----------------+
      6 rows in set (0.01 sec)
      
      3、显示数据表的结构:
      describe 表名;
      
      4、显示表中的记录:
      select * from 表名;
      例如:显示mysql库中user表中的纪录。所有能对MySQL用户操作的用户都在此表中。
      Select * from user;
      
      5、建库:
      create database 库名;
      例如:创建一个名字位aaa的库
      mysql> create databases aaa;
      6、建表:
      use 库名;
      create table 表名 (字段设定列表);
      例如:在刚创建的aaa库中建立表name,表中有id(序号,自动增长),xm(姓名),xb(性别),csny(出身年月)四个字段
      use aaa;
      mysql> create table name (id int(3) auto_increment not null primary key, xm char(8),xb char(2),csny date);
      可以用describe命令察看刚建立的表结构。
      mysql> describe name;
      
      +-------+---------+------+-----+---------+----------------+
      | Field | Type  | Null | Key | Default | Extra                  |
      +-------+---------+------+-----+---------+----------------+
      | id  | int(3) |   | PRI | NULL  | auto_increment       |
      | xm  | char(8) | YES |   | NULL  |        |
      | xb  | char(2) | YES |   | NULL   |        |
      | csny | date  | YES |   | NULL  |        |
      
      +-------+---------+------+-----+---------+----------------+
      
      7、增加记录
      例如:增加几条相关纪录。
      mysql> insert into name values('','张三','男','1971-10-01');
      mysql> insert into name values('','白云','女','1972-05-20');
      可用select命令来验证结果。
      mysql> select * from name;
      +----+------+------+------------+
      | id | xm  | xb  | csny    |
      +----+------+------+------------+
      | 1 | 张三 | 男  | 1971-10-01 |
      | 2 | 白云 | 女  | 1972-05-20 |
      +----+------+------+------------+
      
      8、修改纪录
      例如:将张三的出生年月改为1971-01-10
      mysql> update name set csny='1971-01-10' where xm='张三';
      
      9、删除纪录
      例如:删除张三的纪录。
      mysql> delete from name where xm='张三';
      
      10、删库和删表
      drop database 库名;
      drop table 表名;
      
      九、增加MySQL用户
      
      格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码"
      例1、增加一个用户user_1密码为123,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以
      
      root用户连入MySQL,然后键入以下命令:
      
      mysql> grant select,insert,update,delete on *.* to user_1@"%" Identified by "123";
      例1增加的用户是十分危险的,如果知道了user_1的密码,那么他就可以在网上的任何一台电脑上登录你的MySQL数据库并对你的数据
      
      为所欲为了,解决办法见例2。
      
      例2、增加一个用户user_2密码为123,让此用户只可以在localhost上登录,并可以对数据库aaa进行查询、插入、修改、删除的
      
      操作(localhost指本地主机,即MySQL数据库所在的那台主机),这样用户即使用知道user_2的密码,他也无法从网上直接访问数据
      
      库,只能通过 MYSQL主机来操作aaa库。
      
      mysql>grant select,insert,update,delete on aaa.* to user_2@localhost identified by "123";
      
      用新增的用户如果登录不了MySQL,在登录时用如下命令:
      
      mysql -u user_1 -p -h 192.168.113.50 (-h后跟的是要登录主机的ip地址)
      
      十、备份与恢复
      
      1、备份
      
      例如:将上例创建的aaa库备份到文件back_aaa中
      
      [root@test1 root]# cd /home/data/mysql (进入到库目录,本例库已由val/lib/mysql转到/home/data/mysql,见上述第七
      
      部分内容)
      [root@test1 mysql]# mysqldump -u root -p --opt aaa > back_aaa
      
      2、恢复
      
      [root@test mysql]# mysql -u root -p ccc < back_aaa


    本篇文章来源于 黑客基地-全球最大的中文黑客站 原文链接:http://www.hackbase.com/tech/2009-11-25/58298.html

     

    mysql> show master status;

    mysql> show slave status\G

     

  • mysql入门_安装及初步操作

    2009-08-10 13:54:49

     

     

    安装mysql的安装版
    进行初步设置,设置了自己的密码,设置了bin目录到path环境变量下
    这时mysql已安装成windows系统服务:
    ----------------------------------------------------------
    启动命令:
    net start mysql
    关闭命令:
    net stop mysql

    ------------------------------------------------------------------
     登录: mysql -hlocalhost -uroot -proot
    -------------------------------------------------------------------
     其他:show databases; use mysql; show tables; select user,password from user;
     ---------------------------------------------------------
    --打开数据库
    use test;
    --删除表
    drop table person;
    --创建表
    create table person
     (
       id int not null AUTO_INCREMENT primary key,
       name varchar(20) not null,
       sex varchar(2) not null,
       age int not null,
       address varchar(30) not null 
     );
    --查看表结构
    desc person;
    --插入数据
    insert into person(name,sex,age,address) values('张三','男',20,'北京');
    insert into person(name,sex,age,address) values('李四','男',25,'天津');
    insert into person(name,sex,age,address) values('王五','女',30,'上海');
    insert into person(name,sex,age,address) values('赵六','男',21,'南京');
    insert into person(name,sex,age,address) values('孙七','女',40,'武汉');
    insert into person(name,sex,age,address) values('吴八','男',35,'西安');

    --提交事务
    commit;

     

    --查找全部数据
    select * from person;
    --按id查找数据
    select * from person where id = 1;
    --按id删除数据
    delete from person where id = 1;
    --验证
    select * from person where id = 1;
    --删除全部数据
    delete from person;
    --验证
    select * from person;
     
    --提交事务命令
    commit;
     
    --------------------------------------------------------------------
     
     退出mysql输入状态命令: quit
    ----------------------------------------------------------
     
     
     -------------------------------------------------
      其他的启动和关闭方法,先不用管了
      数据库环境已经搭建好了,先用着吧
      -------------------------------------------------
      mysql设置了密码和不设置密码有些启动关闭命令不一样
      mysqld --console
     其他停止服务的方法:
     mysqladmin -hlocalhost -uroot -proot stop

    ------------------------------------------------
     
     
     当然你也可以不用安装版的,
     复制免安装版的,
     区别就是,自己配置、修改一个my.ini文件
     你也可以试试自己修改。。。
     
     ------------------------------------------------
     eclipes 快捷键
     
     Ctrl + /    注释多行和取消注释多行   // //
     Ctrl + Shift + /    注释多行和取消注释多行  /*  */
     Ctrl + Shift + \
     
     
     
     -------------------------------------------------
     Hibernate操作数据库:
     
       Session session = new Configuration().configure().buildSessionFactory().openSession();
      //String hql = "FROM Person AS p WHERE p.name=?" ;
      String hql = "FROM Person AS p " ;
      Query q = session.createQuery(hql) ;
      //q.setString(0, "张三") ;
      List all = q.list();
      Iterator iter = all.iterator();
      while (iter.hasNext())
      {
      System.out.println(((Person)iter.next()).getAge()) ;
      }
     

  • 小布老师出Oracle性能调优的视频了。。。才知道。。

    2009-07-21 18:07:35

     

    播布客

    http://www.boobooke.com/bbs/tag.php?name=%D0%A1%B2%BC%C0%CF%CA%A6

     

    一时半会估计也看不上,基础还没打好。。。

    Oracle 数据库。。。。 Go go go 。。。

  • 转点Oracle学习的帖子

    2009-07-09 22:54:14

     

    concepts的英文还是比较简单的,tom写的《oracle编程艺术》还是不错的,建议3个月后再看,稍微有点深度的,没读一次都有不同的体会 呵呵

    浅谈Oracle学习。
    http://itspace.javaeye.com/blog/420550

    上个星期一直在出差,好久没来这个自留地啦,呵呵。现在闲来无事,就谈谈Oracle的学习方法吧。
    1.初接触Oracle,肯定会被其复杂的体系结构,众多的概念给搞混,如process和sessions,restore和recover等等,接触Oracle前3个月肯定会觉得这些概念非常抽象,又觉得无重下手,到处是重点,处处又把握不住,朋友,坚持吧,学习Oracle毅力很重要。
    2.通读Oracle官方文档的concepts章节,至少需要通读2次,英文能力一般的朋友第一次阅读时可适当参考中文文档,因为很多术语英文很难理解。网上有很多关于concepts的中文翻译,其中翻译的比较出色当属于zw1840。第二次阅读时必须抛弃中文资料,英语阅读再困难,也要将其啃下来,因为阅读英文资料,一:会有自己的想法,二:好多好的Oracle资料都是英文的。
    3.学习Oracle初级阶段切忌上一些中文论坛,如itpub,因为那里水平参差不齐,再加上自己水平有限,判断能力有限,他们给出的答案很多都是错误的,很容易形成误导。
    4.遇到问题,先静下来想想,自己先尝试解决问题。
    5.学习Oracle讲究一个“悟”字,即不要浅尝辄止,遇到问题,不是解决就好了,多想想为什么会产生这样的问题,怎么样才能避免,这个问题的背后是什么,牵扯到的知识点有哪些,等等。假如你是Oracle的设计者,你会怎么样设计Oracle?当自己的理念和Oracle的理念产生冲突时,99%是自己错了,多想想这个模块Oracle为什么要这样实现,这样实现会带来什么好处。
    6.实践永远重要于理论,书看的再多,而不会用sqlplus "/as sysdba"操作一系列命令,也是徒然。
    7.不要迷信市面上的Oracle书籍,除了tomas kyte,eygle,piner的书可以读之外,说实在其他的书真的是浪费时间,还不如自己再通读一边concepts。
    8.互联网的神奇之一是产生了google这样的好工具,查阅资料比baidu好多啦
    9.自己研究Oracle的alert日志会给自己带来意想不到的成果,尤其是研究启动过程部分
    10.千言万语,兴趣是第一位的,Oracle好像是一杯醇酒,越品越有味,不知不觉醉心于此。

     

    Oracle书籍推荐
    http://chenjianjx.javaeye.com/blog/295563

     

    Oracle推荐书籍2008-12-06 12:46很多朋友要我帮忙推荐一下Oracle的入门书籍,能够了解Oracle的基本概念、基本知识的那种。
    我就免为其难,推荐几本。

    首先我想强调的一点是,任何一本系统的Oracle书籍只要认真读下来,都会有不错的收获,读书最忌讳的是虎头蛇尾,浅尝则止。

    1.第一本要推荐给大家的是Oracle的概念手册,这本手册是无数DBA学习的起点:Database Concepts
    这是Oracle的官方文档,详尽的介绍了Oracle的基本概念,是DBA经常需要翻阅的参考书,也是最好的入门学习资料,如果大家阅读英文不存在问题,请先阅读本书,这本书可以在Oracle的官方文档站点Tahiti找到:
    http://www.oracle.com/pls/db102/homepage?remark=tahiti

    Oracle10gR2的下载地址为:
    http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14220.pdf

    下载之前你可能需要注册一个OTN的免费帐号。如果你无法从官方站点下载,也可以通过本站下载这本手册:http://www.eygle.com/orabk/OraDoc/b14220.pdf

    当然我建议大家都从英文版开始你的阅读,即便你的英文不够好,但是如果你觉得还是有障碍,网络上已经有很多朋友将这本手册翻译成了中文,我打包了两个版本(如果CHM格式无法打开,请在右键属性页里选择解除锁定),提供下载:

    http://www.eygle.com/orabk/OraDoc/Oracle.Concepts.zip

    原出处链接请参考:ITPUB链接 ITPUB链接2 网友译本


    2.第二本要推荐的是Thomas Kyte的《Expert One on One: Oracle》,这本书的中译本,被称为《Oracle专家高级编程》。
    毋庸多说,这本书是Oracle界的经典之作,最初是基于Oracle8i进行写作的,现在Tom已经出版了基于Oracle9i/Oracle10g的升级版,书名为《Oracle Database Architecture 9i and 10g Programming Techniques and Solutions》,现在中文译本也已经快要出版了。

    这本书的前几章以介绍Oracle的基础知识为主,后几章则以介绍开发相关的内容为主,侧重于管理DBA的朋友可以着重阅读一下该书的前几章。

    Expert One on One: Oracle 这本书中文版大家可以参考:
    http://www.itpub.net/showthread.php?threadid=224536
    其英文版本参考:
    http://www.itpub.net/showthread.php?threadid=316444

    Oracle Database Architecture 9i and 10g Programming Techniques and Solutions 这本书的英文版参考:
    http://www.itpub.net/showthread.php?threadid=486715

    中文版参考:

    http://www.itpub.net/thread-969575-1-3.html

    我强烈推荐大家仔细阅读本书。

    3.另外要推荐给大家的一个系列图书是,Oracle OCP官方培训教材

    这套官方教材无论从结构还是体系上来说都是非常不错的入门及学习参考资料,虽然其中也存在一些错误和含混之处,但是仍然不失为经典,每个考过OCP认证的人都曾经深入阅读过该系列教材。

    我可以负责任的说:每个全面深入阅读和理解该系列教材的人,都无愧于OCP认证,虽然现在的Paper OCP是那么的多。

    另外一个值得推荐之处是,该系列教材拥有不同版本Oracle8i/Oracle9i/Oracle10g,而且大部分都有中文版本,大家可以对照学习。

    这些教材大都可以从ITPUB上找到,恕我不能一一查出其具体链接:)


    4.此外推荐大家可以看看《ITPUB技术丛书》


    ITPUB的技术书籍来源于实践,对于解决实际问题非常有帮助。
    目前已经出版了四本书《Oracle 数据库DBA专题技术精粹》、《Oracle 数据库性能优化》、《深入浅出Oracle-DBA入门、进阶与诊断案例》、《循序渐进Oracle》。
    其中部分图书的章节可以参考以下链接:
    http://www.eygle.com/archives/2008/08/stepbs_oracle_info.html

    书不在多,精读则灵,希望大家能够静下心来认真阅读,然后一定会有所收获的。
    最后要提醒大家的是,Oracle的英文资料众多,要想真正深入学习Oracle,必须克服英文阅读的障碍。

    开发必看的..
    Oracle 9i & 10g编程艺术,书的内容好..翻译的也很好
    http://www.douban.com/subject/1864527/
    再随便找本PLSQL的书好了..
    这本:http://www.china-pub.com/28201
    或者这本:http://www.china-pub.com/16882

    一直认为,Oracle开发的话,不必废话,唯一的书籍选择标准就是tom的作品。上amazon搜他的最新作品就完了
    上面那本《Oracle 9&10g 编程艺术》在目前来说是最好的
    真的没见有人能够同时在技术水平、写作技巧和事业这3个方面都能达到Tom那个高度的。

     

     

    做java太苦了,如何成为一名高薪的DBA呢?
    http://www.javaeye.com/topic/167626

     

    我做php和java已经很久了,真的是太苦了,而且人太多,我想凭我的资质在java里是混不出什么名堂的了,想转dba了。老师说过在IT里面有一黄金行业:DBA,有一个可以干一辈子的IT职位:DBA,因为它是吃经验的,干的时间越久越好。我不想浪费我的时间了,希望从今天开始进入DBA的行列。
    我做了一个简单的计划:想找到第一份DBA的工作要有两个基本的东西:你英语好,有一个精通的数据库oracle9i。
    所以时间是这样安排的:晚上的所有时间放在成为DBA的计划中。
    晚上:
          6:00 --  6:30     学新东方的英语语音(英语的基本功学多久也要练的)

    http://www.youku.com/playlist_show/id_336535_orderby_9_page_1.html
    or
    http://video.xuezhishi.com/play.asp?id=494&m=60&n=1&u=1&v=1

         6:30 --  7:00     学新东方新概念英语2
    http://so.56.com/index?type=video&key=%D0%C2%B6%AB%B7%BD+%D0%C2%B8%C5%C4%EE%D3%A2%D3%EF+%B5%DA%B6%FE%B2%E1&op=or&sortby=3
          7:00 --  8:00     看动感英语2005有文本
    http://www.zaban.cn/forum-74-1.html
          8:00 --  11:00    边看oracle学习视频边写代码(我有俩部视频:oracle内部教学视频,ITlab教学视频)够了
          11:00 --  12:00   边看hibernate学习视频边写代码
    以上的原则:在于熟能生巧,不在多。计划的有效时间是2008年3月4日到2008年12月31日
    因为我想在简历上写精通oracle9i,精通hibernate,英语很棒。有经验。


    当然还有很多的相干知识要学的:
    java的基本知识,struts,spring.数据结构,基本算法,设计模式,离散数学,线形代数,高数,概率统计,但这些不是现在的重点,是以后的事。我也要活下去的:白天不管一切只要能挣到钱就行。什么都干。白天的任务是挣钱。

    做java太苦了,而且也对我来说真的是没有什么上升的空间了,如何成为一名高薪的DBA呢? 一切都在摸索中,希望有高人能指点一下。以上都是自己的感言。下面转些东西吧。谢谢!
    我转一篇很精彩DBA经验文章吧,供自己以后学习借鉴。







    成就DBA职业生涯介绍
    许多年来,我在不同的新闻组上花费了很多时间与那些想知道如何得到数据库管理员(DBA)的工作或者如何成长为一名DBA的IT人进行交谈,现在他们有了工作。这些年来许多人针对如何达到这个目标提出了不同意见。本文即是那些意见的综合并且能够在如何才能出色的完成DBA的工作方面给出好的建议。这篇文章同样对于如何让一名DBA变得对老板更有价值。假如你已经是一名DBA,那么也许你会希望跳过文章的前几段。

    我应该成为一名DBA么?

    我曾问过的一个问题是一个人应该从事DBA这样的职业么。这个问题并不容易回答,因为它因人而异。有的人有成为一名好DBA所需要的天赋。而其他人并不认为能够很容易掌握成为DBA的秘诀。DBA职业需要掌握一定的技能。而且还需要其他IT职业所不必需的要求。因此,为了回答这个问题,我通常给将要成为DBA的人描述DBA职业所必需的要求。下面的段落中,我都将以问题结尾。在继续下一段以前请花一些时间考虑并且回答这些问题。

    许多人因为许多原因而立志要成为DBA。其中一个主要原因是薪水。DBA是IT业中薪水最高的职业之一。其他人想成为DBA是因为喜欢赞扬DBA是受到的荣誉,或者因为他看上去很酷!我个人认为,成为DBA是很值得的。它是一个很有意思,令人兴奋的职业。那么,你把DBA作为一个可能的职业选择的原因是什么呢?

    除非你已经提前准备好了,否则你可能会发现从事DBA职业充满了挫折和令人头痛。一个数据库存在于操作系统和最终用户应用程序之间。同样地,DBA必须非常精通他的数据库所在的操作系统。DBA并不一定需要知道所有有关操作系统的知识,但是他知道得越多越好。数据库与操作系统联系非常紧密。理解这种关联是十分必要的。DBA还需要知道服务器硬件以及它如何影响与帮助数据库。同时,DBA必须理解应用软件。DBA可能会被要求帮助开发人员创建可靠,健全的数据库应用程序。还有,最重要的也是最明显的,DBA必须十分彻底的理解数据库引擎,它是如何工作的,所有的引擎是如何组合在一起的,以及如何影响数据库引擎向最终用户和应用程序传送数据的能力。我见过的最好的DBA有非常深刻的理解而且不仅仅在数据库本身。他们知道一些系统管理与应用开发。好多时候他们在成为DBA之前有其中一个或两个背景。无论如何,成为一名合格的而不是出色的DBA也需要许多背景知识。你是否已经做好准备开始学习直到你感到已经无法再学下去了?

    许多和我交谈过的,在开始DBA职业时遇到困难的人,在尝试着吸收大量DBA所需了解的信息时实际上都会有一些问题。毕竟系统管理员是全职学习操作系统的细节。应用程序开发人员全职学习如何编写好的程序。DBA不仅要非常了解这两种不同的工作,而且还需要花费更多的时间去理解数据库的体系结构,以及理解每一样东西的每一块是如何组合在一起的!听起来是不是很让人畏缩?有许多人失败后这样想,并且把DBA工作看作一项非常困难的事情。也有那些传播和理解所有这些信息,并且使用这些信息做出好的,听起来具有技术性的决定的人。正如我以前是一名DBA时喜欢说的,所有这些对我来说看上去像一个大谜团。把这些所有的很好的组合在一起就是挑战。你是哪一种人?

    许多DBA是随时侯命的。他们会在白天或晚上的所有时间接到呼叫去解决他们的数据库出现的致命问题。数据库是商业信息技术基础组织的必不可少的组成部分。没有数据,就没有必要拥有一个计算机系统。数据推动商业。假如amazon.com的网站不能在数据库中搜索产品并且假如没有人能够为他们的产品下订单,那么它会变成什么样?它就不会在商业中存在很久。当数据库down掉,即使只是很短的时间,公司也会损失重大。基于这个原因,DBA到达现场后必须尽可能迅速的解决问题。许多公司有自己的DBA团队以便可以轮流待命。这些DBA 24×7小时的维持数据库应用程序。假如工作需要的话,你准备好随时候命了么?

    一些DBA的职责包括为软件打补丁或者对数据库做些改变。通常,这些操作不能在公司职员工作的时候做,因为此时数据库必须运行以便他们能够工作。这意味着DBA经常不得不在很早或者深夜甚至周末,总之,在正常工作时间以外来完成工作。你准备好在非正常时间工作,或者你在找一个朝九晚五的工作?

    对DBA而言,需要掌握的一个重要内容就是通常被称为“软技术”的东西。DBA需要在团队中很好的工作,通常团队是在变化的,如系统管理员,网络管理员,应用程序开发人员,项目经理和其他人。DBA要能够用流利的英语解释复杂的技术概念,让团队中其他人明白。DBA还要能够在数据库相关问题上指挥团队队员。你的软技术怎么样?

    下面不是全部列表,但是包括了DBA的典型职责:
    •把监视数据库实例当作每日必做工作以保证其可用性。解决不可用的问题。
    •收集系统统计和性能信息以便定向和配置分析。
    •配置和调整数据库实例以便在应用程序特定要求下达到最佳性能。
    •分析和管理数据库安全性。控制和监视用户对数据库的访问。必要时审计数据库的使用。
    •监视备份程序。必要时提供恢复。测试备份与恢复程序。
    •升级RDBMS软件并且在必要时使用补丁。必要时升级或者迁移数据库实例。
    •通过数据库相关动作来支持应用程序开发人员。
    •跟随数据库趋向和技术。当可应用时使用新技术。安装,测试和评估Oracle新的相关产品。
    •执行存储和物理设计。均衡设计问题以完成性能优化。
    •创建,配置和设计信的数据库实例。
    •诊断,故障检测和解决任何数据库相关问题。必要时联系Oracle支持人员以便使问题得到较好的解决。
    •确保Oracle网络软件(SQL*Net, Net8, Names, OiD)配置和运行的很好。
    •与系统管理员(Unix & NT)一起工作以保证Oracle相关事务得到很好的处理。
    •为有效的,定期的维护数据库创建任何必要的脚本。

    前面各段的问题是为了使你考虑一名DBA该做些什么,帮助你决定这是不是适合你的职业。我并非意味着假如你的目标是成为DBA这些会阻止你。我只是尝试着展现一些事实。我看到过一些DBA一旦被实际工作打击了就一蹶不振。他们花费时间,精力和一些金钱获得了他们的第一份DBA工作。我个人认为这个职业非常有价值。而且我无法想像现在做任何其他的会怎样。所以,这一段帮助你决定这是不是你希望从事的。假如它是,那么尽你所有去得到它!

    我怎样得到第一份DBA工作?
    你已经阅读了前面的段落并且认为成为一名DBA是一个好的职业。祝贺你!我希望你的职业能变成你想像得那么令人兴奋和有意义。那么,你如何找到第一份DBA工作?这个问题我已经听别人问了许多许多遍。

    在90年代早期,因特网急速发展。它使公司象草一般萌芽。公司蜂拥而至并且开始创建他们在网上的形象。几乎所有这些有网站的公司都需要一个数据库作为web应用的后台。不幸的是,当时在该领域却没有那么多DBA。在IT业,DBA变得奇缺。那段时间里,得到一份DBA工作看上去只要可以拼出“Oracle”或者可能只是在大学里接触过一学期的数据库就行。为了使生活变得更好,DBA的匮乏促使公司付给有潜力的职员很高的薪水。假如你想要成为一名DBA,很容易,非常容易。你需要做的就是证明你了解什么是数据库然后工作就会比你预期的更早的出现在你面前。

    然后因特网的泡沫破灭了。大量投产因特网的公司破产。许多给公司工作的DBA重新寻找工作。缺少DBA的公司找到一名有DBA经验的人比以前容易得多。在21世纪初期,由于经济并不十分稳固,因此生活并不容易(至少在美国如此)。公司都勒紧了他们的裤腰带。所有这些转化为更少的工作机会和DBA候选人更少的工作空缺。

    得到第一份DBA工作的最艰难的部分是每一个职位都要求有一些工作经验。如果你从公司的角度出发,你就可以理解为什么对DBA职位而言经验是必需的。假如他没有一点经验,你会付给这个人很高的工资让他去操作,维护和运行你IT基础组织的最大最重要的一部分么?你的公司会付钱给一名没有经验的DBA么?并且,在等待他成长起来的过程中可能会损失上百万美元的收入。对大多数公司而言,这些问题的答案肯定是‘不’。所以,没有经验,获得你的第一份DBA工作是很困难的。

    第一份DBA工作现在成了恶性循环的境遇。假如我没有任何经验,我怎样才能得到DBA的工作呢?我没有工作的话又怎么能得到DBA经验呢?这是要战胜的最困难的障碍。最困难的部分是获得第一个DBA工作。这部分的剩下部分将针对实现你第一个DBA工作的目标给你一些建议。

    提示#1:接受教育。—尽可能多的学习有关数据库的知识。这很可能将占用你正常工作以外的部分时间也精力。参加本地大学举办的数据库培训班。许多培训公司都会举办数据库管理员的培训班。假如你的老板不资助你的学习,那么你可能不得不自己支付这笔费用。许多DBA职业要求至少为计算机科学或相关专业本科以上学历,因此你必须至少有那样的文凭。

    提示#2:锻炼成为DBA。—许多数据库供应商都允许你下载他们数据库系统的测试版或评估版。下载一份并且在自己的个人电脑上安装软件。练习使用数据库。故意破坏数据库并且尝试修复它。尝试着履行你所能想到的尽可能多的DBA职责。测试和磨练你在自己的测试平台上的技能这样你就可以证明你的数据库管理能力。

    提示#3:获得认证。—许多数据库提供商都提供自己的数据库产品的认证。许多公司现在都把认证看作是一种标准。需要记住的一件事是仅获得认证是不够的。通过DBA认证测试并不意味着你知道如何管理一个数据库。它只是告诉你以后可能的老板,现在你拥有了一定的技术。它还告诉你的老板你对DBA工作的态度是很认真的。我看到许多人抱怨他们已经得到了认证但是没有经验,却仍然不能得到第一份DBA工作。认证本身并不能使你得到工作,但它是无害的。即使没有其他的,在你进行认证的时候你也已经学到了许多知识。只是不要依赖认证来给你带来你要找的工作。你需要的比这还要多。但它会在最后帮助你。

    提示#4:利用你现有的技能。—许多DBA具有系统管理员背景。其他的有应用程序开发背景。假如可能,查看你能否利用现有的技能来得到工作。现在的目标就是为你和你的老板创造一个双赢的局面。例如,让我们假设你已经是一名系统管理员而想进入DBA领域。也许你会找到一份工作,这份工作一部分时间里可以用到你的系统管理技能,并且在剩下的时间里可以使你涉及到数据库管理领域。假如你已经是一名某个产品平台上的DBA但你希望转到其他产品平台,那么看看你能否找到一份同时接触两个产品平台的工作。这样,公司和你都得到了想要的。在你定向到了DBA工作后,你可以试着得到一个能让你全职作它的职位,也许还可以在同一个公司中。

    提示#5:利用现在的机会。—有时候,一个人进入DBA领域仅仅需要的是正确的地方和正确的时机。假如你现在的老板有一个机会让你进行任何数据库的项目,抓住这个机会!任何数据库经验就比没有数据库经验要好。让你的管理者知道你十分积极的在寻找任何可能的数据库机会。他们就有可能在下次机会到来的时候想到你。进行这些数据库项目以及看到你要成为一个DBA的渴望以后,他们可能会决定培训你,提拔你。许多许多人都是以这种方式获得他的第一个DBA工作,在进行了一些数据库相关的项目后不知不觉的成为一名较低级的DBA。通常当一名DBA离开公司后,公司将在内部寻找一个候选人,假如他们认为这名候选人是可训练的话。

    提示#6:寻找较低级的DBA职位。—假如你只是为了一个较低级的DBA工作,看到DBA职位的需求描述说他们正在寻找高级DBA或者其他的。所以,让我们严谨一些。你并没有一个高级方面的经验。我已经讨论过了对于这样的职位为什么公司不会考虑你。但是他们会在低级的职位上考虑你。低级的DBA在高级DBA的指导下完成工作。他们摸索窍门。一般来说,高级DBA对数据库承担责任,同时也获得所有的荣誉。但是不要焦急。随着你的事业发展,你将会有越来越多的责任和得到越来越多的信任。因为你没有任何经验,你应该从这里开始启航。

    我也听到过一些公司寻找一名高级DBA,但是到最后,他们实际想要雇一名低级的DBA。你或许希望申请这样的职位虽然你也许没有资格。他们可能还是会决定雇佣你。但是提前说明你仍然在摸索阶段并且已经是较低级的DBA水平。不要试图欺骗他们让他们认为你是高级DBA的水平。这只会降低你得到这项工作的机会。

    这些提示将帮助你得到第一份DBA的工作。祝你在寻找工作时有好运气。当你已经找到了第一份DBA工作后,继续下面的部分来学习如何往下走下去。

    我刚得到我的第一份工作!现在该怎样?

    祝贺你!你现在是DBA俱乐部的正式成员了!对于这份梦寐以求的令人激动的职业,你准备好了么?你的工作才刚开始并且你在学习上已经落在后面。你将会发现要成为一名高效的数据库管理员有大量的知识你必须掌握。你的第一年或前两年将花费比以前更多的时间来学习。假如你发现学习知识的数量使你大脑超负荷,那么休息一下,歇口气,然后再回到学习中去。为了帮助你继续走下去,你可以按照下面的方法进行:

    步骤#1: 关系型数据库理论 –这部分我假设你将管理的数据库是一个“关系型”数据库。其他数据库模型也存在,但是关系型模式是近二十年工业上占统治地位的一种数据库模式。假如你的数据库系统是其他的模式,那么学习它的理论。相关数据库理论是十分重要的。它是其他一切的基础。我也看到许多跳到数据库管理职位的人从不想去学习纯粹的关系型数据库理论。不可避免的,在他们的事业中对理论基础的匮乏作为缺点暴露了出来。假如你对关系型数据库理论理解得很好,那么你将非常容易的在任何平台的关系型数据库管理系统(RDBMS)中转变。我使用Oracle数据库,或者IBM的DB2,或者微软的SQL Server是无关紧要的。他们都是关系型数据库系统。他们在最底层都在做着相同的事情。区别在于他们怎样去做相同的事情。纯粹的关系型数据库理论对于较低级的DBA来说并非必需的。但是假如你想要超越低级DBA的水平它就是十分重要的。许多大学的教科书都很好的包含了关系型数据库的理论。其中一本被广泛使用的教科书就是由Elmasri and Navathe编写的数据库系统基础,Bejamin/Cummings Press。

    步骤#2: 彻底的学习查询语言 –数据库都有语言让你能够从数据库中得到数据,把数据放到数据库中,以及修改数据库中的数据。对于关系型数据库而言,这种语言就是结构化查询语言(SQL)。这门语言是你与数据库接触的工具。不能让这个工具成为以后学习的障碍,这一点很重要。在你的测试数据库中练习不同的SQL语句直到他们变成了你的习惯。这方面的一本非常好的书叫做Oracle 9i完全参考(Oracle 9i The Complete Reference)由Loney 和Koch编写,Oracle Press。每一名Oracle DBA都应该在他事业的早期阅读这本书。Oracle 9i参考手册(Oracle 9i SQL Reference manual)是另一个很重要的知识来源。在他们的技术网站TechNet上(http://technet.oracle.com)你可以访问所有的Oracle在线文档。你必须注册一个账号,但是它是免费的。每个都应该在TechNet上有一个账号。

    步骤#3: 开始学习基本的数据库管理工作 –这难道不是你最开始在这里的原因?为什么它在列表的第三位?我们尝试着建造一个知识的金字塔,我强烈的感觉到一个人需要知道关系型数据库理论和SQL,并且在你学习如何进行基本的数据库管理工作时把他们当作工具来使用。这些工作包括启动和关闭数据库,备份和恢复数据库,以及创建/删除/修改数据库对象。对于Oracle数据库管理而言,在市面上有大量的书籍可以给你所期望的一个很好的体会。这本书是Oracle 9i DBA手册(Oracle 9i DBA Handbook by Loney on Oracle Press)。我知道的大多数DBA都在他们事业的早期不只一遍的阅读过这本书。这里,你应该同时阅读和理解Oracle 9i 概念指导,Oracle 9i管理员指导,以及Oracle 9i备份与恢复指导(Oracle 9i Concepts Guide, the Oracle 9i Administrator’s Guide, and the Oracle 9i Backup and Recovery Guide)都来自Oracle文档。

    步骤#4: 阅读,阅读,再阅读 –由于你才刚开始你的DBA职业生涯,因此你正在开始为你的技能奠定基础。这需要一段很长的时间去形成,吸收和领会所有你将学到的知识。毫无疑问的,比你资深的DBA由许多工作要做,因此他们可能不会总是腾出大量时间辅导你的学习。你不得不靠自己学习很多东西。这就是阅读的目的。市面上有许多书籍可以解答许多数据库相关的话题。Oracle Press是Oracle公司的官方出版社,有大量的Oracle相关书籍。同时也有其他的出版社,如Wrox Press 和 O’Reilly Press。你也可以找到Oracle文档来阅读。并且还有许多网站和新闻组。尽可能多的读书使你能够继续下去。还有,不只一遍的阅读它们可以使你吸收你第一次阅读时错过的内容。

    步骤#5: 创建测试案例 –我经常看到初学者问一些很基础的问题,其实假如他们花一些时间来考虑,这些问题都是很容易解答的。毫无疑问的,在你开始学习Oracle的时候你会有许多的问题。看看这些问题你能不能自己回答出来。例如,我又一次被问到能不能向有唯一性约束的列中插入空值。最开始,这看上去也许不是很容易回答的问题。但它却是非常容易去试验的!只需要创建一个简单的表。在其中的一列,假如唯一性约束。尝试着在该列插入一个空值。有效么?你应该能够非常容易的回答出这个问题了。那么,为什么要创建这些案例呢?一个原因是这样做可以提高你解决问题的能力。创建这些案例需要的技能就是解决问题用到的技能。解决问题的技能将会对你的DBA事业有很大的帮助。另一个原因是随着你的事业的发展,你将经常需要创建更复杂的测试案例以便保证数据库和应用程序的成功。在将来,甚至简单的测试案例也可以组成更复杂的数据库和应用程序分解。

    步骤#6: 找一个良师 –一个良师能够为你的DBA生涯(或者其它类似的职业)引领方向。他们能够给你指示,回答问题以及在你的DBA的成长过程中帮助你节约一些时间。但愿这篇文章能够在你事业发展的一段时间内起到良师益友的作用。假如你与一名资深的DBA共同工作,那么那个人应该有责任为你的事业进行有益的指导。你也可以同时选择其他的人指导你。

    步骤#7: 参加本地用户群 –许多跨国家的城市有本地用户群,他们定期聚会讨论数据库相关的话题。假如可能,参加其中一个本地用户群。这将给你一个与他人相互交流的很好的方法。

    我如何能够从一名DBA初学者变为一个具有中级水平的DBA?

    你已经成为DBA一段时间了,你现在希望你的技术水平提高一阶么?下一步该怎么做?首先,往回看前面的部分,确认你已经完成了所有的步骤。彻底理解SQL语言是十分重要的。理解关系型数据库理论和掌握基本的数据库管理任务也是非常重要的。到如今,你应该阅读文档和其他书籍到已经郁闷了。假如没有,那么你还没准备好继续深造,增长你的DBA的技术水平。假如你已经准备好继续了,我已为你的继续深造准备了一些方法。

    步骤#1: 学习操作系统和你的服务器硬件 – 正如我前面所说,数据库存在于操作系统和服务器硬件之上。理解这些组成部分如何工作是很必要的。你应该知道如何与特殊的操作系统相合。你如何删除或者编辑文件?假如你的操作系统是Unix,你应该掌握命令行以及Unix命令如何辅助你工作。对于运行在Windows或其他操作系统上而言也是一样的。你同时需要对服务器的硬件有一定的了解。物理内存和虚拟内存有什么区别?RAID是什么以及不同的级别是如何产生影响的?为什么数据库喜欢更多的物理硬盘而非一个大硬盘卷?你需要知道这些事情以便你能够容易的与系统管理员进行如何配置好你的服务器以便使它能够充分的支持数据库方面的交谈。

    步骤#2: 学习应用程序设计因为它与数据库相关 – 如前面所述,数据库存在于操作系统与数据库应用程序之间。你真的需要这两者。SQL语言是如何帮助创建好的应用程序的?绑定变量是什么并且为什么他们很重要?Tom Kyte 写了一本非常好的书,在Oracle应用程序设计上给出了很好的建议。他的Expert One-on-one Oracle书可在 Wrox Press找到。我强烈推荐阅读此书。他详细的叙述了那些能够生成和破坏Oracle应用程序的东西。你需要知道这些,因为你的应用程序开发人员希望从你这里得到指导和数据库知识。学习任何与应用程序设计有关的知识。也许参加一个关于软件工程,操作系统或数据结构的课程班会有好处。

    步骤#4: 取得认证 – 也许你的工作并不需要,但是取得认证一定对你有益。作为DBA的每一天里,你学到了许多新的和令人激动的事情。也许在你职业生涯的这段时间里,有几天你没学到任何新的东西。但你仍然有很多要学习。成为一名OCP(Oracle Certified Professional) DBA要求你必须已经学到了数据库管理所有方面的基础。我发现在OCP考试的学习过程中,我学到了在我工作中从未接触过的东西。一次我学到了我从未碰到过的一个特殊课题,在后来的日子里我就能够使用那个知识解决问题。假如我从为在OCP考试中学倒它,那么我永远也不会用那种特殊的方法去解决问题。这已经一次次的发生在我的面前。有的人可能会说认证实际上真的不值得。我要说它只会对你有益无害。所以,去取得认证吧!

    步骤#5: 获得一个资源库 – 在前面的部分中,我指出每个DBA都应该在Technet上有个账号。这是你其中一个主要资源。但是同时还有许多其他资源。很多人共享他们的Oracle知识。假如你还没有开始,你应该用网络浏览器去搜索并收集很多Oracle资源。愿意的话,你可以从访问我的网站(http://www.peasland.net)开始。下面是一些Oracle DBA必须了解得网站列表:
    Ask Tom – http://asktom.oracle.com
    Jonathan Lewis web site – http://www.jlcomp.demon.co.uk/
    Ixora (Steve Adams) – http://www.ixora.com.au
    Orapub – http://www.orapub.com
    Metalink (Oracle支持网站) – http://metalink.oracle.com

    还有许多其它的好网站。

    步骤#6: 开始在不同的新闻组和论坛上交流 – 也许你已经发现了他们,但假如现在你还没有那么是时候去开始了。有许多的新闻组和论坛可以回答你的任何Oracle问题。在Oracle群落里还有许多高手愿意和你共享他们的知识。你所要做的就是提问。下面是一个列表包含了可以开始交流的最好的因特网团体:

    Usenet newsgroups – comp.databases.oracle.server 和 comp.databases.oracle.misc 是两个可以交流的非常著名的世界性的新闻组。他们拥有大量的针对Oracle问题的交流卷宗。观看这些组的最好的方法式使用新闻广播员。但是假如你想通过基于web的方式访问,也可以通过Google搜索引擎搜索它。 (http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&group=comp.databases.oracle)
    Quest Pipelines – 当他们在最开始还属于软件提供商RevealNet的时候,被称为the RevealNet Pipelines。现在,Quest购买了RevealNet 并且拥有Pipelines 。因为Pipelines是中等的,所以这些是我最喜欢的。你可以在这里找到Pipelines (http://www.quest-pipelines.com/index.asp)。

    观察别人是如何经历考验和磨难的是一件好事。假如你有问题,可以自由的在群里提出来。假如你要提出问题,通常应该包括一些信息,比如你的Oracle版本和Oracle运行的平台。这些将会得到有很大的差别的答案。假如你忘记了,会有人提醒你!甚至你不用提问也可以从其他人的答案中学到许多知识。我已经记不得多少次我之所以能够解决问题完全是因为我记得其他人在新闻组里问过相同的问题。

    我如何从一名具有中级水平的DBA转变为一名高级DBA?

    好,作为DBA你已经坚持不懈的努力了很长时间。你感到自己已经准备好往前再走一步。成为一名高级DBA需要什么?下面的部分将帮助你走下去。

    步骤#1: 阅读所有的文档 – Oracle文档通常并不是很容易阅读的。无数次,你翻阅文档只是为了要弄清整件事情。假如文档是最好的东西,那么那些站在你的书架里的Oracle书籍就不会有市场。但是文档确实包含了一些无法在任何其他地方找到的信息。例如,你无法找到每一个专门的INIT.ORA参数或V$视图的详细说明。书本上也许会涉及一部分,但是Oracle文档却包含它们所有。我遇到过一个非常厉害的高级DBA,他没有从头至尾的阅读过Oracle文档。这不是偶然的。Oracle文档是必须阅读的。也许到现在为止你已经读过Oracle概念指导十二遍了。但是当Oracle 10i发布了,你还要再次阅读。任何有关10i的新概念将在文档里记录。假如你真的想更上一层,那么,去阅读那些文档。不要逃避它。

    步骤#2: 成为一名专家 – Oracle数据库是一个非常复杂的东西。为了更上一层,你必须精通产品的许多组成部分。以备份与恢复开始。成为一名备份与恢复的专家。故意的破坏数据库然后察看如何恢复它。尝试以任何可能的方式破坏数据库然后查看还有没有可能恢复。你将彻底的理解备份与恢复的概念。在你成为了备份与恢复的专家以后,再去成为其他领域的专家。你会有无穷无尽的题目要去掌握。在你整个职业生涯中都保持如此。但是请记住,无论你有多么专业,在某些领域,某些人会在某些方面知道的比你多。不要带个人情绪。只是尽可能多的从那个人那里学到知识。

    Route #3: 积极参加新闻组,论坛和用户组 – 在前面,我提过为什么不同的新闻组和论坛是学习新知识的很好的地方。现在轮到你进行下一步并且去回答任何你能够回答的问题。你将会惊讶于在这过程中你能学到那么多!

    Route #4: 写白皮书并且展示它们 – 这与前面提到的方法类似。首先,共享你拥有的知识是很重要的。假如你的职业生涯已经走到这一步,那么从某种意义上讲,是离不开他人的贡献的。所以,现在是你为他人奉献的时候了。第二,当你企图共享你的信息的时候会有令人惊异的事情发生。在你要用清楚的,简练的语言表述问题以便其他人能够使用时,那些信息在你的头脑里经过了一个令人瞠目的过程。这个过程使你巩固了知识,这是无法通过其它方法进行的。所以在白皮书中共享那些信息,讨论会,以及新闻组和论坛都是你学习和使你的能力更上一层的非常好的方法。顺着这条路,你应该作两件事。第一,认识到你将会犯错误。其他人将会很高兴的指出那些错误,有时在某种意义上那并不是很好。不要企图掩藏你的错误。承认它们并从它们那里学习。第二,学会说你不知道答案而不是企图以欺骗的方式通过。人们早晚会知道你在企图蒙蔽他们。简单的告诉他们现在你对答案并不肯定,但你会在查到答案后回来告诉他们。假如你时刻谨记这两件事,你就不会违背你的诚实而且你将成长为一名职业的IT人。

    步骤#5: 成为解决Oracle问题的专家– 高级DBA通常都是被看作是解决复杂的Oracle问题的人。你将会用到你所有的技术来解决许多问题,这些技术都是你的职业生涯中积累下来的。我前面提到的任何事都将会在解决问题的过程中用到;文档,书籍,新闻组,测试案例,和其它DBA都将辅助你解决问题。

    步骤#6: 成为性能调优的专家– 高级DBA通常都是被看作是调整数据库和应用程序性能的人。假如你是高级DBA但是你却不能分析性能瓶颈,那么你的公司将会到别处寻找这些服务。

    步骤#7: 成为承载能力计划的专家– 高级DBA通常都是被看作是根据数据增长量和交易增长来计划数据库承载能力的人。高级DBA需要在影响应用程序性能以前发现系统瓶颈。例如,DBA应该知道在数据库将可用的磁盘空间用完以前预置更多的磁盘空间。不密切关注承载能力计划将会导致生产数据库宕机。

    步骤#8: 密切关注新的技术– 高级DBA应该对IT界的关数据库技术的未来有好的建议。有什么可用的技术可以帮助数据库?例如,学习存储领域网的优缺点以及如何把它们应用到数据库系统。有什么技术在不远的将来可以用,哪些能够帮助我们?例如,写这篇文章的时候,linux操作系统正在变得越来越流行。Lunix会给你的数据库操作系统平台带来些什么?它能为你的公司工作么?

    结论

    从获得第一份工作,到从一名初级的DBA成长成一名高级DBA,我希望这篇文章在如何度过你的职业生涯的各个阶段方面给了你一些建议。无论你现在处在你的DBA职业生涯的哪一阶段都可以用到这篇文章。






    oracle的入门心得


    oracle的体系太庞大了,对于初学者来说,难免会有些无从下手的感觉,什么都想学,结果什么都学不好,所以把学习经验共享一下,希望让刚刚入门的人对oracle有一个总体的认识,少走一些弯路。

    一、定位
        oracle分两大块,一块是开发,一块是管理。
       开发主要是写写存储过程、触发器什么的,还有就是用Oracle的Develop工具做form。有点类似于程序员,需要有较强的逻辑思维和创造能力,个人觉得会比较辛苦,是青春饭J;
       管理则需要对oracle数据库的原理有深刻的认识,有全局操纵的能力和紧密的思维,责任较大,因为一个小的失误就会down掉整个数据库,相对前者来说,后者更看重经验。

       因为数据库管理的责任重大,很少公司愿意请一个刚刚接触oracle的人去管理数据库。对于刚刚毕业的年轻人来说,可以先选择做开发,有一定经验后转型,去做数据库的管理。当然,这个还是要看人个的实际情况来定。
    二、学习方法
    我的方法很简单,就是:看书、思考、写笔记、做实验、再思考、再写笔记

    看完理论的东西,自己静下心来想想,多问自己几个为什么,然后把所学和所想的知识点做个笔记;在想不通或有疑问的时候,就做做实验,想想怎么会这样,同样的,把实验的结果记下来。思考和做实验是为了深入的了解这个知识点。而做笔记的过程,也是理清自己思路的过程。

         学习的过程是使一个问题由模糊到清晰,再由清晰到模糊的过程。而每次的改变都代表着你又学到了一个新的知识点。

        学习的过程也是从点到线,从线到网,从网到面的过程。当点变成线的时候,你会有总豁然开朗的感觉。当网到面的时候,你就是高手了

        很多网友,特别是初学的人,一碰到问题就拿到论坛上来问,在问前,你有没有查过书,自己有没有研究过,有没有搜索一下论坛?这就叫思维惰性。由别人来回答你的问题,会让你在短时间内不费劲地弄懂这个知识点,然而通过自己的努力去研究它,不但会更深入的了解这个知识点,更重要的是在研究的过程会提高你解决问题和分析问题的能力。总的来说,没有钻研的学习态度,不管学什么东西,都不会成功的。
           
        当然,初学的人很多时候是因为遇到问题时,无从下手,也不知道去哪里找资料,才会到论坛上提问题的。但我认为,在提问的时候,是不是可以问别人是如何分析这个问题?从哪里可以找到相关的资料?而不是这个问题的答案是什么?授人以鱼不如授人以渔。

       下面我讲下我处理问题的过程

       首先要知道oracle的官方网站:www.oracle.com 这里有oracle的各种版本的数据库、应用工具和权威的官方文档。其次,还要知道http://metalink.oracle.com/ 这里是买了oracle服务或是oracle的合作伙伴才可以进去的,里面有很多权威的解决方案和补丁。然后就是一些著名网站:asktom.oracle.com www.orafaq.net, www.dbazine.com。这里有很多经验之谈。

          遇到问题了。如果是概念上的问题,第一时间可以找tahiti.oracle.com,这里会给你最详细的解释。如果在运行的过程中出了什么错误。可以去metalink看看。如果是想知道事务的处理的经验之谈。可以去asktom。当然。这里只是相对而言。

    三、oracle的体系
    oracle的体系很庞大,要学习它,首先要了解oracle的框架。在这里,简要的讲一下oracle的架构,让初学者对oracle有一个整体的认识。

    1、物理结构(由控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件组成)
    控制文件:包含维护和验证数据库完整性的必要信息、例如,控制文件用于识别数据文件和重做日志文件,一个数据库至少需要一个控制文件
    数据文件:存储数据的文件
    重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复。一个数据库至少需要两个重做日志文件
    参数文件:定义Oracle 例程的特性,例如它包含调整SGA 中一些内存结构大小的参数
    归档文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。
    密码文件:认证哪些用户有权限启动和关闭Oracle例程

    2、逻辑结构(表空间、段、区、块)
    表空间:是数据库中的基本逻辑结构,一系列数据文件的集合。
    段:是对象在数据库中占用的空间
    区:是为数据一次性预留的一个较大的存储空间
    块:ORACLE最基本的存储单位,在建立数据库的时候指定

    3、内存分配(SGA和PGA)
    SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息, 它是在Oracle 服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。
    PGA:包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA 正相反PGA 是只被一个进程使用的区域,PGA 在创建进程时分配在终止进程时回收

    4、后台进程(数据写进程、日志写进程、系统监控、进程监控、检查点进程、归档进程、服务进程、用户进程)
    数据写进程:负责将更改的数据从数据库缓冲区高速缓存写入数据文件
    日志写进程:将重做日志缓冲区中的更改写入在线重做日志文件
    系统监控:检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复
    进程监控:负责在一个Oracle 进程失败时清理资源
    检查点进程:负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。
    归档进程:在每次日志切换时把已满的日志组进行备份或归档
    服务进程:用户进程服务。
    用户进程:在客户端,负责将用户的SQL 语句传递给服务进程,并从服务器段拿回查询数据。

    5、oracle例程:Oracle 例程由SGA 内存结构和用于管理数据库的后台进程组成。例程一次只能打开和使用一个数据库。

    6、SCN(System Change Number):系统改变号,一个由系统内部维护的序列号。当系统需要更新的时候自动增加,他是系统中维持数据的一致性和顺序恢复的重要标志。
    四、深入学习


    管理:可以考OCP证书,对oracle先有一个系统的学习,然后看Oracle Concepts、oracle online document,对oracle的原理会有更深入的了解,同时可以开始进行一些专题的研究如:RMAN、RAS、STATSPACT、DATAGUARD、TUNING、BACKUP&RECOVER等等。

    开发:对于想做Oracle开发的,在了解完Oracle基本的体系结构之后,可以重点关注PL/SQL及Oracle的开发工具这一部分。 PL/SQL主要是包括怎么写SQL语句,怎么使用Oracle本身的函数,怎么写存储过程、存储函数、触发器等。 Oracle的开发工具主要就是Oracle自己的Developer Suite(Oracle Forms Developer and Reports Developer这些),学会如何熟练使用这些工具。

    五、开发经验及常见问题


    常见Oracle安装问题说明 [当前帖子数:5]
    1.问题集锦一
    2.Oracle9i在RedhatLinux8.0中的安装详细步骤
    3.问题集锦二
    4.如何配置和使用iSQL*Plus
    5.Oracle9i中Data Guard的新特性以及配置使用

    常见Oracle入门问题说明 [当前帖子数:5]
    1.关于Linux下DBSTART和DBSHUT脚本中需要修改的地方
    2.如何将EXP出来的数据IMP进不同的表空间
    3.如果系统中安装了多个数据库实例,如何修改默认SID
    4.Oracle9i初始化参数注解
    5.关于Oracle数据库的升级(Migration)

    常见Oracle开发问题说明 [当前帖子数:0]

    Oracle技巧与提示 [当前帖子数:3]
    1.如何修改数据库的字符集
    2.如何查看Control File中保存的内容
    3.Oracle9i(Version 9.2)SYS_CONTEXT函数的用法以及同USERENV函数的比较
    六、共享


    介绍几本oracle入门的好书

    oracle官方文档:《concept》上面讲了oracle的体系和概念,很适合初学者看。

    OCP的教学用书,也就是STUDY GUIDE(SG)。在我的FTP上有down。

    Oracle8i 备份恢复手册
    Oracle8高级管理与优化
    Oracle8i PLSQL程序设计
    Oracle8数据库管理员手册
    以上书本都是机械工业出版社出版。



    介绍几个网站
    http://tahiti.oracle.com      oracle的官方文档
    http://metalink.oracle.com/   oracle的技术支持网站。需要购买Oracle服务才能有一个帐号,才能登陆,有大量的Knowledge Base,大量问题解决经验。
    http://www.oracle.com   oracle的官方网站,可以在这里down oracle的软件、官方文档和获得最新的消息
    http://www.dbazine.com/    Oracle的杂志
    http://asktom.oracle.com   
    http://www.orafaq.net/ 
    http://www.ixora.com.au/
    http://www.oracle-base.com
    http://www.dba-oracle.com/oracle_links.htm




    www.boobooke.com 最新网站
    www.boobooke.com/index_old.php 这上面视频多又全
    http://www.boobooke.com/bbs/viewthread.php?tid=1857&extra=page%3D1
    小布老师Oracle 9i DBA Fundamentals I的系列视频下载地址
    在线播放地址:
    第一讲:  
    http://www.boobooke.com/v/bbk1109
    第二讲:  
    http://www.boobooke.com/v/bbk1110
    第三讲:  
    http://www.boobooke.com/v/bbk1112
    第四讲:  
    http://www.boobooke.com/v/bbk1114
    第五讲:  http://www.boobooke.com/v/bbk1115
    第六讲:  http://www.boobooke.com/v/bbk1148
    第七讲:  http://www.boobooke.com/v/bbk1149
    第八讲:  http://www.boobooke.com/v/bbk1150
    第九讲:  http://www.boobooke.com/v/bbk1151
    第十讲:  http://www.boobooke.com/v/bbk1152
    第十一讲: http://www.boobooke.com/v/bbk1153
    第十二讲: http://www.boobooke.com/v/bbk1154
    第十三讲: http://www.boobooke.com/v/bbk1161
    第十四讲: http://www.boobooke.com/v/bbk1162
    第十五讲: http://www.boobooke.com/v/bbk1163
    第十六讲: http://www.boobooke.com/v/bbk1164
    第十七讲: http://www.boobooke.com/v/bbk1165
    第十八讲: http://www.boobooke.com/v/bbk1166
    第十九讲: http://www.boobooke.com/v/bbk1167
    第二十讲: http://www.boobooke.com/v/bbk1168
    第二十一讲: http://www.boobooke.com/v/bbk1169
    第二十二讲: http://www.boobooke.com/v/bbk1170
    第二十三讲: http://www.boobooke.com/v/bbk1171
    第二十四讲: http://www.boobooke.com/v/bbk1179
    第二十五讲: http://www.boobooke.com/v/bbk1180

    下载地址:
    第一讲:  http://www.boobooke.com/v/bbk1109.zip
    第二讲:  http://www.boobooke.com/v/bbk1110.zip
    第三讲:  http://www.boobooke.com/v/bbk1112.zip
    第四讲:  http://www.boobooke.com/v/bbk1114.zip
    第五讲:  http://www.boobooke.com/v/bbk1115.zip
    第六讲:  http://www.boobooke.com/v/bbk1148.zip
    第七讲:  http://www.boobooke.com/v/bbk1149.zip
    第八讲:  http://www.boobooke.com/v/bbk1150.zip
    第九讲:  http://www.boobooke.com/v/bbk1151.zip
    第十讲:  http://www.boobooke.com/v/bbk1152.zip
    第十一讲: http://www.boobooke.com/v/bbk1153.zip
    第十二讲: http://www.boobooke.com/v/bbk1154.zip
    第十三讲: http://www.boobooke.com/v/bbk1161.zip
    第十四讲: http://www.boobooke.com/v/bbk1162.zip
    第十五讲: http://www.boobooke.com/v/bbk1163.zip
    第十六讲: http://www.boobooke.com/v/bbk1164.zip
    第十七讲: http://www.boobooke.com/v/bbk1165.zip
    第十八讲: http://www.boobooke.com/v/bbk1166.zip
    第十九讲: http://www.boobooke.com/v/bbk1167.zip
    第二十讲: http://www.boobooke.com/v/bbk1168.zip
    第二十一讲: http://www.boobooke.com/v/bbk1169.zip
    第二十二讲: http://www.boobooke.com/v/bbk1170.zip
    第二十三讲: http://www.boobooke.com/v/bbk1171.zip
    第二十四讲: http://www.boobooke.com/v/bbk1179.zip
    第二十五讲: http://www.boobooke.com/v/bbk1180.zip

    .......


     

     

  • Delphi中用ADO连接数据库

    2009-05-14 19:52:12


         此文适合Delphi新手阅读,特别是连接数据库方面还一懂半懂甚至根本不懂的新手;

         --------------------------但总体显得有点乱-------------------------


         本文章以Delphi 7和SQL Server 2000为例,控件名均为系统默认,如Unit1,DataModule1,Edit1,ADOCommand1,ADODataSet1,ADOConnection1,DataSource1等等。



         初初接触Delphi时,想要连接数据库,但面对一大堆数据库类控件,无所适从,既不知该用哪个/些控件,也不知具体怎么连接数据库!

         经过一段时间的“摸爬滚打”,算是初步摸索到了常用的连接方法。其实主要是用ADO连接,而ADO也是最常用的连接技术之一。

         以下几个控件在连接数据库时是用得比较多的,并且通常的的连接架构是

    ————————————————————
                 数据库
                 ↑
             ADOConnection
             ↑       ↑
    ADOCommand     ADODataSet
                       ↑
                   DataSource
                       ↑
                     DBGrid
    ————————————————————

    或者

    ————————————————————
             数   据   库
             ↑       ↑
       ADOCommand     ADODataSet
                         ↑
                     DataSource
                         ↑
                       DBGrid
    ————————————————————

         也就是说,ADOCommand和ADODataSet既可以通过ADOConnection连接数据库,也可以不用,分别直接连接数据库,因为这三个控件都有一个共同的ConnectionString属性。

         第一种比第二种更节省资源,因为当要使用多个ADOCommand、ADODataSet等控件时,使用第一种连接架构只需将所有这些控件的Connection属性设置(选择)为同一个ADOConnection,这样就只有一个ADOConnection控件与数据库打交道,毕竟连接数据库是一种比较大开销的资源,尽量节省可以提高运行速度。

         ConnectionString属性的设置很简单。选中要设置这一属性的控件后,再点击其ConnectionString属性框。如果熟悉的话可以直接在这里输入,但由于这一属性值比较长,所以通常的做法是构建,并且步骤也不多,一目了然:

         ·点击属性框后面的“...”小按钮,出现“连接源”对话框,选中“使用连接字符串”,再点击“构建...”按钮;
         ·首先选择“提供程序”。以连接SQL Server 2000 数据库为例,提供程序选择“Microsoft OLE DB Provider for SQL Server”;
         ·点击下一步;选择或输入服务器名框中,可以输入计算机名,也可使用计算机的IP地址,特别地,如果是单机使用的,可输入一个便于移植使用的IP地址,即指向本机的IP地址“127.0.0.1”;
         ·登录服务器信息,如果SQL Server 是集成登录的,选中“使用Windows NT 集成安全设置(W)”,然而多数情况下是选中“使用指定的用户名和密码”,并分别输入登录数据库的用户名和密码,通常是sa用户,而且如果是空密码的,可以选中下面的“空白密码”,至于“允许保存密码”,选不选就看个人喜好了;
         ·“在服务器上选择数据库”,选中所要连接的数据库;
         ·最后点击“测试连接”,通常会弹出“测试成功”的提示,确定即可。当然,前提是SQL 服务管理器已启动。

         ADOCommand适合执行无返回结果的SQL语句,如插入、删除、更新等;ADODataSet则用于执行有返回结果的SQL语句,如查询;两都都有一个共同的CommandText属性,用以设置其所要执行的SQL语句。

         通常所要执行的SQL语句不是固定不变的,而是在程序运行时根据用户的操作动态生成的。

         对于ADODataSet,可双击相应按钮(如“提交查询”),在其onClick事件中相应的SQL语句赋值语句,再将ADODataSet的CommandText属性设置为该字符串,最后改变ADODataSet的Active属性即可,如:

         sql:='select * from ....';       //其中sql为已定义的String类型变量
         ADODataSet1.Active:=false;
         ADODataSet1.CommandText:=sql;
         ADODataSet1.Active:=true;

         执行查询操作后,判断查询结果是否为空,如果非空,并且可以确定查询结果是唯一,则可分别直接引用查询结果的各个字段:

    if (ADODataset1.FieldValues['字段名1']<>NULL) then
         //此处的“字段名1”为查询结果中的字段名,即数据库里相应表的字段名
    begin
       Edit1.Text:=ADODataset1.FieldValues['字段名1'];
             //可引用查询结果,分别为各Edit控件的Text属性赋值,使之显示
       Edit2.Text:=ADODataset1.FieldValues['字段名2'];
       //等等
    end

         而如果查询结果不唯一,也可逐一引用各字段,不过需要稍加修改。而此时最常用的是向下拉框Combobox控件中添加项目,并且通常放在窗体的onShow事件中执行:

    ______________________________________________________________________________

    unit Unit1;       //当前窗体文件名

    interface

    uses
         //.....


    type
         //……

         //...

    procedure TForm1.FormShow(Sender: TObject);     //窗体的显示事件
    var
         i,j:integer;                         //for循环变量只能是局部变量
         sql,item:String                           //字符串型
    begin
    //...

         sql:='select 字段1 from ....';       //通常是查询单个字段
         ADODataSet1.Active:=false;
         ADODataSet1.CommandText:=sql;
         ADODataSet1.Active:=true;

         j:=ADODataSet1.RecordCount;           //j和后面的i定义为整形变量
         ADODataSet1.First;                   //使指针指向(移动到)第一条记录
         Combobox1.Items.Clear;               //下拉框

         Combobox1.Items.Add('请选择...');       //添加一个提示项到下拉框项目中
         for i:=1 to j do                       //j为查询结果的记录数
         begin
           item:=ADODataSet1.FieldValues['字段1'];
                                               //逐一引用当前记录的指定字段值
           Combobox1.Items.Add(item);           //添加到下拉框项目中
           ADODataSet1.Next;                     //指针移动,指向下一条记录
         end;
         Combobox1.Text:='请选择...';             //显示提示值
         //...

    end;

    //...

    end.
    ______________________________________________________________________________

         这样,在程序运行时打这个Form1窗体,该Combobox1下拉框的显示值就为“请选择...”,点击下拉框,其中就会有从数据库中查询出来的各个项目显示出来,以供用户选择。毕竟选择比输入快,而且如果输入的话,还要用户记住其内容,非常不方便。


         至于查询有多个返回结果并且查询多个字段的,可以用DBGrid控件以表格形式显示全部查询结果,不过此时需要添加一个DataSource控件,并且将将DBGrid的DataSource属性设置为该DataSource控件,再将该DataSource的DataSet属性设置为相应的ADODataSet控件,如上面的连接架构所示。

         对于ADOCommand,稍稍有点不同。因为它是通过Execute方法执行SQL语句的:

    begin
         sql2:='insert into 表1 ......';     
                                         //可用于执行insert into,update,delete语句
         ADOCommand1.Execute;
         showmessage('操作成功。');       //操作完成后给出提示
    end

       如果要使用的ADOCommand、ADODataSet等控件不多时,可以不用ADOConnection控件,直接使用ADODataSet和(或)ADOCommand控件,只需分别设置其ConnectionString属性;

         若要使用多个ADOCommand、ADODataSet等控件时,有一个办法可以节省使用控件的数量:

         建立一个DataModule窗体,假设窗体名为DataModule1,并将ADOConnection、ADOCommand、ADODataSet、DataSource等数据库控件建立在该DataModule1窗体中,然后在所有需要使用这些控件连接数据库的窗体中使用该DataModule1窗体。如果该DataModule1窗体名保存为Unit2文件,则在需要使用这些控件的Uses列表中加入Unit2即可,但在引用时需要在控件名前加上窗体名,如:

    unit Unit3;       //当前窗体文件名

    interface

    uses
         //.....
         Unit2;       //引用DataModule1窗体的窗体文件名Unit2

    type
         //……

         DataModule1.ADODataSet1.Active:=false;
         DataModule1.ADODataSet1.CommandText:=sql;
         DataModule1.ADODataSet1.Active:=true;
         //...
         Edit1.Text:=DataModule1.ADODataset1.FieldValues['字段名1'];
         //...
         DataModule1.ADOCommand1.Execute;

         也就是:如果所使用的控件不是在当前窗体的,而是通过使用窗体引用的,就需要在控件名前加上窗体名。

         或者可以这样省略窗体名:

         with DataModule1 do
           begin
             ADODataSet1.Active:=false;
             ADODataSet1.CommandText:=sql;
             ADODataSet1.Active:=true;
             //...
           end

    1. 返回当前程序执行路径(EXE程序)   = ExtractFilePath(ParamStr(0))

    2. 从ADOQuery里面取出数据

           while not Query1.eof do
            begin
                Query1.fieldbyname('字段名').asString;
               Query1.Next;
           End;

    3. 快速插入数据
    ADODataSet1: TADODataSet;

       ADODataSet1 := TADODataSet.Create(nil);
       ADODataSet1.Connection := ADOConnection1;
       ADODataSet1.CommandText := 'select * from OverQueue where id < 0';
       ADODataSet1.Open;
       ADODataSet1.Insert;
       ADODataSet1.FieldValues['service_id'] := 1;
       ADODataSet1.FieldValues['server_id'] := 1;
       ADODataSet1.FieldValues['remote']    := 'remote';
       ADODataSet1.FieldValues['local']     := 'rd.Local';
       ADODataSet1.FieldValues['size']      := '100';
       ADODataSet1.FieldValues['wtime']     := '2007-2-2 10:10:10';
       ADODataSet1.FieldValues['action']    := 0;
       ADODataSet1.FieldValues['level']     := 1;
       ADODataSet1.FieldValues['status']    := 2;
       ADODataSet1.FieldValues['end_time'] := TDateTime(now);
       ADODataSet1.FieldValues['remark']    := '';
       ADODataSet1.FieldValues['key']       := 'abcde';
       ADODataSet1.Post;
       ADODataSet1.Close;
       ADODataSet1.Free;


  • MySQL5在Windows下的免安装配置

    2009-04-17 16:06:28

    1、软件的下载

      到mysql的官方网站下载MySQL的解压包,如mysql-noinstall-5.0.51b-win32.zip

      然后将其解压到你希望数据库所在的某个位置,如C:\

      这样在C:盘下面就有了C:\mysql-5.0.51b-win32这样的一个目录,里面就是MySQL数据库的全部

    内容。

    2、配置

      首先我们来看MySQL的根目录,里面有多个文件名如my-****.ini形式的文件,这就是MySQL配置

    的样例文件,你可以选取其中一个,将其名字改为my.ini,MySQL启动的时候就是读取这个my.ini文

    件来决定数据库的各项参数。

      在my.ini文件中需要进行配置的主要是两个方面,一个是客户端,一个是服务器端。

      * 客户端配置

       # CLIENT SECTION
    #-----------------------------------------------------
    [client]
    port = 3306

    [mysql]
    default-character-set = gbk

      需要配置的主要是两项,一个是客户端端口,一个是默认的字符集(gbk就是设置成了中文),这

    里端口选用默认的3306,字符集可以根据需要修改为UTF-8或GBK。


      * 服务器端配置


    #SERVER SECTION
    #-----------------------------------------------------
    [mysqld]
    port = 3306

    basedir = "C:/mysql-5.0.51b-win32"

    datadir = "C:/mysql-5.0.51b-win32/Data"

    Server="c:/mysql-5.0.51b-win32/bin/mysqld-nt.exe"

    default-character-set = gbk

    default-storage-engine = INNODB

    max_connections = 100

    max_allowed_packet = 16M

    这里主要的是端口port,数据库安装目录(也就是我们解压的目录)basedir,数据库中数据

    的存储路径(也就是你将来建立的Database和Table存放的位置)datadir。

    其次就是字符集的设置,最大连接数的设置等,实际的设置项要根据开发与使用的需要,参

    考解压目录中的几个样例文件进行取舍配置。


    3、启动Mysql数据库

      * 可以在Windows环境变量的path中先加入C:\mysql-5.0.51b-win32\bin这项,这样我们就可以

    在命令行中直接使用mysql的各项命令了

      * 进入命令行窗口,运行c:\mysqld-nt,这是查看Windows任务管理器,发现进程中多出来一个

    mysqld-nt.exe,这说明数据库已经成功的启动的了。

      * 此外,我们可以把数据库注册成一个服务,随着系统的启动而启动,具体命令如下:

        c:\mysqld-nt -install

       运行上面的命令后,就会在系统服务中注册了一个名字为MySQL,启动来性为Automatic的服务

    ,这个服务默认情况下是自动启动的。

       可以通过命令行的防止停止或启动,如:

        c:\net start MySQL启动)
        c:\net stop MySQL(停止)
        c:\mysqld-nt --remove MySQL(卸载服务)

    4、使用MySQL数据库

      * 由于我们在环境变量的path中加入了MySQL安装目录下的bin这项,所以可以直接使用MySQL命

    令。

      * 配置好上面信息并启动MySQL以后,默认的用户名root,密码为空,所以我们可以使用一下命

    令登陆数据库:
      
       c:\mysql -uroot -hlocalhost

       回车以后会看到如下命令行状态:

       mysql>

       这说明已经成功登陆了MySQL数据库。

       如果想为root用户加上密码,可以退出数据库mysql>quit,然后使用如下命令设置root用户的

    密码:

       c:\mysqladmin -uroot password 123456

       这样就将root用户的密码修改为123456了,再次登陆数据库是就要用如下代码:

       c:\mysql -uroot -p123456 -hlocalhost

       至此,MySQL5数据库的配置就完成了,可以通过客户端或是程序来使用这个数据库了。

    5、总结

      MySQL提供了Install和NotInstall两种文件包的下载和安装方式,Install方式使用起来更为直

    观和方便,而notInstall方式则能让你更加的了解MySQL数据库基本配置内容,所以各有利弊。从个

    人角度来看,还是比较推荐notIntall的方式来使用Mhysql数据库,这样可以为在不同的平台下使用

    MySQL奠定一个良好的基础。


    下面是一个基本的配置文件内容,文件名为my.ini
    ######################################################
    # MySQL Server Instance Configuration File
    ######################################################


    # CLIENT SECTION
    #-----------------------------------------------------
    [client]
    port = 3306

    [mysql]
    default-character-set = gbk

    #SERVER SECTION
    #-----------------------------------------------------
    [mysqld]
    # The TCP/IP Port the MySQL Server will listen on
    port = 3306

    #Path to installation directory
    basedir = "C:/mysql-5.0.51b-win32"

    #Path to the database root
    datadir = "C:/mysql-5.0.51b-win32/Data"

    # The default character set that will be used when a new schema or table is
    # created and no character set is defined
    default-character-set = gbk

    # The default storage engine that will be used when create new tables when
    default-storage-engine = INNODB

    # The maximum amount of concurrent sessions the MySQL server will
    # allow. One of these connections will be reserved for a user with
    # SUPER privileges to allow the administrator to login even if the
    # connection limit has been reached.
    max_connections = 100

    max_allowed_packet = 16M

    ################################# boneguan

    apache 免安装相对简单很多

    把安装过的安装目录保留
    以后不用在安装了 直接bin/httpd.exe -k install -n servicename(apache2如果是apache2系列的..)
    mysql其实也同样可以这样做的.    当然jdk环境变量还是需要配置的.
     
     
     
     
     
     
     
    mysql 5.1 noinstall手工配置方法
    2008-09-04 17:20

    1、配置Option File
       使用mysql install进行安装的mysql5.1会自动生成配置文件"my.ini"或"my.conf",采用.zip解压完成安装的mysql 5.1需要自己配置这个文件
       在mysql5.1的根解压缩目录下会提供配置文件my-huge.ini,my-innodb-heavy-4Gini,my-large.ini,my-medium.ini,my-small.ini配置文件。选用其中之一作为my.ini文件的模板文件,创建my.ini文件,在该文件中指定你的mysql 5.1的安装目录,例如:你的mysql 5.1安装在"D:\mysql"目录下,则在my.ini文件中添加下列配置信息:
        [mysqld]
    # set basedir to your installation path
    basedir=D:/mysql
    # set datadir to the location of your data directory
    datadir=D:/mydata/data
    2、选择server运行type
       mysql5.1 server的启动支持以下几种方式:
       mysqld-debug:支持InnoDB and BDB tables,用于debug方式,会自动检查内存使用状况
       mysqld:支持InnoDB tables.
       mysqld-nt: 支持Windows NT, 2000, and XP系统,并支持named pipes.
       mysqld-max:支持InnoDB and BDB tables.
       mysqld-max-nt:支持InnoDB and BDB tables,并支持 named pipes
       mysqld-nt和mysqld-max-nt支持“named pipes”,但是缺省系统使用TCP/IP方式,named pipes方式处理起来比较慢
      
       一般系统采用mysqld的server type
      
    3、启动服务
       你可以在命令行输入mysql的启动命令:
       %YOUR_MYSQL_PATH%\bin\mysqld
       使用"--console"可以在后台管理端看到系统运行的相关情况
      
       停止服务
       %YOUR_MYSQL_PATH%\bin\mysqladmin -u root shutdown
      
       可以将“%YOUR_MYSQL_PATH%\bin”放入你的环境变量“path”中,这样可以直接直接运行mysql的命令
    4、将mysql作为系统的services启动
       在windows系统,建议将mysql启动为系统服务,这样系统启动关闭的时候自动启动关闭mysql
       以下步骤将mysql作为系统的services
       mysqld --install MySQL --defaults-file=C:\my-opts.cnf
       其中“MySQL”作为系统服务的名字
       如果不提供“--defaults-file”参数,则系统采用mysql缺省的配置文件进行服务配置,也可以使用该参数配置系统服务
      
       使用mysql services运行方式的时候,在console不能看到系统的出错信息。这些错误信息可以在“%YOUR_MYSQL_PATH\data”目录下找到,文件的后缀是“.err”
      
       当mysql作为系统的services使用时,可以使用下面的命令启动和停止mysql服务:
       启动:net start mysql
       停止:net stop mysql
      
       你可以使用下面的命令,将mysql services安装为一个手动启动的服务:
       mysqld --install-manual
      
       去除mysql services,先使用“net stop mysql”停止服务,然后使用命令“mysqld --remove”去除服务
    5、测试mysql的安装
       可以使用下面的命令检查mysql的安装情况:
       mysqlshow
       mysqlshow -u root mysql
       mysqladmin -u root version status proc
       mysql -u root test

     
     
     
    查看文章
     
    关于MySQL的1067错误解决方法
    2008-06-03 21:15

    原文:http://aspgood.blueidea.com/archives/2007/4997.shtml

    内容:
    *************
    1

    安装MYSQL后更改了ROOT的密码后用
    net startmysql
    启动时我就遇到了这样的问题.使用以下命令后
    c:\mysql\bin\mysqladmin-u root -p shutdown
    再net start mysql就没有这个错误提示了!


    *************
    2
    MySQL的1067错误


    Q:我的Mysql碰到了 1067 错误

    错误信息为:
    A system error has occurred.
    System error 1067 has occurred.
    The process terminated unexpectedly.

    A:在我的机上的解决办法是:
    修改%windir%\my.ini,增加
    [mysqld]
    #设置basedir指向mysql的安装路径
    basedir=D:\Program\Tools\mysql
    datadir=D:\Program\Tools\mysql\data


    *************
    3
    已经弄好了!!!
    好像是这样……
    mysql_install_db脚本只是在初次安装时才需要运行一次,之后就不用再运行了,不知道是不是这么回事.我把mysql.server拷贝至/etc/rc.d/init.d/中,运行chkconfig mysql.server,至此mysql服务器每次开机自动启动,只要设置好PATH,在命令行上输入mysql就一切搞定!
    看来摸索的过程实在是痛苦啊,这已经折磨我好几天了……

    *************
    4

    问:我的Mysql碰到了 1067 错误

    错误信息为:

    A system error has occurred.
    System error 1067 has occurred.
    The process terminated unexpectedly.

    答:
    解决办法:

    1.检查你的Mysql目录有没有给系统的System用户权限。
    2.删除掉你的 %WINDOWS%/my.ini 文件。
    3.检查你的 c:/my.cnf 文件配置是否正确。


    *************
    5

    【☆☆☆ MySql概要说明 ☆☆☆】
    MySql的默认安装目录是c:mysql,安装结束后没有任何提示信息说安装结束,请点Finish按钮之类的话,直接就退出了。如果需要安装到其他目录,建议先安装到c:mysql,然后再整个目录move到自己希望的地方,例如移动到d:mysql 之后,需要编辑 d:mysqlmy-example.cnf (*.cnf的文件在Windows 2000中会被注册成为 SpeedDial文件,在资源管理器中无法操作,要用命令行来启动notepad编辑,例如运行notepadd:mysqlmy-example.cnf ,但是这个文件是UNIX系统下的文本文件格式,在notepad中不能正确换行,可以用write打开编辑,
    或者用write打开后保存一次,再用notepad就可以编辑了。)找到basedir一行,去掉前面的“#”号注释,将后面的路径改为移动后的目录(目录分隔符要用斜线而不是反斜线),然后另存为:c:my.cnf
    用服务方式启动的MySql如果用 net stop mysql 来停止,会得到一条 出错消息,例如:
    C:>net stop mysql
    MySql 服务正在停止.
    系统出错。
    系统发生 1067 错误。
    进程意外终止。
    MySql 服务已成功停止。
    这没有关系,MySql确实已经停止了。但是假如不希望看到任何出错消息
    的话,可以用以下的命令来停止:
    C:>mysqlbinmysqladmin -u root shutdown
    如果没有任何提示信息,说明MySql已经成功停止了。
    需要说明的是MySql虽然号称安装简单,易于使用,但是这毕竟是基于SQL的数据库管理系统,所以如果不是对SQL十分精通的话恐怕也不能拿它来做什么

    **************
    6

    mysql服务无法启动的解决方法
    mysql服务无法启动

    我的操作系统是 win xp
    无论安装何版本的mysql,在管理工具的服务中启动mysql服务时都会在中途报错
    内容为:在 本地计算机 无法启动mysql服务 错误1067:进程意外中止

    经过多方求教,得解决方法如下

    查找系统(后来验证应该为windows目录)目录下的my.ini文件,编辑内容(如果没有该文件,则新建一个),至少包含basedir,datadir这两个基本的配置。
    [mysqld]
    # set basedir to installation path, e.g., c:/mysql
    # 设置为MYSQL的安装目录
    basedir=D:/www/WebServer/MySQL
    # set datadir to location of data directory,
    # e.g., c:/mysql/data or d:/mydata/data
    # 设置为MYSQL的数据目录
    datadir=D:/www/WebServer/MySQL/data

    另外,要注意
    [WinMySQLadmin]
    Server=D:/www/WebServer/MySQL/bin/mysqld-nt.exe
    user=root
    password=xxxxxxxx
    #以上是设置WinMySQLadmin的配置
    [Client]
    user=root
    password=xxxxxxxx

    hehe~ 解决了


    **************
    7
    刚刚弄好Mysql 『关键字 1067错误』
    比较郁闷,竟然没有想到安装个Mysql也会出错,错误代码是1067 安装卸载了好几次,就是不行,而且把一些禁用了的服务都打开了,但是还是不行。最后我是这样解决的:

    在C:\windows里找一找my.ini 然后删除 然后再启动winmysqladmin.exe界面配置mysql,保存my.ini就可以了 启动mysql试试 呵呵



    ***************
    8
    mysql 错误 1067: 进程意外终止
    这个问题困扰了一个早晨,非常郁闷!以前我在装mysql的时候从来没有遇到过,可是现在庄这个高版本的就有问题了,我换我装过的低版本的还是一样的问题(最关键的是操作系统都是一样的)。在windows2000的服务里面启动mysql服务可是总是弹出“错误 1067: 进程意外终止”!

    我感觉问题在配置文件,于是就重新写了my.ini,启动还是一样的效果,我在google上查找无果,崩溃状态!就在此时眼前一亮,一位高人的指点是我豁然开朗,你的ini文件有否放到windows目录下,我从个人目录的windows目录下,将其拷贝到系统windows目录下,启动服务,ok!!!

     
  • mysql免安装版设置

    2009-04-17 15:55:15

    搞了三个多小时,晕哒

    官方网站下载mysql-noinstall-5.1.32-win32,解压缩到d:\mysql

    修改my-huge.ini,改为my.ini,用记事本编辑, 在[mysqld]下加入

    #=========================================================
    basedir = "D:/mysql"
    datadir = "D:/mysql/Data"
    default-character-set = gbk
    default-storage-engine = INNODB
    max_connections = 100
    max_allowed_packet = 16M
    #=========================================================

    在CMD中用  D:\mysql\bin\mysqld --console  启动程序
    服务器完成启动序列后,你应当能看见下述内容,表示服务器准备好,可以进行客户端连接:
    mysqld: ready for connections
    Version: '5.1.2-alpha'  socket: ''  port: 3306
      查看Windows任务管理器,发现进程中多出来一个mysqld.exe,这说明数据库已经成功的启动的了

     另打开一个cmd控制台,用以下语句测试
      mysqlshow
       mysqlshow -u root mysql
       mysqladmin -u root version status proc
       mysql -u root test

     ==============================================
    此外,我们可以把数据库注册成一个服务,随着系统的启动而启动,具体命令如下:

            mysqld --install MySQL --defaults-file=D:\mysql\my.ini

       运行上面的命令后,就会在系统服务中注册了一个名字为MySQL,启动来性为Automatic的服务

    ,这个服务默认情况下是自动启动的。

       可以通过命令行的防止停止或启动,如:

        c:\net start MySQL启动)
        c:\net stop MySQL(停止)
        c:\mysqld-nt --remove MySQL(卸载服务)

    ==============================================
    参考文档:

    在windows系统,建议将mysql启动为系统服务,这样系统启动关闭的时候自动启动关闭mysql
       以下步骤将mysql作为系统的services
       mysqld --install MySQL --defaults-file=C:\my-opts.cnf
       其中“MySQL”作为系统服务的名字
       如果不提供“--defaults-file”参数,则系统采用mysql缺省的配置文件进行服务配置,也可以使用该参数配置系统服务
      
       使用mysql services运行方式的时候,在console不能看到系统的出错信息。这些错误信息可以在“%YOUR_MYSQL_PATH\data”目录下找到,文件的后缀是“.err”
    ==============================================

    初学MySql5 所应了解的知识和常见问题

    http://tech.ddvip.com/2007-07/118527599530306.html

     

    注意:斜杠和反斜杠的写法

    MySQL5.1中文参考手册.CHM

Open Toolbar