MySQL

来自开放百科 - 灰狐
跳转到: 导航, 搜索
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公司购买标准的商业许可证

新闻

Wikipedia-35x35.png 您可以在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 8

MySQL 8.0 Reference Manual

MySQL 5

MySQL 5.7, 5.6

Mysql5.gif

http://dev.mysql.com/

MySQL产品

存储引擎

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

MySQL的的主要特性

  • 使用C和C++编写
  • 用众多不同的编译器进行了测试
  • 能够工作在众多不同的操作系统上。
  • 使用GNU Automake、Autoconf和Libtool进行移植。
  • 提供了用于CC++、Eiffel、JavaPerlPHPPythonRuby和Tcl的API。
  • 采用核心线程的完全多线程 如果有多个CPU,它能方便地使用这些CPU。
  • 提供了事务性和非事务性存储引擎。
  • 使用了极快的“B树”磁盘表(MyISAM)和索引压缩。
  • 添加另一个存储引擎相对简单。如果打算为内部数据库添加一个SQL接口,该特性十分有用。
  • 极快的基于线程的内存分配系统。
  • 通过使用优化的“单扫描多连接”,能实现极快的连接。
  • 存储器中的哈希表用作临时表。
  • SQL函数是使用高度优化的类库实现的,运行很快。通常,在完成查询初始化后,不存在存储器分配。
  • 采用Purify(商业内存溢出检测器)以及GPL工具Valgrind测试了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

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" 暂时加以解决.

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,Cluster

Semi Sync Replication

NoSQL

MySQL 5.6 包含了一个 NoSQL 接口,通过 Memcached API 为 InnoDB 提供更快速的 key-value 存储,让 MySQL 拥有自己的 NoSQL Style。

Key-value访问

DW & BI

项目

MySQL用户

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

文档

图集

博客

链接

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

变换
操作
导航
工具箱