欢迎大家赞助一杯啤酒🍺 我们准备了下酒菜:Formal mathematics/Isabelle/ML, Formal verification/Coq/ACL2, C++/F#/Lisp
MySQL
MySQL : The world's most popular open source database
目录 |
简介
MySQL提供了十分快速的多线程、多用户、牢靠的SQL(结构化查询语言)数据库服务器。 MySQL服务器定位于任务关键型、重负荷生产系统,并能嵌入在大量部署的软件中。MySQL是MySQL AB的注册商标。
MySQL软件采用双许可方式。用户可根据GNU通用公共许可条款,将MySQL软件作为开放源码产品使用,或从MySQL AB公司购买标准的商业许可证。
新闻
您可以在Wikipedia上了解到此条目的英文信息 MySQL Thanks, Wikipedia. |
自http://planet.mysql.com/rss20.xml加载RSS失败或RSS源被墙
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
MySQL 5.0 已包含了 MySQL Cluster 技术
MySQL产品
- MySQL Enterprise
- MySQL Enterprise Server
- MySQL Enterprise Monitor
- MySQL Embedded Database
- MySQL Community Server
- MySQL Cluster - http://www.mysql.com/products/database/cluster/
- MaxDB - http://www.mysql.com/products/database/maxdb/
- MySQL Migration Toolkit
- MySQL Administrator
- MySQL Query Browser
- MySQL Workbench
Storage Engine
- Falcon Storage Engine: MySQL 存储引擎的第一选择,
- solidDB: 为MySQL量身定制的开源数据库存储引擎。
- InnoDB: MySQL 上第一个提供外键约束的引擎,除了提供事务处理外,支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数量。
MySQL的的主要特性
- 使用C和C++编写
- 用众多不同的编译器进行了测试
- 能够工作在众多不同的操作系统上。
- 使用GNU Automake、Autoconf和Libtool进行移植。
- 提供了用于C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl的API。
- 采用核心线程的完全多线程 如果有多个CPU,它能方便地使用这些CPU。
- 提供了事务性和非事务性存储引擎。
- 使用了极快的“B树”磁盘表(MyISAM)和索引压缩。
- 添加另一个存储引擎相对简单。如果打算为内部数据库添加一个SQL接口,该特性十分有用。
- 极快的基于线程的内存分配系统。
- 通过使用优化的“单扫描多连接”,能实现极快的连接。
- 存储器中的哈希表用作临时表。
- SQL函数是使用高度优化的类库实现的,运行很快。通常,在完成查询初始化后,不存在存储器分配。
- 采用Purify(商业内存溢出检测器)以及GPL工具Valgrind(http://developer.kde.org/~sewardj/)测试了MySQL代码。
- 服务器可作为单独程序运行在客户端/服务器联网环境下。它也可作为库提供,可嵌入(链接)到独立的应用程序中。这类应用程序可单独使用,也能在网络环境下使用。
安装指南
Windows
Linux,BSD
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
- http://www.mysql.com/why-mysql/scaleout/zillow.html
- YouTube’s scalability are Python, Memcached and MySQL replication
常见故障
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
http://forge.mysql.com/wiki/ReplicationFeatures/SemiSyncReplication
Projects
- http://forge.mysql.com/
- google-mysql-tools http://code.google.com/p/google-mysql-tools/
MySQL用户
- 在Internet领域:像Google的Web广告系统就采用了MySQL数据平台,这可是Google的一项主要业务,占其收入的90%以上。
- 在事务处理领域:主要是在线交易,像纽约交易所,就是采用了基于MySQL的数据解决方案。
- 在传统行业,如电信领域:像阿尔卡特、爱立信、朗讯、思科等公司,其数据处理平台,也都采用了MySQL。
相关链接
- MySQL官方网站
- MySQL管理工具 phpMyAdmin
- http://docs.huihoo.com/mysql/
- http://download.huihoo.com/mysql/
- MySQL Internals
- MySQL Expert - MySQL Consulting
- 上海爱可生:中国MySQL官方总代理
<discussion>characters_max=300</discussion>