• 中英互译
  • 中法互译
  • 中日互译
  • 中韩互译
清除

MySQL数据库

  • 简介
    MySQL(发音为"my ess cue el",不是"my sequel")是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。
    由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。
    MySQL这个名字,起源不是很明确。一个比较有影响的说法是,基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样,MySQL AB创始人之一的Monty Widenius的女儿也叫My。这两个到底是哪一个给出了MySQL这个名字至今依然是个迷,包括开发者在内也不知道。
    MySQL的海豚标志的名字叫“sakila”,它是由MySQL AB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由来自非洲斯威士兰的开源软件开发者Ambrose Twebaze提供。根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。
    MySQL,虽然功能未必很强大,但因为它的开源、广泛传播,导致很多人都了解到这个数据库。它的历史也富有传奇性。
  • 历史
    MySQL的历史最早可以追溯到1979年,那时Oracle也才小打小闹,微软的SQL Server影子都没有。有一个人叫Monty Widenius, 为一个叫TcX的小公司打工,并用BASIC设计了一个报表工具,可以在4M主频和16KB内存的计算机上运行。过了不久,又将此工具,使用C语言重写,移植到Unix平台,当时,它只是一个很底层的面向报表的存储引擎。这个工具叫做Unireg。
    可是,这个小公司资源有限,Monty天赋极高,面对资源有限的不利条件,他反而更能发挥潜能,总是力图写出最高效的代码。并因此养成了习惯。与Monty同在一起的还有一些别的同事,很少有人能坚持把那些代码持续写到20年后,而Monty却做到了。
    1990年,TcX的customer 中开始有人要求要为它的API提供SQL支持,当时,有人想到了直接使用商用数据库算了,但是Monty觉得商用数据库的速度难令人满意。于是,他直接借助于mSQL的代码,将它集成到自己的存储引擎中。但不巧的是,效果并不太好。于是, Monty雄心大起,决心自己重写一个SQL支持。
    1996年,MySQL 1.0发布,只面向一小拨人,相当于内部发布。到了96年10月,MySQL 3.11.1发布了,呵呵,没有2.x版本。最开始,只提供了Solaris下的二进制版本。一个月后,Linux版本出现了。
    紧接下来的两年里,MySQL依次移植到各个平台下。它发布时,采用的许可策略,有些与众不同:允许免费商用,但是不能将MySQL与自己的产品绑定在一起发布。如果想一起发布,就必须使用特殊许可,意味着要花银子。当然,商业支持也是需要花银子的。其它的,随用户怎么用都可以。这种特殊许可为MySQL带来了一些收入,从而为它的持续发展打下了良好的基础。(细想想,PostgreSQL曾经有几年限入低谷,可能与它的完全免费,不受任何限制有关系)。
    MySQL3.22应该是一个标志性的版本,提供了基本的SQL支持。
    MySQL关系型数据库于1998年1月发行第一个版本。它使用系统核心提供的多线程机制提供完全的多线程运行模式,提供了面向C、C++、Eiffel、Java、Perl、PHP、Python以及Tcl等编程语言的编程接口(APIs),支持多种字段类型并且提供了完整的操作符支持查询中的SELECT和WHERE操作。
    MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。
    1999-2000年,有一家公司在瑞典成立了,叫MySQL AB (不知道AB是什么意思,待查)。 雇了几个人,与Sleepycat合作,开发出了 Berkeley DB引擎, 因为BDB支持事务处理,所以,MySQL从此开始支持事务处理了。
    2000年4月,MySQL对旧的存储引擎进行了整理,命名为MyISAM。同时,2001年,Heikiki Tuuri向MySQL提出建议,希望能集成他们的存储引擎InnoDB,这个引擎同样支持事务处理,还支持行级锁。
    如今,遗憾的是,BDB和InnoDB好像都被Oracle收购了,为了消灭竞争对手,哪怕是开源的,都是不择手段。
    MySQL与InnoDB的正式结合版本是4.0。
    到了MySQL5.0,2003年12月,开始有View,存储过程之类的东东,当然,其间, bug也挺多。
    在2008年1月16号 MySQL被Sun公司收购。
    最近,MySQL的创始人Monty Widenius已经向Sun提交了辞呈。head都要走了。
    据说,被Sun收购的公司多薄命,不知道MySQL今后前途如何,希望一路走好。相信MySQL的生命力还是很长久的。
    时至今日 mysql 和 php 的结合绝对是完美.很多大型的网站也用到mysql数据库.mysql的发展前景是非常光明的!
  • 常用命令
    1:使用SHOW语句找出在服务器上当前存在什么数据库:
    mysql> SHOW DATABASES;
    2:2、创建一个数据库MYSQLDATA
    mysql> CREATE DATABASE MYSQLDATA;
    3:选择你所创建的数据库
    mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!)
    4:查看现在的数据库中存在什么表
    mysql> SHOW TABLES;
    5:创建一个数据库表
    mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
    6:显示表的结构:
    mysql> DESCRIBE MYTABLE;
    7:往表中加入记录
    mysql> insert into MYTABLE values (”hyq”,”M”);
    8:用文本方式将数据装入数据库表中(例如D:/mysql.txt)
    mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE MYTABLE;
    9:导入.sql文件命令(例如D:/mysql.sql)
    mysql>use database;
    mysql>source d:/mysql.sql;
    10:删除表
    mysql>drop TABLE MYTABLE;
    11:清空表
    mysql>delete from MYTABLE;
    12:更新表中数据
    mysql>update MYTABLE set sex=”f” where name=’hyq’;
    全局管理权限对应解释:
    FILE: 在MySQL服务器上读写文件。
    PROCESS: 显示或杀死属于其它用户的服务线程。
    RELOAD: 重载访问控制表,刷新日志等。
    SHUTDOWN: 关闭MySQL服务。
    数据库/数据表/数据列权限:
    ALTER: 修改已存在的数据表(例如增加/删除列)和索引。
    CREATE: 建立新的数据库或数据表。
    DELETE: 删除表的记录。
    DROP: 删除数据表或数据库。
    INDEX: 建立或删除索引。
    INSERT: 增加表的记录。
    SELECT: 显示/搜索表的记录。
    UPDATE: 修改表中已存在的记录。
    特别的权限:
    ALL: 允许做任何事(和root一样)。
    USAGE: 只允许登录–其它什么也不允许做。
  • 数据库导入
    MySQL数据库的导入,有两种方法:
    1) 先导出数据库SQL脚本,再导入;
    2) 直接拷贝数据库目录和文件。
    在不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况发生。
    所以一般推荐用SQL脚本形式导入。下面分别介绍两种方法。
    2. 方法一 SQL脚本形式
    操作步骤如下:
    2.1. 导出SQL脚本
    在原数据库服务器上,可以用phpMyAdmin工具,或者mysqldump命令行,导出SQL脚本。
    2.1.1 用phpMyAdmin工具
    导出选项中,选择导出“结构”和“数据”,不要添加“DROP DATABASE”和“DROP TABLE”选项。
    选中“另存为文件”选项,如果数据比较多,可以选中“gzipped”选项。
    将导出的SQL文件保存下来。
    2.1.2 用mysqldump命令行
    命令格式
    mysqldump -u 用户名 -p 数据库名 > 数据库名.sql
    范例:
    mysqldump -u root -p abc > abc.sql
    (导出数据库abc到abc.sql文件)
    提示输入密码时,输入该数据库用户名的密码。
    2.2. 创建空的数据库
    通过主控界面/控制面板,创建一个数据库。假设数据库名为abc,数据库全权用户为abc_f。
    2.3. 将SQL脚本导入执行
    同样是两种方法,一种用phpMyAdmin(mysql数据库管理)工具,或者mysql命令行。
    2.3.1 用phpMyAdmin工具
    控制面板,选择创建的空数据库,点“管理”,进入管理工具页面。
    在"SQL"菜单中,浏览选择刚才导出的SQL文件,点击“执行”以上载并执行。
    注意:phpMyAdmin对上载的文件大小有限制,php本身对上载文件大小也有限制,如果原始sql文件
    比较大,可以先用gzip对它进行压缩,对于sql文件这样的文本文件,可获得1:5或更高的压缩率。
    gzip使用方法:
    # gzip xxxxx.sql
    得到
    xxxxx.sql.gz文件。
    提示输入密码时,输入该数据库用户名的密码。
    3 直接拷贝
    如果数据库比较大,可以考虑用直接拷贝的方法,但不同版本和操作系统之间可能不兼容,要慎用。
    3.1 准备原始文件
    用tar打包为一个文件
    3.2 创建空数据库
    3.3 解压
    在临时目录中解压,如:
    cd /tmp
    tar zxf mydb.tar.gz
    3.4 拷贝
    将解压后的数据库文件拷贝到相关目录
    cd mydb/
    cp * /var/lib/mysql/mydb/
    对于FreeBSD:
    cp * /var/db/mysql/mydb/
    3.5 权限设置
    将拷贝过去的文件的属主改为mysql:mysql,权限改为660
    chown mysql:mysql /var/lib/mysql/mydb/*
    chmod 660 /var/lib/mysql/mydb/*
    Mssql转换mysql的方法
    1.导表结构
    使用MySQL生成create脚本的方法。找到生成要导出的脚本,按MySQL的语法修改一下到MySQL数据库中创建该表的列结构什么的。
    2.导表数据
    在MSSQL端使用bcp导出文本文件:
    bcp “Select * FROM dbname.dbo.tablename;” queryout tablename.txt -c -Slocalhost\db2005 -Usa
    其中”"中是要导出的sql语句,-c指定使用\t进行字段分隔,使用\n进行记录分隔,-S指定数据库服务器及实例,-U指定用户名,-P指定密码.
    在MySQL端使用mysqlimport 导入文本文件到相应表中
    mysqlimport -uroot -p databasename /home/test/tablename.txt
    其中-u指定用户名,-p指定密码,databasename指定数据库名称,表名与文件名相同
  • 备份与恢复
    MySQL备份恢复数据的一般步骤
    备份一个数据库的例子:
    1、备份前读锁定涉及的表
    mysql>LOCK TABLES tbl1 READ,tbl1 READ,…
      如果,你在mysqldump实用程序中使用--lock-tables选项则不必使用如上SQL语句。
    2、导出数据库中表的结构和数据
    shell>mysqldump --opt db_name>db_name.sql
    3、启用新的更新日志
    shell>mysqladmin flush-logs
    这样可以记录你备份后的数据改变为恢复数据准备。
    4、解除表的读锁
    mysql>UNLOCK TABLES;
    为了加速上述过程,你可以这样做:
    shell> mysqldump --lock-tables --opt db_name>db_name.sql; mysqladmin flush-logs
    但是这样可能会有点小问题。上命令在启用新的更新日志前就恢复表的读锁,
      在更新繁忙的站点,可能有备份后的更新数据没有记录在新的日志中。
      现在恢复上面备份的数据库
    1、对涉及的表使用写锁
    mysql>LOCK TABLES tbl1 WRITE,tbl1 WRITE,…
    2、恢复备份的数据
    shell>mysql db_name < db_name.sql
    3、恢复更新日志的内容
    shell>mysql --one-database db_name < hostname.nnn
    假设需要使用的日志名字为hostname.nnn
    4、启用新的更新日志
    shell>mysqladmin flush-logs
    5、解除表的写锁
    mysql>UNLOCK TABLES;
    希望上面的例子能给你启发,因为备份数据的手法多种多样,你所使用的和上面所述可能大不一样,但是对于备份和恢复中,表的锁定、启用新的更新日志的时机应该是类似的,仔细考虑这个问题。

以上来源于: 百度百科

有道词典-市场占有率第一的词典,立即下载

有道首页|反馈意见| 切换到PC版

©2015 公司 京ICP证080268号