MySQL

来自开放百科 - 灰狐
(版本间的差异)
跳转到: 导航, 搜索
(相关链接)
第217行: 第217行:
 
*[http://forge.mysql.com/wiki/MySQL_Internals MySQL Internals]
 
*[http://forge.mysql.com/wiki/MySQL_Internals MySQL Internals]
 
*[http://ronaldbradford.com/ MySQL Expert - MySQL Consulting]  
 
*[http://ronaldbradford.com/ MySQL Expert - MySQL Consulting]  
 +
 +
{{Comment}}
  
 
[[Category:MySQL]]
 
[[Category:MySQL]]
 
[[Category:Database]]
 
[[Category:Database]]

2010年9月9日 (四) 03:35的版本

Mysql-90x90.png

MySQL : The world's most popular open source database

目录

简介

Mysql.png
Maxdb.png

MySQL提供了十分快速的多线程、多用户、牢靠的SQL(结构化查询语言)数据库服务器。 MySQL服务器定位于任务关键型、重负荷生产系统,并能嵌入在大量部署的软件中。MySQL是MySQL AB的注册商标。

MySQL软件采用双许可方式。用户可根据GNU通用公共许可条款,将MySQL软件作为开放源码产品使用,或从MySQL AB公司购买标准的商业许可证

MySQL AB概述

MySQL AB是由MySQL创始人和主要开发人创办的公司。MySQL AB最初是由David Axmark、Allan Larsson和Michael“Monty”Widenius在瑞典创办的。

我们致力于开发MySQL数据库软件,并向新用户宣传推广它。MySQL AB拥有MySQL源代码、MySQL徽标和(注册)商标、以及本手册的版权。

公司名中的“AB”是瑞典语“aktiebolag”或“股份公司”的首字母缩写。可将其翻译为“MySQL有限公司”。事实上,MySQL有限公司和MySQLGmbH均是MySQL AB子公司的名称。它们分别位于美国和德国。 对··就是那样··

分支

MySQL 5

Mysql5.gif

MySQL 5.0 已包含了 MySQL Cluster 技术

http://dev.mysql.com/

MySQL产品

Storage Engine

  • Falcon Storage Engine: MySQL 存储引擎的第一选择,
  • solidDB: 为MySQL量身定制的开源数据库存储引擎。
  • InnoDB: MySQL 上第一个提供外键约束的引擎,除了提供事务处理外,支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数量。
MySQL 体系结构和进程概况

MySQL的的主要特性

  • 使用C和C++编写
  • 用众多不同的编译器进行了测试
  • 能够工作在众多不同的操作系统上。
  • 使用GNU Automake、Autoconf和Libtool进行移植。
  • 提供了用于CC++、Eiffel、JavaPerlPHPPythonRuby和Tcl的API。
  • 采用核心线程的完全多线程 如果有多个CPU,它能方便地使用这些CPU。
  • 提供了事务性和非事务性存储引擎。
  • 使用了极快的“B树”磁盘表(MyISAM)和索引压缩。
  • 添加另一个存储引擎相对简单。如果打算为内部数据库添加一个SQL接口,该特性十分有用。
  • 极快的基于线程的内存分配系统。
  • 通过使用优化的“单扫描多连接”,能实现极快的连接。
  • 存储器中的哈希表用作临时表。
  • SQL函数是使用高度优化的类库实现的,运行很快。通常,在完成查询初始化后,不存在存储器分配。
  • 采用Purify(商业内存溢出检测器)以及GPL工具Valgrind(http://developer.kde.org/~sewardj/)测试了MySQL代码。
  • 服务器可作为单独程序运行在客户端/服务器联网环境下。它也可作为库提供,可嵌入(链接)到独立的应用程序中。这类应用程序可单独使用,也能在网络环境下使用。

安装指南

install a MySQL source distribution 步骤如下:

shell> groupadd mysql
shell> useradd -g mysql mysql
shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
shell> ./configure --prefix=/usr/local/mysql
shell> make
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> bin/mysql_install_db --user=mysql
shell> chown -R root  .
shell> chown -R mysql var
shell> chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &

Debian 5.0.3 编译 MySQL 5.1.32

checking for termcap functions library... configure: error: No curses/termcap library
apt-get install libncurses5-dev 问题解决

bin/mysql_install_db --user=mysql 出错, /usr/local/mysql51/libexec/mysqld: unknown option '--skip-federated'

在 /etc/my.cnf 中 #skip-federated 问题解决
 

在 Debian 上安装 MySQL 4.x

 apt-get install mysql-client-4.1 mysql-server-4.1 mysql-common-4.1 libmysqlclient14-dev

在 Debian 上安装 MySQL 5.0

安装 MySQL 5.0, 5.1 需要安装 curses/termcap 包

apt-get install libncurses5-dev 或
从http://packages.debian.org/stable/libdevel/libncurses5-dev 获得deb安装包
dpkg -i libncurses5-dev_5.4-4_i386.deb
make
make install  
apt-get install mysql-server-5.0 
apt-get install php5-mysql php5-mysqli mysql-client-5.0 

一些信息会自动添加 /etc/php5/apache2/php.ini

extension=mysql.so
extension=mysqli.so

charcter set

utf8_general_ci  	Unicode (多语言), 不区分大小写
utf8_unicode_ci  	Unicode (多语言), 不区分大小写

utf8_general_ci也适用与德语和法语,除了‘ß’等于‘s’,而不是‘ss’之外。如果你的应用能够接受这些, 那么应该使用utf8_general_ci,因为它速度快。否则,使用utf8_unicode_ci,因为它比较准确。

显然utf8_general_ci目前对我比较合适,一来比较速度快,而来我也好编辑数据,否则每次都要使用utf8_encode 和utf8_decode转来转去,没有办法直接通过文本编辑器来修改。也不符合TAOUP上说的最小立异性原则。

来源: utf8_unicode_ci与utf8_general_ci

CREATE DATABASE test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

MySQL管理

# /usr/local/bin/mysqld_safe &
mysql> set character_set_database=utf8;
mysqladmin -uroot password newpassword -p
mysqldump --all-databases > backup.sql -uroot -p
text dump: mysqldump --all-databases > file.txt
xml dump: mysqldump --all-databases --xml > file.xml
mysql>GRANT ALL PRIVILEGES ON test.* TO test@localhost IDENTIFIED BY 'test';
mysql>flush privileges;

Windows下

net start mysql5
net stop mysql5

设置成 utf8 环境, my.ini or my.cnf

在[client]下面添加
default-character-set=utf8 默认字符集为utf8
在[mysqld]下面添加
default-character-set=utf8 默认字符集为utf8
init_connect='SET NAMES utf8' (设定连接mysql数据库时使用utf8编码,让mysql数据库为utf8运行)

进入mysql

mysql>show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

C,C++编程

gcc -c -I/usr/include/mysql main.c
gcc -o hellow main.o -L/usr/lib/mysql -lmysqlclient -lz
or 
gcc -o hellow main.o -L/usr/lib/mysql -L/usr/lib/mysql -lmysqlclient -lz

Makefile

CC = gcc
INCLUDES = -I/usr/include/mysql 
LIBS =  -L/usr/lib/mysql -lmysqlclient -lz
all:hellow
main.o: main.c
        $(CC) -c $(INCLUDES)  main.c
hellow: main.o
        $(CC) -o hellow main.o $(LIBS)
clean:
        rm -f hellow main.o *~

Perl编程

Python编程

HA,Scalable

MySQL Web Scale-Out

常见故障

061224 13:38:34 [ERROR] /usr/local/libexec/mysqld: Disk is full writing './wordpress/wp_comments.MYD'

(Errcode: 28). Waiting for someone to free space... Retry in 60 secs  // 用户无法访问数据库, 处于阻塞状态.
myisamchk wp_comments // 修复成功 :)

不区分大小写

Linux下 在/etc/my.cnf or /etc/mysql/my.cnf下) 添加
[mysqld]
lower_case_table_names=1
重启mysql.

注意:要重新导入数据,这时都转换成小写,且可用大、小写查询

遇到 MySQL 5.1 中 MySQL Error : Field 'create_time' doesn't have a default value 的问题. 这些错误是由 MySQL 5.1 的严格模式导致的. 将 my.ini 中的sql-mode改为"MYSQL40" 暂时加以解决.

Storage Engine

存储引擎比较
  • MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。注意,通过更改STORAGE_ENGINE配置变量,能够方便地更改MySQL服务器的默认存储引擎。
  • InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。
  • BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。
  • Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。
  • Merge:允许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。
  • Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。
  • Federated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库。十分适合于分布式环境或数据集市环境。
  • Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。
  • Other:其他存储引擎包括CSV(引用由逗号隔开的用作数据库表的文件),Blackhole(用于临时禁止对数据库的应用程序输入),以及Example引擎(可为快速创建定制的插件式存储引擎提供帮助)。

请记住,对于整个服务器或方案,你并不一定要使用相同的存储引擎,你可以为方案中的每个表使用不同的存储引擎,这点很重要。

HA,Scaleable

Semi Sync Replication

http://forge.mysql.com/wiki/ReplicationFeatures/SemiSyncReplication

Projects

MySQL用户

  • 在Internet领域:像Google的Web广告系统就采用了MySQL数据平台,这可是Google的一项主要业务,占其收入的90%以上。
  • 在事务处理领域:主要是在线交易,像纽约交易所,就是采用了基于MySQL的数据解决方案。
  • 在传统行业,如电信领域:像阿尔卡特、爱立信、朗讯、思科等公司,其数据处理平台,也都采用了MySQL。

相关链接

Comment-32x32.png

<discussion>characters_max=300</discussion>

分享您的观点
个人工具
名字空间

变换
操作
导航
工具箱