欢迎大家赞助一杯啤酒🍺 我们准备了下酒菜: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.7 的最新信息
- 详解MySQL 5.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代码。
- 服务器可作为单独程序运行在客户端/服务器联网环境下。它也可作为库提供,可嵌入(链接)到独立的应用程序中。这类应用程序可单独使用,也能在网络环境下使用。
安装指南
OS X
下载安装包安装后
sudo /usr/local/mysql-5.7.9-osx10.9-x86_64/bin/mysqld_safe --user=mysql &
Windows
Linux,BSD
install a MySQL source distribution 步骤如下: 新版本使用 cmake
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql5 -DINSTALL_DATADIR=/usr/local/mysql5/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_SSL=system -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1
列举配置选项,使用以下命令:
cmake . -L # overview cmake . -LH # overview with help text cmake . -LAH # all params with help text ccmake . # interactive display ... make make install ... cd /usr/local/mysql5 chmod 744 ./scripts/mysql_install_db ./scripts/mysql_install_db chown –R mysql:mysql /usr/local/mysql5/data ./bin/mysqladmin -u root password 'new-password' ... 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 MariaDB [test]> select 1; MariaDB [test]> set password = password('huihoo'); mysqldump --all-databases > backup.sql -uroot -p mysqldump -uroot --default-character-set=utf8 -p piwik > piwik.sql text dump: mysqldump --all-databases > file.txt xml dump: mysqldump --all-databases --xml > file.xml mysqldump --all-databases > dump-$( date '+%Y-%m-%d_%H-%M-%S' ).sql -u root -p 0 1 * * * /usr/bin/mysqldump --all-databases > dump-$( date '+%Y-%m-%d_%H-%M-%S' ).sql -u root -pPASSWORD mysql -u root -p < backup.sql // 恢复多个数据库 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)
服务端帮助
mysql> help contents; For more information, type 'help <item>', where <item> is one of the following categories: Account Management Administration Compound Statements Data Definition Data Manipulation Data Types Functions Functions and Modifiers for Use with GROUP BY Geographic Features Help Metadata Language Structure Plugins Table Maintenance Transactions User-Defined Functions Utility
重置root密码
/etc/init.d/mysql stop /usr/bin/mysqld_safe --skip-grant-tables & mysql -uroot -p // 不需要密码 use mysql update user set password=password("new_pass") where user="root"; flush privileges; /usr/bin/mysqld_safe stop /etc/init.d/mysql start
开启远程连接访问
mysql> grant all on *.* to admin@'%' identified by 'admin' with grant option; mysql> select host, user from mysql.user; netstat -an
修改 my.cnf
bind-address=0.0.0.0
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编程
PHP编程
编译 pdo_mysql
wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz cd PDO_MYSQL-1.0.2 /usr/local/php-5.2.14/bin/phpize ./configure --with-php-config=/usr/local/php-5.2.14/bin/php-config --with-pdo-mysql=/usr/local make make install Installing shared extensions: /usr/local/php-5.2.14/lib/php/extensions/no-debug-non-zts-20060613/ 编译成功:pdo_mysql.so vim /usr/local/php-5.2.14/etc/php.ini extension_dir = "/usr/local/php-5.2.14/lib/php/extensions/no-debug-non-zts-20060613" /usr/local/php-5.2.14/bin/php -m // 查询已有的Modules 重启Web服务器
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" 暂时加以解决.
Can't contact the database server: Can't connect to local MySQL server through socket '/var/run/mysq
可能 ln -s /tmp/mysql.sock /var/run/mysqld/mysqld.sock 就解决问题。
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
NoSQL
MySQL 5.6 包含了一个 NoSQL 接口,通过 Memcached API 为 InnoDB 提供更快速的 key-value 存储,让 MySQL 拥有自己的 NoSQL Style。
- NoSQL and SQL: The Best of Both Worlds
- Top 5 Developer Enabling Nuggets in MySQL 5.6
- InnoDB Integration with memcached
- MySQL and Hadoop – Big Data Integration
DW & BI
MySQL in Data Warehousing & Business Intelligence
项目
MySQL用户
- 在Internet领域:像Google的Web广告系统就采用了MySQL数据平台,这可是Google的一项主要业务,占其收入的90%以上。
- 在事务处理领域:主要是在线交易,像纽约交易所,就是采用了基于MySQL的数据解决方案。
- 在传统行业,如电信领域:像阿尔卡特、爱立信、朗讯、思科等公司,其数据处理平台,也都采用了MySQL。
文档
- 200 Million QPS on Commodity Hardware—Getting Started with MySQL Cluster 7.4
- The State of the Dolphin:MySQL 5.7
- MySQL 5.7 Performance: Scalability & Benchmarks
- MySQL Performance: Demystified Tuning and Best Practices
- MySQL Connector/ Internals and OptimizationJ
- MySQL Troubleshooting with the Performance Schema
- InnoDB Spatial Index