中文参考手册5(安装MySQL上)

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

MySQL中文参考手册5(安装MySQL上)

转载 译者:晏子


译者:晏子 (clyan@sohu.com)主页:http://linuxdb.yeah.net
安装 MySQL
本章描述怎样获得并 安装 MySQL: 

对于你能从其获得 MySQL的站点列表,见4.1 怎样获得 MySQL。 
要了解支持哪些平台,见4.2  MySQL支持的。 
可获得 MySQL的多个版本,以二进制代码和源代码形式分发。为了确定你应该使用的分发的版本和类型,见4.4 怎样和何时发布更新版本。 
针对二进制代码和源代码分发的 安装指令在4.6  安装  MySQL 二进制代码分发和4.7  安装  MySQL 源代码分发讲述。每套指令均包含一个关于你可能涉及的系统特定问题的部分。 
安装后期过程,见4.15  安装后期的设置与测试。不管你是用一个二进制代码还是源代码分发来 安装 MySQL,这些过程均适用。 

4.1 怎样获得MySQL
检查 MySQL主页获得当前版本的信息和下载指令。 

然而,TcX的因特网链接不是很快的;我们更希望让你从下列镜象站点之一进行真正的下载。 

请向webmaster@ MySQL.com报告不存在的或过时的镜像站点。 

欧洲: 


  奥地利 [ 维也纳技术大学 ]WWW ftp 
  保加利亚 [ Naturella ]ftp 
  克罗地亚 [ HULK ]WWW ftp 
  捷克共和国 [ 在Brno的Masaryk大学 ]WWW ftp 
  捷克共和国 [ www.sopik.cz]WWW 
  丹麦 [ Borsen ]WWW 
  丹麦 [ SunSITE ]WWW  ftp 
  爱沙尼亚 [ OKinteractive ]WWW 
  法国 [ minet ]WWW 
  芬兰 [ EUnet ]WWW 
  芬兰 [ clinet ]ftp 
  德国 [ 波恩大学, 波恩 ]WWW ftp 
  德国 [ Wolfenbuettel ]WWW ftp 
  德国 [ Staufen ]WWW 
  德国 [ Cable &amp; Wireless ]ftp 
  希腊 [ NTUA , 雅典]WWW  ftp 
  Island [ GM ]WWW WWW 
  意大利 [ Teta Srl ]WWW 爱尔兰 [ Ireland On-Line/Dublin ]WWW ftp 
  波兰 [ Sunsite ]WWW ftp 
  葡萄牙 [ lerianet ]WWW  ftp 
  俄国 [ DirectNet ]WWW 
  俄国 [ IZHCOM ]WWW ftp
  俄国 [ Scientific Center/Chernogolovka ]ftp 
  罗马尼亚 [ Timisoara ]WWW ftp 
  罗马尼亚 [ Bucharest ]WWW  ftp 
  西班牙 [ MasterD ]WWW 
  瑞典 [ Sunet ]WWW ftp 
  瑞士 [ Sunsite ]WWW ftp 
  英国 [ Omnipotent/UK ]WWW ftp 英国 [ PLiG/UK ]WWW ftp
  英国 [ SunSITE ]WWW ftp 
  乌克兰 [ PACO ]WWW ftp 


北美洲: 


  加拿大 [ Tryc ]WWW/li>
  加拿大 [ Cyberus ]WWW  ftp 
  美国 [ Hurricane Electric/San Jose ]WWW 
  美国 [ Circle Net/North Carolina ]WWW 
  美国 [ Gina net/Florida ]WWW 
  
  美国 [ pingzero/Los Angeles ]WWW 
  美国 [ 威斯康星大学 / 威斯康星]WWW ftp 
  美国 [ DIGEX ]ftp 


南美洲: 


  巴西 [ Matrix ]WWW 
  智利 [ Vision ]WWW 


亚洲: 


  中国 [ Freecode ]WWW 
  中国 [ Netfirm ]WWW 
  朝鲜 [ KREONet ]WWW 
  日本 [ Soft Agency ]WWW 
  日本 [ Nagoya Syouka University ]WWW ftp 
  新加坡 [ HJC ]WWW ftp 
  中国台湾 [ HT ]WWW 


澳洲: 


  澳洲 [ AARNet/Queensland ]WWW ftp 
  澳洲 [ Tas ]WWW ftp 
  澳洲 [ Blue Planet/Melbourne ]WWW 
  澳洲 [ ITworks Consulting/Victoria ]WWW 


非洲: 


  南非 [ Mweb/ ]WWW 
  
  南非 [ The Internet Solution/Johannesburg ]ftp 


4.2 MySQL 支持的操作系统
我们使用 GNU Autoconf,因此将 MySQL移植到所有使用 Posix 线程和一个  编译器的现代系统是可能的。(仅仅为了编译客户代码,只需要一个 C++ 编译器而不是线程)。我们主要在Sun (版本 2.5 & 2.6)上使用并开发本身,而RedHat  5.0 居其次。 

MySQL已经被报告在下列操作系统/线程包的组合上成功地编译。注意,对很多操作系统,原生的线程支持仅工作于最新的版本。 

有原生线程的AIX 4.x 
包括 MIT-pthreads 包的BSDI 2.x 
有原生线程的BSDI 3.0、3.1和4.x 
有原生线程的DEC UNIX 4.x 
包括MIT-pthreads包的 2.x 
有原生程的FreeBSD 3.x 
包括 MIT-pthreads 包的 HP-UX 10.20 
有原生线程的 HP-UX 11.x 。 
有 LinuxThreads 0.7.1 的 Linux 2.0 + 或glibc2.0.7 
OS X 服务器 
NetBSD 1.3/1.4 Intel 和 NetBSD 1.3 Alpha ( 需要 GNU make) 
包括 MIT-pthreads 包的 OpenBSD 2.x 
OS/2 Wrap 3、FixPack 29和OS/2 Wrap 4、FixPack 4 
有原生线程的SGI Irix 6.x 
SPARC和x86上有原生线程的Solaris 2.5、2.6和2.7 
包括 MIT-pthreads 包的SunOS 4.x 
有最新FSU Pthreads移植包的SCO OpenServer 
SCO UnixWare 7.0.1 
Tru64 Unix 
Win95、和NT(只有拥有 MySQL许可证或 MySQL电子邮件支持的用户可得到最新版本)。对那些在购买之前想测试的人,我们以共享软件方式发布了 MySQL 3.21.29(一个较老的版本)。 

4.3 使用MySQL哪个版本
首先要作出决策,你是否想要使用最新的开发版本或最终的稳定版本: 

通常, 如果你是第一次开始使用 MySQL或尝试移植它到一些还没有二进制分发系统上,我们推荐使用开发版本(当前 3.22.x)。这是因为通常在开发版本中没用真正严重的错误,并且你能容易用你的机器上的crash-me和基准测试套件来测试它。见10.8 使用你自己的基准测试。 
否则,如果你正在运行一个老的系统并且想要升级,但是又不想要用3.22冒险,你应该升级到3.21.33。我们已经试着仅修复致命错误,并且对那个版本进行更小的相对的改动。 
要做的第二项决策是你是否想要使用源代码分发或二进制分发: 

如果你想在一个已经存在一个最新二进制分发的平台上运行 MySQL,就用它。通常,这比一个源代码分发更容易 安装。 
如果你想要阅读(或修改)构成 MySQL的C和C++代码,你应该拿到源代码分发。源代码总是最终的手册。源代码分发也比二进制的分发包含更多的测试和实例。 
MySQL的命名机制使用由3个数字和一个后缀组成的版本号。例如,一个像 MySQL-3.21.17-beta的版本号这样解释: 

第1数字(3)描述文件格式。所有版本3的发行都有相同的文件格式。当一个版本4出现时,每个表都将必须转换到新格式(当然,为此有一个很不错的工具)。 
第2数字(21)是发行级别。通常有2种选择。一个是发部/稳定分支(当前为21)而其它是开发分支(当前22)。通常两者都是稳定的,但是开发版本可能有毛病,新功能缺乏文档或可能在某些系统上编译失败。 
第3个数字(17)是在此发行级别的版本号,这随每个新分发递增。通常你需要你已经选择的发行(release)的最新版本(version)。 
后缀(beta)显示发行的稳定性级别。可能的后缀有: 
alpha 表明发行包含大量未被100%测试的新代码。已知的错误(通常没有)应该在新闻小节被记录。见D  MySQL 变迁的历史记录。在大多数 alpha 版本也有新的命令和扩展。 
beta 意味着所有的新代码被测试了,没有增加重要的新特征,应该没有已知的错误。 
gamma 是一个发行了一段时间的beta版本,看起来应该运行正常。这就是很多其他公司称为一个发布的东西。 
如果没有后缀,这意味着该版本已经在很多地方运行一段时间了,而且没有非平台特定的错误报告。这就是我们称为一个稳定版本的东西。 
MySQL所有版本都经过我们的标准测试和基准测试运行,以保证他们可相当安全地使用。因为标准测试不断扩充以检测以前发现的错误,测试套件一直在改进之中。 

注意,所有版本都至少已经用下列套件进行了测试: 

一个内部测试套件 
这是一个客户生产系统的一部分。它可能有很多几百个兆字节数据的数据库表。 
MySQL基准测试套件 
它运行一定范围的常用查询。它也是一个测试,检测最新的优化处理是否真的使代码更快。见10.8 使用你自己的基准测试。 
crash-me测试 
这尝试决定数据库支持什么功能和它的能力与限制是什么。见10.8 使用你的自己基准测试。 
其他测试是在内部的生产环境中使用最新 MySQL版本,至少在一台机器上。我们有超过100GB的数据可用使用。 

4.4 怎样和何时发布更新版本
在TcX, MySQL进展的相当快,并且我们想要与其它 MySQL用户分享它。当我们有一个看来其它人似乎需要的非常有用的功能时,我们就试着制作一个发行版本。 

我们也尝试帮助那些需要很容易实现的功能的用户,我们也关注我们授权的用户想要什么,我们更特别关注我们的扩展电子邮件支持的客户想要什么,并且尽力帮助他们。 

没有人一定要下载一个新版本,新闻小节中将告诉你新版本是否有一些你确实想要的东西。见D  MySQL 变迁的历史记录。 

当更新 MySQL时,我们使用下列方针: 

对每个小的改进,在版本字符串的最后数字增加1。当有主要的新功能或与先前版本比有较小不兼容性时,在版本字符串的第2数字增加1。当文件格式变化时,第1数字加1。 
稳定的测试过的版本每年准备出现1-2次,但是如果发现小错误,只有错误修复的一个版本将被发行。 
工作版本准备每1-8周出现一次。 
对一些平台的二进制分发,主要版本由我们制作。其他人可以为其他系统制作二进制分发,但是可能不多见。 
一旦我们找到并修复了小错误,我们通常使用户可以得到补丁。 
对非紧急但烦人的错误,如果他们被发给我们,我们将使用户可以得到补丁,否则我们将集中许多错误到一个更大的补丁中。 
在任何情况下,如果在一个发行中有一个致命错误,我们将尽快制作一个新版本。我们想其他公司也这样做。:) 
当前的稳定版本是3.22;我们已经转移到3.23的积极开发中。在稳定版本中,错误仍将被修复。我们不相信一个完全冻结,因为这也留下的错误修复和“必须做”的事情。“某种程度的冻结”意味着我们可以增加小东西,它“将几乎肯定不影响已经能工作的任何东西”。 

4.5 安装布局
这节描述 安装二进制代码和源代码分发时创建的缺省目录布局。 

二进制分发通过在你选择的 安装地点(典型的“/usr/local/ MySQL”)解压缩来 安装,并且在该处创建下列目录: 

目录  目录的内容  
“bin”  客户程序和 MySQLd服务器 
“data”  日志文件, 数据库 
“include”  包含(头)文件 
“lib”  库文件 
“scripts”   MySQL_install_db  
“share/ MySQL ”  错误消息文件 
“sql-bench”  基准程序 

源代码分发在你配置并编译后进行 安装。缺省地, 安装步骤将文件 安装在“/usr/local”下的下列子目录: 

目录  目录的内容  
“bin”  客户程序和脚本 
“include/ MySQL”  包含(头)文件 
“info”  Info格式的文档 
“lib/ MySQL”  库文件 
“libexec”   MySQLd服务器 
“share/ MySQL”  错误消息文件 
“sql-bench”  基准程序和crash-me测试 
“var”  数据库和日志文件。  

在一个 安装目录内,源代码 安装的布局在下列方面不同于二进制 安装: 

MySQLd服务器被 安装在“libexec”目录而不是“bin”目录内。 
数据目录是“var”而非“data”。 
MySQL_install_db被 安装在“/usr/local/bin”目录而非“/usr/local/ MySQL/scripts”内。 
头文件和库目录是“include/ MySQL”和“lib/ MySQL”而非“include”和“lib”。 

4.6 安装MySQL二进制代码分发
你需要下列工具 安装一个 MySQL二进制分发: 

GNU gunzip解压缩分发。 
一个适当的tar解包分发。 GNU tar已知可以。 
在Linux下的另一个 安装方法是使用RPM(RedHat包管理器)分发。见4.6.1 Linux RPM 注意事项。 

如果你碰到问题,在把问题邮寄到 MySQL@lists. MySQL.com时,请总是使用 MySQLbug,就算问题不是一个bug, MySQLbug收集系统信息,将有助于其它人解决你的问题。不使用 MySQLbug,你将减少得到你问题的一个解决方案的可能性!在你解包分发后,你会在“bin”目录下找到 MySQLbug。见2.3 怎样报告错误或问题。 

你必须执行以便 安装并使用一个 MySQL二进制分发的基本命令是: 

shell> gunzip <  MySQL-VERSION-OS.tar.gz |tar  xvf - 
shell> ln - s   MySQL-VERSION-OS   MySQL 
shell> cd  MySQL 
shell> scripts/ MySQL_install_db 
shell> bin/safe_ MySQLd &


如果你 安装了DBI和Msql- MySQL-modulesPerl模块,你可以使用bin/ MySQL_setpermission脚本增加新用户。 

以下是更详细的描述: 

对于 安装二进制分发,遵循以下步骤,然后继续到4.15  安装后期的设置与测试,进行 安装后期的设置和测试: 

挑选一个你想解开分发包的目录,进入给目录。在下面的例子中,我们将分发解包在“/usr/local”下并且创建一个 安装 MySQL的“/usr/local/ MySQL”目录。(因此,下列指令假设你有权限在“/usr/local”中创建文件,如果该目录被保护,你需要以root实施 安装。) 
从4.1 怎样获得 MySQL中列出的站点之一获得一个分发文件。 MySQL二进制分发以压缩的tar文档提供,并且有类似“ MySQL-VERSION-OS.tar.gz”的名字,这里VERSION是一个数字(例如,3.21.15),且OS表明分发能运行的操作系统类型(例如,pc-linux-gnu-i586)。 
解开分发并且创建立 安装目录: 
shell> gunzip <  MySQL-VERSION-OS.tar.gz |tar  xvf - 
shell> ln - s   MySQL-VERSION-OS   MySQL

第一个命令创建一个名为“ MySQL-VERSION-OS”的目录,第二个命令生成到该目录的一个符号链接。这让你更容易地把 安装目录指定为“/usr/local/ MySQL”。 

进入 安装目录: 
shell> cd   MySQL
你会在 MySQL目录下发现几个文件和子目录,对 安装目的最重要的是“bin”和“scripts”子目录。 

“bin” 
这个目录包含客户程序和服务器,你应该把这个目录的完整路径加到你的PATH环境变量,以便你的shell能正确的找到 MySQL程序。 
“scripts” 
这个目录包含 MySQL_install_db脚本,用来初始化服务器存取权限。 
如果你想使用 MySQLaccess而在某个非标准的地点有 MySQL分发,你必须改变地点,在哪儿 MySQLaccess期望找到 MySQL客户。编辑“bin/ MySQLaccess”脚本,大约在第18行,寻找类似下面的行: 
$ MySQL = “/usr/local/bin/ MySQL”; # path to  MySQL executable
改变路径以反映出 MySQL实际存储在你系统上的地点。如果你不这样做,当你运行 MySQLaccess时,你将得到一个broken pipe的错误。

创造 MySQL授权表(只有在你以前没 安装MySQL是必要的): 
shell> scripts/ MySQL_install_db
注意当你运行时 MySQL_install_db时,比版本3.22.10老的 MySQL版本启动 MySQL服务器。这不再是真的了! 

如果你想要 安装对Perl DBI/DBD接口的支持,见4.10 Perl 安装注意事项。 
如果你喜欢在引导机器时自动启动 MySQL,你可以拷贝support-files/ MySQL.server文件到你系统有启动文件的地方。更多的信息可以在support-files/ MySQL.server脚本中和4.15.3 自动启动和停止 MySQL找到。 
在所有东西被解包并且 安装以后,你应该初始化并且测试你的分发。 

你可以用下列命令启动 MySQL服务器: 

shell> bin/safe_ MySQLd &

见4.15  安装后期的设置和测试。 


4.6.1 Linux RPM 注意事项
在Linux上 安装 MySQL推荐的方法是使用一个RPM文件。 MySQL RPM目前是在一个 RedHat 5.2 系统上建立的,但是应该能工作在支持rpm且使用glibc的其他 Linux 版本上。 

如果一个RPM文件有问题,例如Sorry, the host 'xxxx' could not be looked up,见4.6.3.1 Linux 注意事项。 

你可能要使用的RPM文件有: 

MySQL-VERSION.i386.rpm  MySQL服务器。除非你只是想要与运行在其他机器上 MySQL服务器连接,否则你将需要它。 
MySQL-client-VERSION.i386.rpm 标准 MySQL客户程序。你可能总是需要 安装这个包。 
MySQL-bench-VERSION.i386.rpm 测试和基准程序。需要Perl和msql- MySQL-modules RPM。 
MySQL-devel-VERSION.i386.rpm 所需的库和包含文件。如果你想要编译其他 MySQL客户程序, 例如Perl模块。 
MySQL-VERSION.src.rpm 包含上述所有包的源代码。它也能被用来尝试为其他平台构造RPM(例如,Alpha或SPARC)。 
查看一个RPM包中的所有文件: 

shell> rpm - qpl   MySQL-VERSION.i386.rpm
实施一个标准的最小 安装,运行这个命令: 

shell> rpm -i  MySQL-VERSION.i386.rpm   MySQL-client-VERSION.i386.rpm
安装客户包: 

shell> rpm -i  MySQL-client-VERSION.i386.rpm
RPM将数据放在“/var/lib/ MySQL”里,RPM也在“/etc/rc.d/”里创建适当的入口以便在引导时自动启动服务器。(这意味着如果你以前已经 安装过,在对它改变之前,你可以把你以前 安装MySQL启动文件做个拷贝,因此你不会丢失改动)。

安装了RPM文件后,“ MySQLd”守护程序应该正在运行,并且现在你应该可以开始使用 MySQL。见4.15  安装后期的设置和测试。 

如果一些东西出错,可以在二进制的 安装一节里找到更多的信息。见4.6  安装 MySQL二进制代码分发。


4.6.2 构造客户程序
如果你编译你自己写的或你从第三方获得的 MySQL客户程序,他们必须用link命令的-l MySQLclient选项进行链接。你可能也需要指定一个 -L 选项,告诉链接器在哪儿查找库文件。例如,如果库文件 安装在“/usr/local/ MySQL/lib”里,在链接命令上使用 -L/usr/local/ MySQL/lib -l MySQLclient。 

对使用 MySQL头文件的客户程序,当你编译他们时,你可能需要指定一个 -I 选项(例如,-I/usr/local/ MySQL/include), 使得编译器能找到头文件。

4.6.3 系统特定的问题
下一节说明在从一个二进制分发 安装 MySQL时,已经在特定的系统上观察到已发生过一些问题。 

4.6.3.1 Linux 注意事项
MySQL需要至少Linux 2.0。 

二进制发行版用-static链接的,这意味着你一般不必担心你拥有的系统库是哪个版本。你也不必 安装LinuxThreads。一个用-static链接的程序比一个动态链接程序稍大些但更快(3-5%)。然而,一个问题是你不能使用静态链接的用户定义函数(UDF)。如果你准备编写或使用UDF函数(这只对C或C++程序员),你必须编译 MySQL本身,使用动态链接。 

如果你正在使用一个基于libc-的系统(而不是一个glibc2系统),你将可能碰到二进制发行的主机名解析和getpwnam()的一些问题(这是因为glibc不幸地依赖于一些包括解析主机名和getwpent()的外部库,甚至在用-static编译时)。在这种情况下,当你运行 MySQL_install_db时,你可能得到下列错误信息: 

sorry, the host 'xxxx' could not be looked up
或当你尝试以 --user 选项运行  MySQLd 时的下列错误: 

getpwnam : No such fileor directory
你能用下列方法之一解决这个问题: 

获得一个 MySQL源代码分发(一个RPM或tar分发)并且 安装它。 
执行 MySQL_install_db --force;这将不执行 MySQL_install_db里面的resolveip测试。缺点是你不能在授权表中使用主机名字;相反你必须使用IP数字(除了localhost)。如果你正在使用一个老的不支持--force的 MySQL版本,你必须用编辑器删除 MySQL_install中的resolveip测试。 
用su启动 MySQLd而不使用--user。 
MySQL的Linux-Intel二进制代码和RPM发行版是为最高可能的速度而配置的。我们总是努力使用可用的最快的稳定的编译器。 

MySQL的Perl支持要求Perl 5.004_03或更新。 

4.6.3.2 HP-UX 注意事项
针对HP-UX的 MySQL二进制分发作为一个HP depot(仓库)或tar 文件格式分发的。为了使用depot文件,你必须运行至少HP-UX 10.x 以便访问HP的软件仓库工具。 

MySQL的HP版本在运行HP-UX 10.20下的HP 9000/8xx 服务器上编译,并且使用MIT-pthreads。它已知可在这种配置下很好地工作。 MySQL 3.22.26和更新版也用HP原生线程包构造。 

其他可以运行的配置: 

运行 HP-UX 10.20 + 的 HP 9000/7xx 
运行 HP-UX 10.30 的 HP 9000/8xx 
下列配置几乎肯定不能运行: 

运行 HP-UX 10.x 的 HP 9000/7xx 或 8xx ,x < 2 
运行 HP-UX 9.x 的 HP 9000/7xx 或 8xx 
为了 安装分发,使用下面的命令之一, 这里/path/to/depot是仓库文件的完整路径: 

安装所有东西,包括服务器、客户和开发工具: 
 shell> /usr/sbin/swinstall - s  /path/to/depot   MySQL.full
仅仅 安装服务器: 
shell> /usr/sbin/swinstall - s  /path/to/depot   MySQL.server
仅仅 安装客户软件包: 
shell> /usr/sbin/swinstall - s  /path/to/depot   MySQL.client
仅仅 安装开发工具: 
shell> /usr/sbin/swinstall - s  /path/to/depot   MySQL.developer
depot在“/opt/ MySQL”存放二进制代码和库文件并在“/var/opt/ MySQL”存放数据。depot也在“/sbin/init.d”和“ /sbin/rc2.d”里创建适当的入口以自动地在引导时启动服务器。显然, 这有必要以root身份来 安装。 

为了 安装HP-UX tar分发,你必须有GNU tar的一个拷贝。

4.7 安装MySQL源代码分发
你需要下列工具构造并 安装 MySQL源代码: 

GNU gunzip解压缩该分发。 
一个合适的tar解包分发。GNU tar已知可以工作。 
一个能运行的ANSI C++编译器。gcc> = 2.8.1 、egcs> = 1.0.2 、SGI C++和SunPro C++是一些已知能工作编译器。 当使gcc用时,不需要libg++。gcc2.7.x 有一个bug,使得它可能不能编译一些完全合法的C++文件,例如“sql/sql_base.cc”。如果你仅有gcc2.7.x,你必须升级gcc才能编译 MySQL。 
一个优秀的make程序。GNU make总是被推荐且有时必须。如果你有问题,我们推荐试一试GNU make3.75或更新。 
如果你遇到问题,当向 MySQL@lists. MySQL.com邮寄问题时,请一直使用 MySQLbug。就算问题不是一个bug, MySQLbug收集系统信息,将有助于其它人解决你的问题。如果不使用 MySQLbug,你减少得到关你问题的一个解决方案的可能性!在你解包分发后,你会在“scripts”目录下找到 MySQLbug。见2.3 怎样报告错误或问题。 

4.7.1 快速安装概述
你必须执行的 安装 MySQL源代码分发的基本命令是(从一个解包的tar文件): 

shell>configure
shell>make
shell>make install
shell>scripts/ MySQL_install_db 
shell>/usr/local/ MySQL/bin/safe_ MySQLd &

如果你从一个源代码RPM开始,那么执行如下命令。 

shell> rpm -- rebuild  MySQL-VERSION.src.rpm
这样你制作一个可以 安装的二进制RPM。 

如果你 安装了DBI和Msql- MySQL-modulesPerl模块,你可以利用bin/ MySQL_setpermission脚本增加新用户。 

以下是更详细的描述: 

为了 安装源代码分发,按照下列步骤,然后继续到4.15  安装后期的设置与测试,进行 安装后期的初始化与测试。 

挑选一个你要在其下面解包分发的目录,并且进入该目录。 
从节4.1 怎样获得 MySQL中列出的站点之一获得一个分发文件。 MySQL源代码分发以压缩的tar档案提供,并且有类似于“ MySQL-VERSION.tar.gz”的名字,这里的VERSION是一个类似3.23.7-alpha的数字。 
在当前目录下解包分发: 
shell> gunzip <  MySQL-VERSION.tar.gz | tar  xvf -
这个命令创建名为“ MySQL-VERSION”的一个目录。 

进入解包分发的顶级目录: 
 shell> cd   MySQL-VERSION
设置发行版本并且编译: 
shell>./configure--prefix=/usr/local/ MySQL 
shell>make 

当你运行configure时,你可能想要指定一些选项,运行./configure --help得到一张选项表。4.7.3 典型的configure选项讨论一些很有用的选项。如果configure失败,你将发送包含你认为能帮你解决该问题的“config.log”的邮件,如果configure异常退出,也要包括configure的最后几行输出。用 MySQLbug脚本邮寄错误报告。见2.3 怎样报告错误和问题。如果编译失败,见节4.8 编译问题?,帮助解决很多常见问题。 

安装所有东西: 
shell>make install
你可能需要root用户来运行这个命令。 

创造 MySQL授权表(只有你以前没 安装 MySQL是必需的): 
shell>scripts/ MySQL_install_db
注意,在运行 MySQL_install_db时,那些比3.22.10旧的 MySQL版本启动 MySQL服务器。现在不是这样了! 

如果你想要 安装对Perl DBI/DBD接口的支持,见4.10 Perl 安装注意说明。 
如果你想要 MySQL在你引导机器时自动地启动,你可以拷贝support-files/ MySQL.server到你的系统中有启动文件的地方。更多的信息可以在support-files/ MySQL.server脚本里和4.15.3 自动启动和停止 MySQL找到。 
在所有东西 安装完以后,你应该初始化并且测试你的分发。 

你可以用下列命令启动 MySQL服务器,这里BINDIR是safe_ MySQLd被 安装的目录(缺省为“/usr/local/bin”): 

shell> BINDIR/safe_ MySQLd &

如果这个命令提示 MySQLd daemon ended并马上失败,那么你能在文件“ MySQL-data-directory/'hostname'.err”找到一些信息。可能的原因是你已经有另外一个正在运行的 MySQLd服务器。见19.3 在同一台机器上运行多个 MySQL服务器。 

参见4.15  安装后期的设置与测试。 

4.7.2 运用补丁
有时补丁出现在邮件列表上或放在 MySQL FTP地点的补丁区。 

为了使用来自邮件列表的一个补丁,保存补丁出现在文件的消息,进入你的 MySQL源代码树的顶级目录并运行这些命令: 

shell>patch - p1 <patch-file-name 
shell>rm config.cache
shell>make clean

来自FTP地点的补丁是作为普通文本文件或作为被压缩了的gzip文件分发。运用一个文本的补丁如上述邮件列表补丁,为了使用一个压缩的补丁,进入你的 MySQL源代码树顶级目录并运行这些命令: 

shell>gunzip <patch-file-name.gz |patch - p1 
shell>rm  config.cache 
shell>make clean

在使用一个补丁以后,按照正常的源代码 安装的指令,开始./configure步骤。在运行make install后,重启你的 MySQL服务器。 

在运行make install前,你可能需要关闭所有正在运行的服务器(使用 MySQLadmin shutdown)。如果一个程序的新版本替代当前正在执行的版本,一些系统不允许你 安装它。 

4.7.3 典型的configure选项
configure脚本给你一个很大的控制权来如何配置你的 MySQL分发。典型地,你使用configure命令行的选项进行。你也可以用正确的环境变量作用于configure。对于一个由configure支持的选择列表,运行这个命令: 

shell> ./configure -- help
一些更常用的configure选项见下面的描述: 

只编译 MySQL客户库和客户程序而不是服务器,使用--without-server选项: 
shell> ./configure --without-server
如果你没有一个 C++ 编译器, MySQL将不编译(有一个客户程序需要C++)。在这种情况下,你可以去掉configure里面测试C++编译器的代码,然后运行带有 --without-server选项的./configure。编译步骤步将仍然尝试构造 MySQL,但是你可以忽略任何关于“  MySQL.cc ”的警告。(如果make停止,试试make -k告诉它即使出错继续剩下的构造步骤)。

如果你不想要位于“/usr/local/var”目录下面的日志(log)文件和数据库,使用类似于下列configure命令的一个: 
shell>./configure--prefix=/usr/local/ MySQL 
shell>./configure--prefix=/usr/local --localstatedir=/usr/local/ MySQL/data

第一个命令改变 安装前缀以便任何东西被 安装在“/usr/local/ MySQL”下面而非缺省的“/usr/local”。第二个命令保留缺省 安装前缀,但是覆盖了数据库目录缺省目录(通常是“/usr/local/var”)并且把它改/usr/local/ MySQL/data. 

如果你正在使用Unix并且你想要 MySQL的套接字位于缺省地点以外的某个地方(通常在目录“/tmp”或“/var/run”,使用象这样的configure的命令: 
shell> ./configure -- with-unix-socket-path=/usr/local/ MySQL/tmp/ MySQL.sock
注意给出的文件必须是一个绝对路径! 

如果你想编译静态链接程序(例如,制作二进制分发、获得更快的速度或与解决与RedHat分发的一些),像这样运行configure: 
shell>./configure --with-client-ldflags=-all-static --with- MySQLd-ldflags=-all-static

如果你正在使用gcc并且没有 安装libg++或libstdc++,你可以告诉configure使用gcc作为C++编译器: 
shell> CC=gcc  CXX=gcc  ./configure
当你使用时gcc作为C++编译器是,它将不试图链接libg++或libstdc++。如果构造失败并且产生有关编译器或链接器的错误,不能创建共享库“lib MySQLclient.so.#”(“#”是一个版本号), 你可以通过为configure指定--disable-shared选项来解决此问题。在这种情况下,configure将不构造一个共享lib MySQLclient.so.#库。 

你可以设置 MySQL对于非NULL的列不使用DEFAULT列值(即,不允许列是NULL)。这导致INSERT语句产生一个错误,除非你明确地为所有要求非NULL值的列指定值。为了禁止使用缺省值,这样运行configure: 
shell> CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS  ./configure
缺省地, MySQL使用ISO-8859-1(Latin1)字符集。为了改变缺省设置,使用--with-charset选项目: 
shell> ./configure -- with-charset=CHARSET
CHARSET可以是big5、cp1251、cp1257、czech、danish、dec8、dos、euc_kr、gb2312 gbk、german1、hebrew、 hp8、hungarian、koi8_ru、koi8_ukr、latin1、latin2、sjis、swe7、tis620、ujis、usa7、win1251或win1251ukr之一。见9.1.1 用于数据和排序的字符集。注意:如果你想要改变字符集,你必须在配置期间做make distclean!如果你想在服务器和客户之间变换字符,你应该看一下SET OPTION CHARACTER SET命令。见7.25 SET OPTION句法。警告:如果你在创建了任何数据库表之后改变字符集,你将必须对每个表运行myisamchk -r -q,否则你的索引可能不正确地排序。(如果你 安装MySQL,创建一些表,然后重新配置 MySQL使用一个不同的字符集并且重新 安装它,这时就可能发生这种情况。)

为了配置 MySQL带有调试代码,使用--with-debug选项: 
shell> ./configure --with-debug
这导致包含一个安全的内存分配器,能发现一些错误和并提供关于正在发生的事情的输出。见G.1调试一个 MySQL服务器。 

属于特定系统的选项可在本章特定系统的小节里找到。见4.11 系统特定的问题。 
4.8 编译问题?
所有 MySQL程序在Solaris上使用gcc编译并且没有任何警告。在其他系统上,由于系统包含文件的差别可能会发生警告。对于使用MIT-pthreads时发生的警告,见4.9 MIT-pthreads 注意事项。其他问题,检查下面的表。 

许多问题的解决方案涉及重新配置。如果你确实需要重新配置,注意下列事项: 

如果configure在它已经被运行了以后运行,它可以使用先前收集的信息。这个信息被存储在“config.cache”里面。当configure启动时,它寻找该文件而且如果它存在,假定信息仍然是正确的,读入它的内容。当你重新配置时,该假设是无效的。 
每次你运行configure时候,你必须运行make再重新编译。然而, 你可能想要把先前构造的老的目标文件删除,因为他们使用不同的配置选项被编译。 
为了防止使用旧的配置信息或目标文件,在重新运行configure前运行这些命令: 

shell>rm  config.cache 
shell>make clean

另外,你可以运行make distclean。 

下表描述了一些最常发生的编译 MySQL的问题: 

如果在编译“sql_yacc.cc”时,你得到如下的一个错误,你可能是存储器或交换空间溢出: 
Internal compiler error: program cc1plus got fatal signal 11
  或
Out of virtual memory
  或
Virtual memory exhausted

该问题是gcc要求大量的内存编译带有嵌入函数(inline function)的“sql_yacc.cc”。试试以--with-low-memory选项运行configure: 

shell>./configure -- with-low-memory
如果你正在使用gcc,该选项使得将-fno-inline加到编译行,如果你正在使用其他的编译器,则加入-O0。你应该试一试--with-low-memory选项,即使你有特别多的存储器和交换空间,而你认为不能可能运行得溢出。这个问题甚至在很慷慨的硬件配置的系统上出现,通常用--with-low-memory选项修正它。 

缺省地,configure挑选c++作为编译器名字并用-lg++选项的GNU c++链接。如果你正在使用gcc,这个特性在配置期间导致如下问题: 
configure: error: installation or configuration problem:
C++ compiler cannot create executables.

你可能也在编译期间看到g++、libg++或libstdc++相关的问题。这些问题的一个原因是你可能没有g++,或你可能有g++但无libg++或libstdc++。看一下“config.log”文件。它应该包含你的c++编译器不能工作的准确原因!为了解决这些问题,你可以使用gcc作为你的C++编译器。试试设置环境变量CXX为"gcc -O3"。例如: 

shell>CXX="gcc -O3" ./configure
它能工作,因为gcc象g++一样编译C++源代码,但缺省地它不链接libg++或libstdc++。解决这些问题的其他方法当然是 安装g++、libg++和libstdc++。 

如果你的编译以下面任何错误而失败,你必须升级make版本到GNUmake: 
making all in mit-pthreads 
make: Fatal error in reader: Makefile, line 18: 
Badly formed macro assignment 
 or 
make: file `Makefile' line 18: Must be a separator (: 
 or 
pthread.h: No such file or directory

Solaris和FreeBSD已知make程序有问题。GNU make版本3.75已知能工作。 

如果你想要定义你的C或C++编译器所使用的标志,把标志加到CFLAGS和CXXFLAGS环境变量中即可。你也能使用CC和CXX来指定编译器名字。例如: 
shell>CC=gcc 
shell>CFLAGS=-O6 
shell>CXX=gcc 
shell>CXXFLAGS=-O6 
shell>export CC  CFLAGS  CXX  CXXFLAGS

对于已经知道在不同系统上有用的标志定义列表,见4.14 TcX 二进制代码。 

如果你得到象如下的一条错误消息,你需要升级你的gcc编译器: 
client/lib MySQL.c:273: parse error brfore '__attribute__'
gcc2.8.1已知可以工作,但是我们推荐使用egcs1.0.3a或更新。 

如果你在编译 MySQLd时显示例如下面的那些错误, configure没有正确地检测传到accept()、getsockname()或getpeername()最后参数的类型: 
cxx: Error:  MySQLd.cc, line 645: In this statement, the referenced
     type of the pointer value "&length" is "unsigned long", which
     is not compatible with "int".
new_sock = accept(sock, (struct sockaddr *)&cAddr, &length);

为了修正它,编辑“config.h”文件(它由configure生成)。寻找这些行: 

/* Define as the base type of the last arg to accept */
#define SOCKET_SIZE_TYPE XXX

更改XXX为size_t或int,这取决于你的操作系统。(注意:你每次运行configure都必须这样做,因为configure重新生成“config.h”。)

“sql_yacc.cc”文件由“sql_yacc.yy”生成。通常构造过程不需要创造“sql_yacc.cc”,因为 MySQL有一个已经生成的拷贝,然而,如果你确实需要再创建它,你可能碰到这个错误: 
"sql_yacc.yy", line xxx fatal: default action causes potential...

这是一个你的yacc版本不完善的迹象。你可能需要 安装bison(GNU 版本yacc)并使用它。 

如果你需要调试 MySQLd或 MySQL客户,运行configure,使用--with-debug选项,然后重新编译并且链接你客户程序到新的客户库。见G.2 调试一个 MySQL客户。 
4.9 MIT-pthreads注意事项
这节描述在使用 MIT-pthreads 所涉及的一些问题。 

注意:在Linux上,你应该不使用MIT-pthreads而是 安装LinuxThreads!见4.11.5 Linux 注意事项(所有的Linux 版本)。 

如果你的系统不提供原生的线程支持,你将需要使用MIT-pthreads包构造 MySQL。这包括大多数FreeBSD系统、SunOS 4.x 、Solaris 2.4和更早版本及其他,见4.2  MySQL 支持的操作系统。 

在大多数系统上,你能通过使用configure,用--with-mit-threads选项来强迫运行MIT-pthreads: 
shell> ./configure -- with-mit-threads
当使用MIT-pthreads时,不支持在一个非源代码目录构造,因为我们想要使我们对代码的改变减到最小。 

MIT-pthreads不支持用于实现Unix套接字的AF_UNIX。这意味着如果你使用MIT-pthreads进行编译,所有的链接必须使用TCP/IP进行(它有点慢)。如果在构造 MySQL后,你发现你不能与本地的服务器连接,很可能是客户程序正在试图用缺省的Unix套接字与localhost连接。使用主机选择(-h或--host)明确地指定本地的主机名字,尝试做一个TCP/IP连接到 MySQL。 
决定是否使用MIT-pthreads的检查仅在处理服务器代码的配置过程期间发生。如果已经用--without-server配置了分发并只构造客户代码,客户将不知道MIT-pthreads是否正在被使用并且是否使用缺省的Unix套接字连接。因为Unix套接字不能在MIT-pthreads下面工作,这意味着当你运行客户程序时,你将需要使用-h或--host。 
当使用MIT-pthreads编译 MySQL时,因为性能原因,系统锁定缺省为禁止使用。你可以用--use-locking选项告诉服务器使用系统锁定。 
有时pthreadbind()命令不能绑定一个套接字但没有任何错误消息(至少在Solaris上),结果是所有到服务器的连接均失败。例如: 
shell>  MySQLadmin version
MySQLadmin: connect to server at ' failed;
error: 'Can't connect to  MySQL server on localhost (146)'

解决它的方法是杀死 MySQLd服务器并且重启它。这只有当我们强迫服务器停止并马上进行重启时在发生。 

使用MIT-pthreads,sleep()系统调用不是可中断的SIGINT(break)。这只有在你运行 MySQLadmin --sleep时才能注意到。你在中断起作用并且进程停止之前必须等待sleep()终止。 
当链接时,你可能会收到这样的警告消息(至少在Solaris上);他们可以被忽视: 
ld: warning: symbol `_iob' has differing sizes:
    (file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
file /usr/lib/libc.so value=0x140);
    /my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
ld: warning: symbol `__iob' has differing sizes:
    (file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
file /usr/lib/libc.so value=0x140);
    /my/local/pthreads/lib/libpthread.a(findfp.o) definition taken

一些其他的警告也可被忽略: 
implicit declaration of function `int strtoll(...)'
implicit declaration of function `int strtoul(...)'

我们还没有让readline可在MIT-pthreads上工作。(这不需要,但是可能某些人有兴趣。) 
4.10 Perl 安装说明
4.10.1 在Unix上安装Perl
Perl对 MySQL的支持借助DBI/DBD客户接口而提供。见20.5  MySQL Perl API。Perl DBD/DBI客户代码要求Perl 5.004或以后版本。如果你有Perl的一个更旧的版本,接口将不能工作。 

MySQL Perl支持也要求你 安装MySQL客户支持。如果你从RPM文件 安装 MySQL,客户程序在客户RPM中,但是客户编程支持在开发者RPM。确定你 安装了后一个RPM 。 

对于版本3.22.8,Perl支持是与主要 MySQL发行版本单独分发。如果你想要 安装Perl支持,你需要的文件能从http://www. MySQL.com/Contrib获得。 

Perl 分发以压缩的tar档案提供,并且有一个类似“MODULE-VERSION.tar.gz”的名字,这里MODULE是模块名字并且VERSION是版本号。你应该得到Data-Dumper、DBI和Msql- MySQL-modules分发并按此次序 安装他们。 安装过程显示出在下面,显示的例子针对Data-Dumper模块, 但是所有3个过程是相同的。 

解包分发到当前目录: 
shell> gunzip < Data-Dumper-VERSION.tar.gz | tar  xvf -
这个命令创建的一个名为“Data-Dumper-VERSION”的目录。 

进入解包分发的顶级目录: 
shell> cd  Data-Dumper-VERSION
构造分发并且编译所有东西: 
shell> perl Makefile.PL
shell> make
shell> make test
shell> make install

make test命令很重要,因为它验证模块正在工作。注意:在你Msql- MySQL-modules 安装期间运行该命令试验接口代码时, MySQL服务器必须正在运行,否则测试将失败。 

无论何时你 安装一个新版本的 MySQL,重建并且重新 安装Msql- MySQL-modules分发是一个好主意, 特别是如果你在升级 MySQL后,观察所有异常,如你的DBI脚本核心倾倒(core dump)。 

如果你没有权限在系统目录下 安装Perl模块,或如果你 安装本地Perl模块,下列参考书可以帮助你: 

http://www.iserver.com/support/contrib/perl5/modules.html

在标题Installing New Modules that Require Locally Installed Modules下面查找。 

4.10.2 在Win32上安装ActiveState Perl
在 Win32 上 安装 ActiveState Perl的 MySQL DBD的模块, 你应该做下列步骤: 

打开一个 shell。 
如果需要,设置HTTP_proxy变量。例如, 你可以试一试:set HTTP_proxy=my.proxy.com:3128 
启动PPM程序:C:perlinppm.pl 
如果你还没有这样做, 安装DBI: install DBI 
如果成功, 安装DBD:: MySQL:http://www. MySQL.com/Contrib/ppd/DBD- MySQL.ppd 
如果你不能使上述步骤工作,你应该 安装MyODBC驱动程序并且通过ODBC连接 MySQL服务器。 

use DBI;
$dbh= DBI->connect("DBI:ODBC:$dsn","$user","$password") || 
  die "Got error $DBI::errstr when connecting to $dsn
";

4.10.3 在Win32上安装MySQL Perl分发
MySQL Perl分发包含DBI、DBD: MySQL和DBD:ODBC。 

从http://www. MySQL.com/download.html得到Win32的Perl分发。 
在C:解压缩分发,这样你得到一个“C:PERL”目录。 
增加目录“C:PERLBIN”到你的路径。 
增加目录“C:PERLBINMSWin32-x86-thread”或“C:PERLBINMSWin32-x86”到你的路径。 
在 DOS shell执行perl -v测试perl的运行。 
4.10.4 使用PerlDBI/DBD接口的问题
如果 Perl 报告它不能找到../ MySQL/ MySQL.so模块,那么问题可能是该Perl不能找到共享库文件“lib MySQLclient.so”。 

你可用下列任何一个方法修正它这: 

用perl Makefile.PL -static而非perl Makefile.PL编译Msql- MySQL-modules分发。 
拷贝lib MySQLclient.so到其他共享库文件所在的目录(可能是“/usr/lib”或“/lib”)。 
在Linux上,你可以把lib MySQLclient.so所在目录的路径名加到“/etc/ld.so.conf”文件中。 
把lib MySQLclient.so所在目录的路径名加到LD_RUN_PATH环境变量中。 
如果你从DBD- MySQL得到下列错误,你可能正在使用gcc(或使用一个旧的用gcc编译的二进制代码): 

/usr/bin/perl: can't resolve symbol '__moddi3'
/usr/bin/perl: can't resolve symbol '__divdi3'

当“ MySQL.so”库文件被构造时候,为链接命令加上-L/usr/lib/gcc-lib/... -lgcc(当你编译Perl客户时检查针对“ MySQL.so”的make输出)。-L选项应该指定“libgcc.a”在你系统上所在目录的路径名。

这个问题的另一个原因可能是Perl和 MySQL都不是用gcc编译的。在这种情况下,你可以都用gcc编译以解决不匹配。 

如果你想要在一个不支持动态链接(象SCO那样)的系统上使用Perl模块,你可以产生包括DBI和DBD- MySQL的Perl的一个静态版本。这种运行方法是你生成一个链接了DBI代码的Perl版本并在最新的Perl上 安装它,然后你使用它来构造附加链接了DBD代码的Perl版本,并且 安装它。 

在 SCO 上,你必须有下列环境变量设置: 

shell> LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib

shell> LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:/usr/progressive/lib:/usr/skunk/lib
shell> LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:/usr/progressive/lib:/usr/skunk/lib
shell> MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:/usr/skunk/man:

首先, 在DBI分发所在目录下运行下列命令,创造包括一个静态链接的Perl DBI: 

shell> perl Makefile.PL LINKTYPE=static
shell> make
shell> make install
shell> make perl

然后你必须 安装新的Perl。make perl的输出将显示正确的你需要执行施行 安装的make的命令。在SCO上,是make -f Makefile.aperl inst_perl MAP_TARGET=perl. 

接下来,在Msql- MySQL-modules分发所在目录下,使用刚才创建的Perl来创建同样包括一个静态链接的PerlDBD:: MySQL的另一个Perl: 

shell> perl Makefile.PL LINKTYPE=static 
shell> make 
shell> make install 
shell> make perl

最后, 你应该 安装这个新的Perl。而且,make perl的输出指出使用的命令。 

4.11 系统特定的问题
下面的章节说明在从源代码分发 安装 MySQL时,发生在特定的系统上并已观察到的一些问题。 

4.11.1 Solaris注意事项
在Solaris上,甚至在你解开 MySQL分发以前,你可能陷入困境!Solaris tar不能处理长文件名字,因此你在打开 MySQL时,可能看到这样的一个错误: 

MySQL-3.22.12-beta/bench/Results/ATIS- MySQL_odbc-NT_4.0-cmp-db2,informix,ms-sql, MySQL,oracle,solid,sybase, 0 bytes, 0 tape blocks
tar: directory checksum error

在这种情况下,你必须使用 GNU tar(gtar) 打开分发。你能在http://www. MySQL.com/Downloads/找到为Solaris的一个预编译的拷贝。 

Sun的原生线程只工作在Solaris 2.5和更高版本上。对于2.4和更早的版本, MySQL将自动地使用 MIT-pthreads 。见4.9 MIT-pthreads 注意事项。 

如果你从配置得到下列错误: 

checking for restartable system calls... configure: error can not run test 
programs while cross compiling

这意味着你的编译器 安装有些问题!在这种情况下,你应该升级编译器到一个更新的版本。你也可以把下列行插入到config.cache文件来解决这个问题: 

ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls='no'}
如果你在一个SPARC上使用Solaris,推荐的编译器是egcs1.1.2 或更新。你能在http://egcs.cygnus.com/找到它。注意:egs1.1.1 和gcc2.8.1 不能在 SPARC 上可靠地工作! 

当使用时egcs1.1.2时,推荐的configure命令行是: 

shell> CC=gcc CFLAGS="-O6" 
       CXX=gcc CXXFLAGS="-O6 -felide-constructors -fno-exceptions -fno-rtti" 
       ./configure --prefix=/usr/local/ MySQL --with-low-memory

如果你有Sun Workshop 4.2 编译器,你能这样运行configure: 

CC=cc CFLAGS="-xstrconst -Xa -xO4 -native -mt" CXX=CC CXXFLAGS="-xO4 -native -noex -mt" ./configure --prefix=/usr/local/ MySQL 

shell> CC=cc CFLAGS="-Xa -fast -xO4 -native -xstrconst -mt" 
       CXX=CC CXXFLAGS="-noex -XO4 -mt" 
       ./configure

你也可以编辑configure脚本改变该行: 
#if !defined(__STDC__) || __STDC__ != 1

为: 
#if !defined(__STDC__)
如果你使用-Xc选项打开__STDC__,Sun编译器不能用 Solaris 的“pthread.h”头文件编译。这是Sun的一个bug。 

如果 MySQLd在运行时发出显示在下面的错误消息,你已经尝试用Sun编译器编译 MySQL,没有启用多线程选择(-mt): 

libc internal error: _rmutex_unlock: rmutex not held

增加-mt到CFLAGS和CXXFLAGS并且再试一试。 

如果你在用gcc编译 MySQL时得到下列错误,它意味着你的gcc没有对你的Solaris版本进行配置! 

shell> gcc -O3 -g -O2 -DDBUG_OFF  -o thr_alarm ...
./thr_alarm.c: In function `signal_hand':
./thr_alarm.c:556: too many arguments to function `sigwait'

在这种情况下正确的做法是得到最新版本的egcs,并且用你当前的gcc编译器编译它!至少对于 Solaris 2.5,几乎所有的gcc二进制版本都有旧的、不可用的包含文件,将破怀使用线程的所有程序的文件(并且可能是其他的程序)! 

Solaris不提供所有系统库的静态版本(libpthreads和libdl),所以你不能用--static编译 MySQL。如果你尝试这样做,你将得到错误: 

ld: fatal: library -ldl: not found

如果太多进程试图很快地连接 MySQLd,你将在 MySQL日志文件中看见这个错误: 

Error in accept: Protocol error

你可以试着用--set-variable back_log=50选项启动服务器作为它的一个解决办法。 

如果你正在链接你自己的 MySQL客户,当你试着执行它时,你可能得到下列错误: 

ld.so.1: ./my: fatal: lib MySQLclient.so.#: open failed: No such file or directory

这个问题能用下列方法之一避免: 

用下列标志链接客户(而不是-Lpath): -Wl,r/full-path-to-lib MySQLclient.so。 
拷贝libmysqclient.so到“/usr/lib”。 
在运行你的客户程序前,把lib MySQLclient.so所在目录的路径名加到LD_RUN_PATH的环境变量中。 
4.11.2 Solaris 2.7 注意事项
通常你能在 Solaris 2.7 上使用 Solaris 2.6 二进制代码。大多数Solaris 2.6 的问题也适用于Solaris 2.7。 

注意: MySQL3.23.4 和更高版本应该能自动检测 Solaris 2.7 并且启用下列问题的解决办法! 

Solaris 2.7 在包括文件中有一些bug,在使用gcc时,你可以看见下列错误: 

/usr/include/widec.h:42: warning: `getwc' redefined
/usr/include/wchar.h:326: warning: this is the location of the previous
definition

如果出现这种情况,你可以做下列事情解决这个问题: 

拷贝/usr/include/widec.h到.../lib/gcc-lib/os/gcc-version/include并且改变第41行: 

#if     !defined(lint) && !defined(__lint)



#if     !defined(lint) && !defined(__lint) && !defined(getwc)

另外,你可以直接编辑“/usr/include/widec.h”。这两种方法,在你进行修正以后,你应该删除“config.cache”并且再运行configure! 

如果当你运行make时,你得到象这样错误,那是因为configure没检测“curses.h”文件(可能因为/usr/include/widec.h的错误): 

In file included from  MySQL.cc:50:
/usr/include/term.h:1060: syntax error before `,'
/usr/include/term.h:1081: syntax error before `;'

解决它的方案是做下列步骤之一: 

如上所述编辑“/usr/include/widec.h”并且再次运行configure。 
从“config.h”文件删除#define HAVE_TERM行并再次运行make。 
用CFLAGS=-DHAVE_CURSES CXXFLAGS=-DHAVE_CURSES ./configure进行配置。 
4.11.3 Solaris x86 注意事项
如果你正在在 Solaris x86上使用gcc或egcs,并且你碰到了在装载时的核心倾倒(core dump)问题,你应该使用下列configure命令: 

shell> CC=gcc CFLAGS="-O6 -fomit-frame-pointer" 
       CXX=gcc 
       CXXFLAGS="-O6 -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" 
       ./configure --prefix=/usr/local/ MySQL

用libstdc++库和与C++异常处理来避免这个问题。 

如果这没有帮助,你应该编译一个调试版本并且用一个踪迹文件运行它或在gdb下运行它。见G.1 调试一个  MySQL 服务器。 

4.11.4 SunOS 4 注意事项
在 SunOS 4 上, 需要MIT-pthreads 编译 MySQL,反过来这意味着你将需要GNU make。 

一些SunOS 4系统的动态库和libtool有问题。你可以使用下列configure行来避免这个问题: 

shell> ./configure --disable-shared --with- MySQLd-ldflags=-all-static

当编译readline时,你可能得到关于重复定义的警告,这些可以被忽略。 

当编译 MySQLd时候, 将有一些implicit declaration of function警告,这些可以被忽略。 

4.11.5 Linux 注意事项(所有Linux版本)
MySQL在Linux上使用 LinuxThreads 。如果你正在使用一个没有glibc2的老的Linux版本,你必须在尝试编译 MySQL安装LinuxThreads。http://www. MySQL.com/Downloads/Linux 

注意:但你做INSERT DELAYED时,所用的包括2.1.1及以前的glibc版本在pthread_mutex_timedwait处理上有一个致命错误,如果你正在使用INSERT DELAYED,你必须把下列补丁加到你的glibc库中:http://www. MySQL.com/Downloads/Patches/glibc-pthread_cond_timedwait.patch。 MySQL 3.23.7包含了对这个错误的一个临时解决办法。 

如果你不能启动 MySQLd或如果 MySQL_install_db不工作,请继续读下去!这仅发生在有LinuxThreads问题或libc/glibc库为题的Linux系统上。有很多简单的解决办法让 MySQL工作!最简单是使用针对Linux x86的二进制版本的 MySQL(不是RPM),这个版本的一个好的方面是它可能比你编译你自己的任何版本快10%!见10.2.1 编译和链接如何影响  MySQL 的速度。 

二进制分发的一个已知问题是与使用libc的更老的Linux系统(如RedHat 4.x 或 Slackware),你将得到有关主机名解决的一些非致命问题。见4.6.3.1 Linux注意事项。 

使用libc.so.5.3.12,myisamchk将挂起,升级到最新libc以解决这个问题。 

当使用 LinuxThreads 时,你将看到最少 3 进程在运行。这些事实上的线程,对LinuxThreads管理器将有一个线程,一个线程处理连接,还有一个线程处理告警和信号。 

如果你用ps看到了一个死掉的 MySQLd守护进程,这通常意味着你发现了 MySQL里面的一个错误或你有一个被破坏的数据库表。见18.1 如果 MySQL总是崩溃怎么办。 

如果你正在使用LinuxThreads并且 MySQLadmin shutdown不工作,你必须升级到 LinuxThreads 0.7.1 或更新。 

如果你正在使用 RedHat ,你可能得到象这样的错误: 

/usr/bin/perl is needed...
/usr/sh is needed...
/usr/sh is needed...

如果是这样,你应该升级rpm版本到“rpm-2.4.11-1.i386.rpm”和“rpm-devel-2.4.11-1.i386.rpm”(或以后)。 

你能从ftp://ftp.redhat.com/updates/4.2/i386得到RedHat 4.2的库文件升级,或对其他分发http://www.sunsite.unc.edu/pub/Linux/distributions/redhat/code/rpm/。 

如果你正在链接你自己的 MySQL客户并且得到错误: 

ld.so.1: ./my: fatal: lib MySQLclient.so.4: open failed: No such file or directory

当执行它们时,这个问题可用下列方法之一避免: 

用下列标志链接客户(而不是-Lpath): -Wl,r/path-lib MySQLclient.so。 
拷贝libmysqclient.so到“/usr/lib”。 
在运行你的客户程序前,把lib MySQLclient.so所在目录的路径名加到LD_RUN_PATH的环境变量中。 
如果你正在使用 Fujitsu 编译器(fcc / FCC),编译 MySQL你将有一些问题,因为 Linux 头文件面向gcc。 

下列configure行应该与fcc/FCC工作: 

CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE -DCONST=const 
-DNO_STRTOLL_PROTO" CXX=FCC CXXFLAGS="-O -K fast -K lib  -K omitfp 
-K preex --no_exceptions --no_rtti -D_GNU_SOURCE -DCONST=const 
-Dalloca=__builtin_alloca -DNO_STRTOLL_PROTO '-D_EXTERN_INLINE=static __inline'" 
./configure --prefix=/usr/local/ MySQL --enable-assembler 
--with- MySQLd-ldflags=-all-static --disable-shared --with-low-memory

4.11.5.1 Linux-x86 注意事项
MySQL要求libc版本 5.4.12 或更新,已知可工作在libc 5.4.46。glibc版本2.0.6和以后版本应该也工作。使用RedHat的glibc RPM有一些问题,所以如果你有问题,检查是否有任何更新!glibc2.0.7-19和2.0.7-29 RPM已知可以工作。 

在一些更老的 Linux 分发上,configure可能产生象这样的一个错误: 

Syntax error in sched.h. Change _P to __P in the /usr/include/sched.h file.
See the Installation chapter in the Reference Manual.

按照错误消息所说的去做,并且给只有一条下划线的_P宏增加一个额外下划线 ('__P'), 然后再试一试。 

在编译时,你可能得到一些警告;显示在下面的那些可以被忽略: 

MySQLd.cc -o objs-thread/ MySQLd.o
MySQLd.cc: In function `void init_signals()':
MySQLd.cc:315: warning: assignment of negative value `-1' to `long unsigned int'
MySQLd.cc: In function `void * signal_hand(void *)':
MySQLd.cc:346: warning: assignment of negative value `-1' to `long unsigned int'

在Debian GNU/Linux上,如果你想要在系统启动时自动启动 MySQL,做下列命令: 

shell> cp support-files/ MySQL.server /etc/init.d/ MySQL.server
shell> /usr/sbin/update-rc.d  MySQL.server defaults 99

MySQL.server可以在 MySQL 安装目录的“share/ MySQL”目录下面找到, 或在 MySQL源代码树的“support-files”目录下找到。 

如果 MySQLd在它启动时总是核心倾倒(core dump), 问题可能是你有一个老版本的“/lib/libc.a”,重命名它,然后删除“sql/ MySQLd”并且重新make install再试一试。这个问题在一些 Slackware  安装上被报告了。有最新版本的glibc的RedHat 5.0也有一些类似的问题。见4.11.5.2 RedHat 5.0 注意事项。 

如果再链接 MySQLd时,你得到下列错误, 它意味着你的“libg++.a”没有正确 安装: 

/usr/lib/libc.a(putc.o): In function `_IO_putc':
putc.o(.text+0x0): multiple definition of `_IO_putc'

像这样运行configure,你能避免使用“libg++.a”: 

shell> CXX=gcc ./configure

4.11.5.2 RedHat 5.0 注意事项
如果你在RedHat上有 MySQL的任何问题,你应该开始升级glibc到最新可能的版本! 

如果你 安装所有的官方RedHat补丁(包括glibc-2.0.7-19和glibc-devel-2.0.7-19), MySQL的二进制代码和源代码分发运行应该没有任何麻烦! 

因为在glibc2.0.5里面有关如何释放pthread_key_create变量有一个错误,更新是需要的。用glibc2.0.5,你必须使用一个静态地链接的 MySQL二进制分发。如果你想要从源代码编译,你必须 安装来自于http://www. MySQL.com/Downloads/Linux 的LinuxThreads修正版本或升级你的glibc。 

如果你有一个不正确的glibc或LinuxThreads版本,其结果是 MySQLd在每个连接以后崩溃。例如, MySQLadmin version完成后, MySQLd将崩溃! 

另一个不正确的库的症状是当 MySQLd启动时,马上崩溃。在一些Linux系统上,这个问题可以通过这样的配置来修正: 

shell> ./configure -- with- MySQLd-ldflags=-all-static
在Redhat 5.0上,容易的方法是 安装glibc2.0.7-19 RPM并运行configure --with- MySQLd-ldflags=-all-static选项。 

对于glibc2.0.7的源代码分发,容易运用并被 MySQL测试的一个补丁可以在下面找到: 

http://www. MySQL.com/Download/Linux/glibc-2.0.7-total-patch.tar.gz

如果当你构造 MySQL时,你有类似于这些崩溃的经历, 你总能下载到最新的 MySQL二进制版本。这是静态链接的以避免库冲突而且应该在所有的Linux系统上工作! 

MySQL自带一个内部的调试器可以有很多信息产生踪迹文件,能被用来发现并解决大量不同的问题。见G.1 调试一个 MySQL服务器。

4.11.5.3 RedHat 5.1 注意事项
RedHat 5.1的glibc(glibc2.0.7-13 )有一个内存缺陷,所以要得到一个稳定的 MySQL版本,你必须升级glibc到2.0.7-19、降级glibc或使用一个 MySQLd的二进制版本。如果你不这样做,你将碰到内存问题(存储器溢出,等等, 等等)。在这种情况下,最常见的错误是: 

Can't create a new thread (errno 11). If you are not out of available
memory, you can consult the manual for any possible OS dependent bug

在你升级到glibc2.0.7-19以后,你可以用动态链接(缺省)配置 MySQL,但是在你从源代码 安装了glibc 2.0.7-19之前,你不能运行configure --with- MySQLd-ldflags=-all-static选项!

你可以用rpm -q glibc检查你有glibc哪个版本。 

4.11.5.4 Linux-SPARC 注意事项
在一些实现中,readdir_r()被破坏了。其症状是SHOW DATABASES总是返回一个空集合。这可以通过在编译前从“config.h”中删除HAVE_READDIR_R进行更正。 

有些问题将需要给你的Linux 安装打补丁。补丁可在http://www. MySQL.com/patches/Linux-sparc-2.0.30.diff找到,这个补丁是针对Linux分发“sparclinux-2.0.30.tar.gz”,它们可从vger.rutgers.edu(一个从来没有与官方的2.0.30版合并的版本)得到。你也必须 安装LinuxThreads 0.6或更新。 

感谢jacques@solucorp.qc.ca提供这个信息。 

4.11.5.5 Linux-Alpha注意事项
在Linux-Alpha上的大问题仍然是在这个平台上的glibc的线程有一些问题。你应该从得到你能找到的最新glibc版本开始。 

注意:在你运行任何使用线程的程序之前(象 MySQLd、thr_alarm或thr_lock),你应该增减共享存储器的限制(用ulimit)。如果你忘记这样做, MySQL基准测试已知是失败的! 

用下列命令配置 MySQL: 

shell> CC=gcc CCFLAGS="-Dalpha_linux_port" 
       CXX=gcc CXXFLAGS="-O3 -Dalpha_linux_port -felide-constructors -fno-exceptions -fno-rtti" 
       ./configure --prefix=/usr/local/ MySQL

试试编译mysys/thr_lock和mysys/thr_alarm,测试这些程序的运行!(不用参数调用每一个,如果一切正常,每个应该以test_succeeded结束。)

安装 MySQL以后,在safe_ MySQLd里去掉ulimit命令的注释,并加入选项以增加共享存储器。 

注意对 MySQL来说,Linux-Alpha仍然是一个alpha质量的平台。用最新glibc,你有一个让它工作的很好机会。 

如果你用信号方面的问题( MySQL出人意料地在高负载下死掉),你可能找到了一个线程和信号有关的OS错误。在这种情况下,你可以告诉 MySQL如下配置以不使用信号: 

shell> CFLAGS=-DDONT_USE_THR_ALARM 
       CXXFLAGS=-DDONT_USE_THR_ALARM 
       ./configure ...

这不影响 MySQL性能,但是有副作用,就是你不能用 MySQLadmin kill或 MySQLadmin shutdown杀死在一个连接上“睡眠”的客户。相反,当客户发出下一个命令时,它将死掉。 

4.11.5.6 MkLinux 注意
MySQL应该能工作在有最新glibc包的MkLinux上(用glibc2.0.7测试过)。 

4.11.5.7 Qube2 Linux注意事项
为了让 MySQL在Qube2上工作,(Linux Mips),你需要最新的glibc库(glibc-2.0.7-29C2已知可工作)。你也必须使用egcsC++编译器(egcs-1.0.2-9或更新)。 

4.11.6 Alpha-DEC-Unix 注意事项
当在Digital UNIX下编译线程程序时,文档推荐对于cc和cxx使用-pthread选项而且库文件用-lmach -lexc(除了-lpthread外)。你应该象下面这样运行configure: 

shell> CC="cc -pthread" CXX="cxx -pthread -O" 
       ./configure --with-named-thread-libs="-lpthread -lmach -lexc -lc"

当编译 MySQLd时,你可能看见这样一些警告: 

MySQLd.cc: In function void handle_connections()':
MySQLd.cc:626: passing long unsigned int *' as argument 3 of
accept(int,sockadddr *, int *)'

你可以安全地忽略这些警告,他们的发生是因为configure只能检测出错误,而不是警告。 

如果你直接从命令行启动服务器,当你退出时,你可能有死掉的问题。(当你退出时,你的重要进程收到一个SIGHUP信号),如果如此,试着象这样启动服务器: 

shell> nohup   MySQLd [options] &

nohup使得跟随它的命令忽视从终端发来的任何SIGHUP信号了。另外,通过运行safe_ MySQLd启动服务器,它为你使用nohup调用 MySQLd。 

4.11.7 Alpha-DEC-OSF1注意事项
如果你有编译问题并 安装了DECCC和gcc,尝试这样运行configure: 

shell> CC=cc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 
       ./configure --prefix=/usr/local/ MySQL

如果你得到“c_asm.h”文件的问题,你可以创建并使用一个“哑(dummy)”“c_asm.h”文件: 

shell> touch include/c_asm.h
shell> CC=gcc CFLAGS=-I./include 
       CXX=gcc CXXFLAGS=-O3 
       ./configure --prefix=/usr/local/ MySQL

在OSF1 V4.0D和编译器"DEC C V5.6-071 on Digital UNIX V4.0 (Rev. 878)" 上,编译器有了一些奇怪的行为(未定义asm标志)。/bin/ld好象也被破坏(当链接 MySQLd时,发生_exit undefined问题)。在这个系统上,从OSF 4.0C的版本替换了/bin/ld后,我们设法用下列configure命令行编译 MySQL,: 

shell> CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/ MySQL 

用Digital编译器“C++ V6.1-029”,下列命令应该工作: 

CC=cc -pthread
CFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all -arch host
CXX=cxx -pthread
CXXFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all -arch host
export CC CFLAGS CXX CXXFLAGS
./configure --prefix=/usr/ MySQL/ MySQL --with-low-memory --enable-large-files 
--with- MySQLd-ldflags=-all-static --disable-shared --with-named-thread-libs="-lmach -lexc -lc"

在OSF1的某些版本中,alloca()函数被破坏,通过删除定义'HAVE_ALLOCA'的“config.h”的行更正它。 

alloca()函数也可能在/usr/include/alloca.h里面有一个不正确的原型,源于此的警告可以忽略。 

configure将自动地使用下列线程库: --with-named-thread-libs="-lpthread -lmach -lexc -lc"。

当使用gcc时,你也可以试试这样运行configure: 

shell> CFLAGS=-D_PTHREAD_USE_D4  CXX=gcc  CXXFLAGS=-O3  ./configure ……
如果你的信号有问题( MySQL出人意料地在高负载下死掉),你可能找到了一个线程和信号有关的OS错误。在这种情况下,你可以告诉 MySQL如下配置以不使用信号: 

shell> CFLAGS=-DDONT_USE_THR_ALARM 
       CXXFLAGS=-DDONT_USE_THR_ALARM 
       ./configure ...

这不影响 MySQL性能,但是有负面效应,就是你不能用 MySQLadmin kill或 MySQLadmin shutdown杀死在一个连接上“睡眠”的客户。相反,当客户发出下一个命令时,它将死掉。 

4.11.8 SGI-Irix 注意事项
你可能需要在运行configure后且在编译前去掉在“config.h”里面一些东西的定义(underfine)。 

在一些Irix实现中,alloca()函数被破坏。如果 MySQLd服务器死于一些SELECT语句,把“config.h”定义HAVE_ALLOC和HAVE_ALLOCA_H的行删除即可。如果 MySQLadmin create不工作,把“config.h”定义HAVE_READDIR_R的行删除,你也可能必须删除HAVE_TERM_H行。 

SGI推荐你将本页上的所有补丁作为一个整体来 安装:http://support.sgi.com/surfzone/patches/patchset/6.2_indigo.rps.html

最小地,你应该 安装最新的核心卷(rollup)、最新的rld卷和最新的libc卷。 

很明确,对于pthreads支持,你需要本页上所有的POSIX补丁: 

http://support.sgi.com/surfzone/patches/patchset/6.2_posix.rps.html

如果在编译“ MySQL.cc”时,你得到类似于下面的错误: 

"/usr/include/curses.h", line 82: error(1084): invalid combination of type

那么,在你的 MySQL源代码树的顶级目录打下列命令: 

shell> extra/replace bool curses_bool < /usr/include/curses.h > include/curses.h
shell> make

应该也有安排上的问题报告。如果只有一个线程正在运行,事情会变慢的。通过启动另外一个客户来避免它,这可以导致此后其他线程的执行速度增加2到10倍。这是Irix线程难以理解的问题;你可能必须临时准备找出解决方案直到它能被修正。 

如果你正在用gcc编译,你可以使用下列configure命令: 

shell> CC=gcc CXX=gcc CXXFLAGS=-O3 
       ./configure --prefix=/usr/local/ MySQL --with-thread-safe-client --with-named-thread-libs=-lpthread

4.11.9 FreeBSD 注意事项
对于运行 MySQL,FreeBSD 3.x是被推荐的,因为其线程包是更加完整。 

最容易因此是比较受喜欢的 安装方法是使用 MySQL服务者和  MySQL客户的移植,可从http://www.freebsd.org得到。

使用这些给你的东西: 

一个全优化的工作在你的FreeBSD版本上的 MySQL。 
自动配置和构造。 
启动脚本 安装在/usr/local/etc/rc.d。 
用pkg_info -L察看哪个文件被 安装的能力,并且如果你在那台机器上不再想要 MySQL,用pkg_delete完全删除它们。 
建议在FreeBSD 2.x版上使用 MIT-pthreads,在版本3和以上版本用原生线程。在一些2.2.x的以后版本使用原生线程运行是可能的,但是你可能碰到 MySQLd关掉的问题。 

确定让你的名字解析程序 安装正确,否则当连接 MySQLd时,你可能会经历解析延时或失败。 

保证在“/etc/hosts”文件中的localhost入口是正确的(否则你与数据库连接时将有问题)。“/etc/hosts”文件应该以一行开始: 

127.0.0.1  localhost  localhost.your.domain
如果你注意到configure使用 MIT-pthreads,你应该阅读MIT-pthreads注意事项,见4.9 MIT-pthreads 注意事项。 

如果你从make install得到一个它不能找到“/usr/include/pthreads”的错误,configure没有检测出你需要 MIT-pthreads。通过执行这些命令修正它: 

shell> rm config.cache
shell> ./configure --with-mit-threads

FreeBSD make的行为与make GNU略有不同。如果你有make相关问题,你应该 安装GNU make。 

FreeBSD也已知有一个非常低的缺省文件句柄限制。见18.11 文件没找到。去掉在safe_ MySQLd中的ulimit -n 小节的注释或在/etc/login.conf为 MySQLd用户提高限制(并用cap_mkdb /etc/login.conf重建它),如果你不使用缺省,也要保证你为此用户在口令文件(用法:chpass  MySQLd-user-name )。

你用SELECT NOW()返回GMT形式的值而不是你的本地时间,如果有这样的问题,你必须设定TZ环境变量为你的当前时区的。这应该设置服务器运行的环境,例如在safe_ MySQLd或 MySQL.server里。 

为了得到一个安全并且稳定的系统,你应该只仅使用被标记为-STABLE的FreeBSD内核。 

4.11.10 NetBSD 注意事项
为了NetBSD上编译,你需要GNU make,否则当make试图在C++文件上运行lint时,编译将崩溃。 

4.11.11 OpenBSD 2.5 注意事项
在OpenBSD 2.5上,你可以用下列选项编译带原生线程的 MySQL: 

CFLAGS=-pthread  CXXFLAGS=-pthread  ./configure -- with-mit-threads=no
4.11.12 BSD/OS 注意事项
4.11.12.1 BSD/OS 2.x 注意事项
如果在编译 MySQL时,你得到下列错误, 你对虚存的ulimit值是太低了: 

item_func.h: In method `Item_func_ge::Item_func_ge(const Item_func_ge &)':
item_func.h:28: virtual memory exhausted
make[2]: *** [item_func.o] Error 1

试试使用ulimit -v 80000并再运行make。如果这还不行并且你正在使用bash,试试换到csh或sh;一些BSDI用户报告了与bash和ulimit有关问题。 

如果你正在使用gcc,你也可能必须为configure使用--with-low-memory标志才能编译“sql_yacc.cc”。 

你用SELECT NOW()返回GMT形式的值而不是你的本地时间,如果有这样的问题,你必须设定TZ环境变量为你的当前时区的。这应该为服务器运行的环境设置,例如在safe_ MySQLd或 MySQL.server里。 

4.11.12.2 BSD/OS 3.x 注意事项
升级到BSD/OS 3.1。如果那不可能, 安装BSDI patch M300-038。 

在配置 MySQL时,使用下列命令: 

shell> env CXX=shlicc++ CC=shlicc2 
       ./configure 
           --prefix=/usr/local/ MySQL 
           --localstatedir=/var/ MySQL 
           --without-perl 
           --with-unix-socket-path=/var/ MySQL/ MySQL.sock

下列也已知可用: 

shell> env CC=gcc CXX=gcc CXXFLAGS=-O3 
       ./configure 
           --prefix=/usr/local/ MySQL 
           --with-unix-socket-path=/var/ MySQL/ MySQL.sock

如果你愿意,你可以改变目录地点,或不指定任何地点而使用缺省。 

如果你在重负再下的性能有问题,试试使用对safe_ MySQLd使用--skip-thread-priority选项!这将以相同优先级运行所有线程;在BSDI 3.1上,这得到较好的性能(至少直到BSDI修正其线程调度程序)。 

如果你在编译时得到virtual memory exhausted错误,试试使用ulimit -v 80000并再运行make。如果这还不行并且你正在使用bash,试试换到csh或sh;一些BSDI用户报告了与bash和ulimit有关问题。 

4.11.12.3 BSD/OS 4.x 注意事项
BSDI 4.x有一些线程有关的错误。如果你想要在这上面使用 MySQL,你应该 安装所有与线程相关的补丁,至少应该 安装M400-023。 

4.11.13 SCO 注意事项
当前的移植仅在“sco3.2v5.0.4”和“sco3.2v5.0.5”系统上被测试,在“sco 3.2v4.2”一个移植也有很大进展。 

此时在OpenServer上推荐的编译器是gcc 2.95.2,用它你应该能编译 MySQL: 

CC=gcc CXX=gcc ./configure ... (options)

对于OpenServer 5.0.X,你需要在Skunkware 95上使用GDS(95q4c),这是必要的,因为在Skunkware 97上的GNU gcc 2.7.2 没有GNU as。你也可以使用egcs1.1.2或更新:http://www.egcs.com/。如果你正在使用egcs1.1.2,你必须执行下列命令: 
shell> cp -p /usr/include/pthread/stdtypes.h 
/usr/local/lib/gcc-lib/i386-pc-sco3.2v5.0.5/egcs-2.91.66/include/pthread/

对该产品和开发系统,你需要GCC 2.5.?的移植。他们在这个SCO UNIX版本上是必需的,你不能只使用GCC Dev系统。 
你应该得到 FSU Pthreads 包并且首先 安装它,它可在http://www.cs.wustl.edu/~ schmidt/ACE_wrappers/FSU-threads.tar.gz找到。你也可以从ftp://www. MySQL.com/pub/ MySQL/Downloads/SCO/FSU-threads-3.5c.tar.gz得到一个预编译的包。 
FSU Pthreads能用带tcpip的SCO UNIX 4.2编译,或OpenServer 3.0或Open Desktop 3.0(OS 3.0 ODT 3.0), 安装带有使用一个GCC 2.5.X ODT的SCO开发系统,或对OS 3.0你将需要一个GCC 2.5.?的良好移植。 没有一个良好的移植会有很多问题。对这个产品的移植需要SCO UNIX开发系统,没有它,你正缺少所需的库和链接器。 
为了在你的系统上构造FSU Pthreads,做下列工作: 
在“thread/src”目录下运行./configure并且选择SCO OpenServer选项。这个命令拷贝“Makefile.SCO5”到“Makefile”。 
运行make。 
为了在缺省的“/usr/include”目录 安装,作为root登录,然后cd 到“thread/src”目录,并运行make install。 
记得在制作 MySQL时要使用GNU make。 
在OSR 5.0.5上,你应该使用下列配置命令行: 
shell> CC="gcc -DSCO" CXX="gcc -DSCO" ./configure

需要-DSCO帮助配置正确检测一些线程函数。如果你忘记-DSCO,在编译时,你将得到下列错误消息: 
my_pthread.c: In function `my_pthread_mutex_init':
my_pthread.c:374: `pthread_mutexattr_default' undeclared (first use this function)


如果你不是作为root启动safe_ MySQLd,你将可能每进程只有缺省的110个打开文件。 MySQLd将在日志文件写下关于此的注解。 
用SCO 3.2 V5.0.5,你应该使用一个FSU Pthreads版本3.5c或更新。下列configure命令应该工作: 
shell> CC="gcc -belf" ./configure --prefix=/usr/local/ MySQL --disable-shared

用SCO 3.2V4.2,你应该使用一个FSU Pthreads版本3.5c或更新。下列configure命令应该工作: 
shell> CFLAGS="-D_XOPEN_XPG4" CXX=gcc CXXFLAGS="-D_XOPEN_XPG4" 
       ./configure 
           --with-debug --prefix=/usr/local/ MySQL 
           --with-named-thread-libs="-lgthreads -lsocket -lgen -lgthreads" 
           --with-named-curses-libs="-lcurses"

你可能得到一些包括文件的某些问题。在这种情况下,你能在ftp://www. MySQL.com/pub/ MySQL/Downloads/SCO/SCO-3.2v4.2-includes.tar.gz找到新的SCO特定的包括文件。你应该在你的 MySQL源代码树的“include”目录下打开这个文件。 

SCO开发注意事项: 

MySQL应该自动地检测FSU Pthreads并且用-lgthreads -lsocket -lgthreads选项链接 MySQLd。 
SCO开发库在FSU Pthreads是重入(reentrant)的。SCO宣称它的库函数是重入的,因此他们一定在FSU Pthreads中是重入的。在 OpenServer上的 FSU Pthreads 试图使用SCO方案制作重入的库。 
FSU Pthreads(至少在www. MySQL.com的版本)链接了GNU malloc,如果你甭到内存使用的问题,确定“gmalloc.o”被包含在“libgthreads.a”和“libgthreads.so”中。 
在FSU Pthreads中,下列系统调用是pthreads感知的:read()、write()、getmsg()、connect()、accept()、select()和wait()。 
如果你想要在SCO上 安装DBI,你必须编辑在DBI-xxx和每个子目录下的“Makefiles”: 

OLD:                                  NEW:
CC = cc                               CC = gcc -belf
CCCDLFLAGS = -KPIC -W1,-Bexport       CCCDLFLAGS = -fpic
CCDLFLAGS = -wl,-Bexport              CCDLFLAGS =

LD = ld                               LD = gcc -belf -G -fpic
LDDLFLAGS = -G -L/usr/local/lib       LDDLFLAGS = -L/usr/local/lib
LDFLAGS = -belf -L/usr/local/lib      LDFLAGS = -L/usr/local/lib

LD = ld                               LD = gcc -belf -G -fpic
OPTIMISE = -Od               OPTIMISE = -O1

OLD:
CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include

NEW:
CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include

这时如果他们用icc或cc编译,Perl动态装载器(dynaloader)将不装载DBI模块。 

当用cc编译时,Perl工作得最好。 

4.11.14 SCO Unixware 7.0 注意事项
你必须使用一个最新的 MySQL版本,至少是3.22.13,因为该版本在Unixware下面解决一些移植性问题。 

在UnixWare 7.0.1上,我们可用下列configure的命令编译 MySQL: 

shell> CC=cc CXX=CC ./configure --prefix=/usr/local/ MySQL

4.11.15 IBM-AIX 注意事项
xlC自动检测从Autoconf丢失,当使用 IBM 编译器时,需要如下这样一个configure命令: 

shell> CC="xlc_r -ma -O3 -qstrict -DHAVE_INT_8_16_32" 
CXX="xlC_r -ma -O3 -qstrict -DHAVE_INT_8_16_32" 
./configure

如果你正在使用egcs编译 MySQL,你必须使用-fno-exceptions标志,因为egcs得异常处理不是对线程安全的!(这用egcs1.1被测试过)。在 AIX 上使用egcs和gcc,我们推荐下列configure行: 

shell> CXX=gcc 
       CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti" 
       ./configure --prefix=/home/monty --with-debug --with-low-memory

如果你用信号问题( MySQL出人意料地在高负载下死掉),你可能发现了与线程和信号有关的一个OS错误。在这种情况下,你可以用如下配置告诉 MySQL不使用信号: 

shell> CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc 
       CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti -DDONT_USE_THR_ALARM" 
       ./configure --prefix=/home/monty --with-debug --with-low-memory

这不影响 MySQL性能,但是有副作用,就是你不能用 MySQLadmin kill或 MySQLadmin shutdown杀死在一个连接上“睡眠”的客户。相反,当客户发出下一个命令时,它将死掉。 

在 AIX 的一些版本上用libbind.a链接使得getservbyname核心倾倒(core dump),这是AIX的一个bug并且应该被报告到IBM了。 

4.11.16 HP-UX 注意事项
在 HP-UX 上编译 MySQL时,有一些“小”问题。我们推荐您使用gcc而不是HP-UX自己的编译器,因为gcc生成更好一些的代码! 

我们推荐在HP-UX上使用gcc 2.95,不使用高度优化标志(类似-O6),因为这在 HP-UX 上可能不安全。 

注意MIT-pthreads不能用 HP-UX 编译器编译,因为它不能编译.S(器)文件。 

下列配置行应该工作: 

CFLAGS="-DHPUX -I/opt/dce/include" CXXFLAGS="-DHPUX 
-I/opt/dce/include -felide-constructors -fno-exceptions 
-fno-rtti" CXX=gcc ./configure --with-pthread 
--with-named-thread-libs='-ldce' --prefix=/usr/local/ MySQL --disable-shared

如果你正在编译gcc2.95本身,如果你想要用MIT-pthreads编译 MySQL,你不应该用DCE库(libdce.a或libcma.a)链接它。如果你混合DCE和MIT-pthreads包,你将得到一个使得你不能连接的 MySQLd。当你编译gcc2.95时,删除DCE库! 

4.11.17 MacOS X 注意事项
顺着MacOS X移植的链接可以得到能让 MySQL载MacOS上工作的信息,见1.8 有用的 MySQL相关链接。 

MySQL3.23.7 应该包括所有必要的MacOSX上配置它的补丁。然而在配置 MySQL前,你必须首先 安装来自MacOSX 的 MySQL服务器的pthread 包。 

你可能也想要把一个别名加到你的shell资源文件中以便从命令行访问 MySQLMySQLadmin。 

alias  MySQL '/usr/local/ MySQL/bin/ MySQL'
alias  MySQLadmin '/usr/local/ MySQL/libexec/ MySQLadmin'

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
MySQL 5.1参考手册 目录 前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. MaxDB的历史 1.5.3. MaxDB的特性 1.5.4. 许可和支持 1.5.5. MaxDB和MySQL之间的特性差异 1.5.6. MaxDB和MySQL之间的协同性 1.5.7. 与MaxDB有关的链接 1.6. MySQL发展大事记 1.6.1. MySQL 5.1的新特性 1.7. MySQL信息源 1.7.1. MySQL邮件列表 1.7.2. IRC(在线聊天系统)上的MySQL社区支持 1.7.3. MySQL论坛上的MySQL社区支持 1.8. MySQL标准的兼容性 1.8.1. MySQL遵从的标准是什么 1.8.2. 选择SQL模式 1.8.3. 在ANSI模式下运行MySQL 1.8.4. MySQL对标准SQL的扩展 1.8.5. MySQL与标准SQL的差别 1.8.6. MySQL处理约束的方式 2. 安装MySQL 2.1. 一般安装问题 2.1.1. MySQL支持的操作系统 2.1.2. 选择要安装MySQL分发版 2.1.3. 怎样获得MySQL 2.1.4. 通过MD5校验和或GnuPG验证软件包的完整性 2.1.5. 安装布局 2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装安装MySQL 2.3.4. 使用MySQL安装向导 2.3.5. 使用配置向导 2.3.6. 通过非安装Zip文件安装MySQL 2.3.7. 提取安装档案文件 2.3.8. 创建选项文件 2.3.9. 选择MySQL服务器类型 2.3.10. 首次启动服务器 2.3.11. 从Windows命令行启动MySQL 2.3.12. 以Windows服务方式启动MySQL 2.3.13. 测试MySQL安装 2.3.14. 在Windows环境下对MySQL安装的故障诊断与排除 2.3.15. 在Windows下升级MySQL 2.3.16. Windows版MySQL同Unix版MySQL对比 2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL 2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译问题 2.8.5. MIT-pthreads注意事项 2.8.6. 在Windows下从源码安装MySQL 2.8.7. 在Windows下编译MySQL客户端 2.9. 安装后的设置和测试 2.9.1. Windows下安装后的过程 2.9.2. Unix下安装后的过程 2.9.3. 使初始MySQL账户安全 2.10. 升级MySQL 2.10.1. 从5.0版升级 2.10.2. 升级授权表 2.10.3. 将MySQL数据库拷贝到另一台机器 2.11. 降级MySQL 2.12. 具体操作系统相关的注意事项 2.12.1. Linux注意事项 2.12.2. Mac OS X注意事项 2.12.3. Solaris注意事项 2.12.4. BSD注意事项 2.12.5. 其它Unix注意事项 2.12.6. OS/2注意事项 2.13. Perl安装注意事项 2.13.1. 在Unix中安装Perl 2.13.2. 在Windows下安装ActiveState Perl 2.13.3. 使用Perl DBI/DBD接口的问题 3. 教程 3.1. 连接与断开服务器 3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 3.4. 获得数据库和表的信息 3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. 根据两个键搜索 3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找所有未分发的孪生项 3.7.2. 显示孪生对状态的表 3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器服务器启动脚本 5.1.1. 服务器端脚本和实用工具概述 5.1.2. mysqld-max扩展MySQL服务器 5.1.3. mysqld_safe:MySQL服务器启动脚本 5.1.4. mysql.server:MySQL服务器启动脚本 5.1.5. mysqld_multi:管理多个MySQL服务器的程序 5.2. mysqlmanager:MySQL实例管理器 5.2.1. 用MySQL实例管理器启动MySQL服务器 5.2.2. 连接到MySQL实例管理器并创建用户账户 5.2.3. MySQL实例管理器命令行选项 5.2.4. MySQL实例管理器配置文件 5.2.5. MySQL实例管理器识别的命令 5.3. mysqld:MySQL服务器 5.3.1. mysqld命令行选项 5.3.2. SQL服务器模式 5.3.3. 服务器系统变量 5.3.4. 服务器状态变量 5.4. mysql_fix_privilege_tables:升级MySQL系统表 5.5. MySQL服务器关机进程 5.6. 一般安全问题 5.6.1. 通用安全指南 5.6.2. 使MySQL在攻击者面前保持安全 5.6.3. Mysqld安全相关启动选项 5.6.4. LOAD DATA LOCAL安全问题 5.7. MySQL访问权限系统 5.7.1. 权限系统的作用 5.7.2. 权限系统工作原理 5.7.3. MySQL提供的权限 5.7.4. 与MySQL服务器连接 5.7.5. 访问控制, 阶段1:连接核实 5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户管理 5.8.1. MySQL用户名和密码 5.8.2. 向MySQL增加新用户账户 5.8.3. 从MySQL删除用户账户 5.8.4. 限制账户资源 5.8.5. 设置账户密码 5.8.6. 使你的密码安全 5.8.7. 使用安全连接 5.9. 备份与恢复 5.9.1. 数据库备份 5.9.2. 示例用备份与恢复策略 5.9.3. 自动恢复 5.9.4. 表维护和崩溃恢复 5.9.5. myisamchk:MyISAM表维护实用工具 5.9.6. 建立表维护计划 5.9.7. 获取关于表的信息 5.10. MySQL本地化和国际应用 5.10.1. 数据和排序用字符集 5.10.2. 设置错误消息语言 5.10.3. 添加新的字符集 5.10.4. 字符定义数组 5.10.5. 字符串比较支持 5.10.6. 多字节字符支持 5.10.7. 字符集问题 5.10.8. MySQL服务器时区支持 5.11. MySQL日志文件 5.11.1. 错误日志 5.11.2. 通用查询日志 5.11.3. 二进制日志 5.11.4. 慢速查询日志 5.11.5. 日志文件维护 5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3. 复制实施细节 6.3.1. 复制主线程状态 6.3.2. 复制从I/O线程状态 6.3.3. 复制从SQL线程状态 6.3.4. 复制传递和状态文件 6.4. 如何设置复制 6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器复制中的Auto-Increment 7. 优化 7.1. 优化概述 7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关信息) 7.2.2. 估计查询性能 7.2.3. SELECT查询的速度 7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8. MySQL如何优化DISTINCT 7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN 7.2.10. MySQL如何优化嵌套Join 7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 7.2.18. DELETE语句的速度 7.2.19. 其它优化技巧 7.3. 锁定事宜 7.3.1. 锁定方法 7.3.2. 表锁定事宜 7.4. 优化数据库结构 7.4.1. 设计选择 7.4.2. 使你的数据尽可能小 7.4.3. 列索引 7.4.4. 多列索引 7.4.5. MySQL如何使用索引 7.4.6. MyISAM键高速缓冲 7.4.7. MyISAM索引统计集合 7.4.8. MySQL如何计算打开的表 7.4.9. MySQL如何打开和关闭表 7.4.10. 在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 7.5.6. MySQL如何使用DNS 7.6. 磁盘事宜 7.6.1. 使用符号链接 8. 客户端和实用工具程序 8.1. 客户端脚本和实用工具概述 8.2. myisampack:生成压缩、只读MyISAM表 8.3. mysqlMySQL命令行工具 8.3.1. 选项 8.3.2. mysql命令 8.3.3. 怎样从文本文件执行SQL语句 8.3.4. mysql技巧 8.4. mysqlaccess:用于检查访问权限的客户端 8.5. mysqladmin:用于管理MySQL服务器的客户端 8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. mysqlcheck:表维护和维修程序 8.8. mysqldump:数据库备份程序 8.9. mysqlhotcopy:数据库备份程序 8.10. mysqlimport:数据导入程序 8.11. mysqlshow-显示数据库、表和列信息 8.12. myisamlog:显示MyISAM日志文件内容 8.13. perror:解释错误代码 8.14. replace:字符串替换实用工具 8.15. mysql_zap:杀死符合某一模式的进程 9. 语言结构 9.1. 文字值 9.1.1. 字符串 9.1.2. 数值 9.1.3. 十六进制值 9.1.4. 布尔值 9.1.5. 位字段值 9.1.6. NULL值 9.2. 数据库、表、索引、列和别名 9.2.1. 识别符限制条件 9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集和校对 10.2. MySQL中的字符集和校对 10.3. 确定默认字符集和校对 10.3.1. 服务器字符集和校对 10.3.2. 数据库字符集和校对 10.3.3. 表字符集和校对 10.3.4. 列字符集和校对 10.3.5. 字符集和校对分配示例 10.3.6. 连接字符集和校对 10.3.7. 字符串文字字符集和校对 10.3.8. 在SQL语句中使用COLLATE 10.3.9. COLLATE子句优先 10.3.10. BINARY操作符 10.3.11. 校对确定较为复杂的一些特殊情况 10.3.12. 校对必须适合字符集 10.3.13. 校对效果的示例 10.4. 字符集支持影响到的操作 10.4.1. 结果字符串 10.4.2. CONVERT() 10.4.3. CAST() 10.4.4. SHOW语句 10.5. Unicode支持 10.6. 用于元数据的UTF8 10.7. 与其它DBMS的兼容性 10.8. 新字符集配置文件格式 10.9. 国家特有字符集 10.10. MySQL支持的字符集和校对 10.10.1. Unicode字符集 10.10.2. 西欧字符集 10.10.3. 中欧字符集 10.10.4. 南欧与中东字符集 10.10.5. 波罗的海字符集 10.10.6. 西里尔字符集 10.10.7. 亚洲字符集 11. 列类型 11.1. 列类型概述 11.1.1. 数值类型概述 11.1.2. 日期和时间类型概述 11.1.3. 字符串类型概述 11.2. 数值类型 11.3. 日期和时间类型 11.3.1. DATETIME、DATE和TIMESTAMP类型 11.3.2. TIME类型 11.3.3. YEAR类型 11.3.4. Y2K事宜和日期类型 11.4. String类型 11.4.1. CHAR和VARCHAR类型 11.4.2. BINARY和VARBINARY类型 11.4.3. BLOB和TEXT类型 11.4.4. ENUM类型 11.4.5. SET类型 11.5. 列类型存储需求 11.6. 选择正确的列类型 11.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. 控制流程函数 12.3. 字符串函数 12.3.1. 字符串比较函数 12.4. 数值函数 12.4.1. 算术操作符 12.4.2. 数学函数 12.5. 日期和时间函数 12.6. MySQL使用什么日历? 12.7. 全文搜索功能 12.7.1. 布尔全文搜索 12.7.2. 全文搜索带查询扩展 12.7.3. 全文停止字 12.7.4. 全文限定条件 12.7.5. 微调MySQL全文搜索 12.8. Cast函数和操作符 12.9. 其他函数 12.9.1. 位函数 12.9.2. 加密函数 12.9.3. 信息函数 12.9.4. 其他函数 12.10. 与GROUP BY子句同时使用的函数和修改程序 12.10.1. GROUP BY(聚合)函数 12.10.2. GROUP BY修改程序 12.10.3. 具有隐含字段的GROUP BY 13. SQL语句语法 13.1. 数据定义语句 13.1.1. ALTER DATABASE语法 13.1.2. ALTER TABLE语法 13.1.3. CREATE DATABASE语法 13.1.4. CREATE INDEX语法 13.1.5. CREATE TABLE语法 13.1.6. DROP DATABASE语法 13.1.7. DROP INDEX语法 13.1.8. DROP TABLE语法 13.1.9. RENAME TABLE语法 13.2. 数据操作语句 13.2.1. DELETE语法 13.2.2. DO语法 13.2.3. HANDLER语法 13.2.4. INSERT语法 13.2.5. LOAD DATA INFILE语法 13.2.6. REPLACE语法 13.2.7. SELECT语法 13.2.8. Subquery语法 13.2.9. TRUNCATE语法 13.2.10. UPDATE语法 13.3. MySQL实用工具语句 13.3.1. DESCRIBE语法(获取有关列的信息) 13.3.2. USE语法 13.4. MySQL事务处理和锁定语句 13.4.1. START TRANSACTION, COMMIT和ROLLBACK语法 13.4.2. 不能回滚的语句 13.4.3. 会造成隐式提交的语句 13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET语法 13.5.4. SHOW语法 13.5.5. 其它管理语句 13.6. 复制语句 13.6.1. 用于控制主服务器的SQL语句 13.6.2. 用于控制从服务器的SQL语句 13.7. 用于预处理语句的SQL语法 14. 插件式存储引擎体系结构 14.1. 前言 14.2. 概述 14.3. 公共MySQL数据库服务器层 14.4. 选择存储引擎 14.5. 将存储引擎指定给表 14.6. 存储引擎和事务 14.7. 插入存储引擎 14.8. 拔出存储引擎 14.9. 插件式存储器的安全含义 15. 存储引擎和表类型 15.1. MyISAM存储引擎 15.1.1. MyISAM启动选项 15.1.2. 键所需的空间 15.1.3. MyISAM表的存储格式 15.1.4. MyISAM表方面的问题 15.2. InnoDB存储引擎 15.2.1. InnoDB概述 15.2.2. InnoDB联系信息 15.2.3. InnoDB配置 15.2.4. InnoDB启动选项 15.2.5. 创建InnoDB表空间 15.2.6. 创建InnoDB表 15.2.7. 添加和删除InnoDB数据和日志文件 15.2.8. InnoDB数据库的备份和恢复 15.2.9. 将InnoDB数据库移到另一台机器上 15.2.10. InnoDB事务模型和锁定 15.2.11. InnoDB性能调节提示 15.2.12. 多版本的实施 15.2.13. 表和索引结构 15.2.14. 文件空间管理和磁盘I/O 15.2.15. InnoDB错误处理 15.2.16. 对InnoDB表的限制 15.2.17. InnoDB故障诊断与排除 15.3. MERGE存储引擎 15.3.1. MERGE表方面的问题 15.4. MEMORY (HEAP)存储引擎 15.5. BDB (BerkeleyDB)存储引擎 15.5.1. BDB支持的操作系统 15.5.2. 安装BDB 15.5.3. BDB启动选项 15.5.4. BDB表的特性 15.5.5. 修改BDB所需的事宜 15.5.6. 对BDB表的限制 15.5.7. 使用BDB表时可能出现的错误 15.6. EXAMPLE存储引擎 15.7. FEDERATED存储引擎 15.7.1. 安装FEDERATED存储引擎 15.7.2. FEDERATED存储引擎介绍 15.7.3. 如何使用FEDERATED表 15.7.4. FEDERATED存储引擎的局限性 15.8. ARCHIVE存储引擎 15.9. CSV存储引擎 15.10. BLACKHOLE存储引擎 16. 编写自定义存储引擎 16.1. 前言 16.2. 概述 16.3. 创建存储引擎源文件 16.4. 创建handlerton 16.5. 对处理程序进行实例化处理 16.6. 定义表扩展 16.7. 创建表 16.8. 打开表 16.9. 实施基本的表扫描功能 16.9.1. 实施store_lock()函数 16.9.2. 实施external_lock()函数 16.9.3. 实施rnd_init()函数 16.9.4. 实施info()函数 16.9.5. 实施extra()函数 16.9.6. 实施rnd_next()函数 16.10. 关闭表 16.11. 为存储引擎添加对INSERT的支持 16.12. 为存储引擎添加对UPDATE的支持 16.13. 为存储引擎添加对DELETE的支持 16.14. API引用 16.14.1. bas_ext 16.14.2. close 16.14.3. create 16.14.4. delete_row 16.14.5. delete_table 16.14.6. external_lock 16.14.7. extra 16.14.8. info 16.14.9. open 16.14.10. rnd_init 16.14.11. rnd_next 16.14.12. store_lock 16.14.13. update_row 16.14.14. write_row 17. MySQL簇 17.1. MySQL簇概述 17.2. MySQL簇的基本概念 17.3. 多计算机的简单基础知识 17.3.1. 硬件、软件和联网 17.3.2. 安装 17.3.3. 配置 17.3.4. 首次启动 17.3.5. 加载示例数据并执行查询 17.3.6. 安全关闭和重启 17.4. MySQL簇的配置 17.4.1. 从源码创建MySQL簇 17.4.2. 安装软件 17.4.3. MySQL簇的快速测试设置 17.4.4. 配置文件 17.5. MySQL簇中的进程管理 17.5.1. 用于MySQL簇的MySQL服务器进程使用 17.5.2. ndbd,存储引擎节点进程 17.5.3. ndb_mgmd,“管理服务器”进程 17.5.4. ndb_mgm,“管理客户端”进程 17.5.5. 用于MySQL簇进程的命令选项 17.6. MySQL簇的管理 17.6.1. MySQL簇的启动阶段 17.6.2. “管理客户端”中的命令 17.6.3. MySQL簇中生成的事件报告 17.6.4. 单用户模式 17.6.5. MySQL簇的联机备份 17.7. 使用与MySQL簇的高速互连 17.7.1. 配置MySQL簇以使用SCI套接字 17.7.2. 理解簇互连的影响 17.8. MySQL簇的已知限制 17.9. MySQL簇发展的重要历程 17.9.1. MySQL 5.0中的MySQL簇变化 17.9.2. 关于MySQL簇的MySQL 5.1发展历程 17.10. MySQL簇常见问题解答 17.11. MySQL簇术语表 18. 分区 18.1. MySQL中的分区概述 18.2. 分区类型 18.2.1. RANGE分区 18.2.2. LIST分区 18.2.3. HASH分区 18.2.4. KEY分区 18.2.5. 子分区 18.2.6. MySQL分区处理NULL值的方式 18.3. 分区管理 18.3.1. RANGE和LIST分区的管理 18.3.2. HASH和KEY分区的管理 18.3.3. 分区维护 18.3.4. 获取关于分区的信息 19. MySQL中的空间扩展 19.1. 前言 19.2. OpenGIS几何模型 19.2.1. Geometry类的层次 19.2.2. 类Geometry 19.2.3. 类Point 19.2.4. 类Curve 19.2.5. 类LineString 19.2.6. 类Surface 19.2.7. 类Polygon 19.2.8. 类GeometryCollection 19.2.9. 类MultiPoint 19.2.10. 类MultiCurve 19.2.11. 类MultiLineString 19.2.12. 类MultiSurface 19.2.13. 类MultiPolygon 19.3. 支持的空间数据格式 19.3.1. 著名的文本(WKT)格式 19.3.2. 著名的二进制(WKB)格式 19.4. 创建具备空间功能的MySQL数据库 19.4.1. MySQL空间数据类型 19.4.2. 创建空间值 19.4.3. 创建空间列 19.4.4. 填充空间列 19.4.5. 获取空间数据 19.5. 分析空间信息 19.5.1. Geometry格式转换函数 19.5.2. Geometry函数 19.5.3. 从已有Geometry创建新Geometry的函数 19.5.4. 测试几何对象间空间关系的函数 19.5.5. 关于几何最小边界矩形(MBR)的关系 19.5.6. 测试几何类之间空间关系的函数 19.6. 优化空间分析 19.6.1. 创建空间索引 19.6.2. 使用空间索引 19.7. MySQL的一致性和兼容性 19.7.1. 尚未实施的GIS特性 20. 存储程序和函数 20.1. 存储程序和授权表 20.2. 存储程序的语法 20.2.1. CREATE PROCEDURE和CREATE FUNCTION 20.2.2. ALTER PROCEDURE和ALTER FUNCTION 20.2.3. DROP PROCEDURE和DROP FUNCTION 20.2.4. SHOW CREATE PROCEDURE和SHOW CREATE FUNCTION 20.2.5. SHOW PROCEDURE STATUS和SHOW FUNCTION STATUS 20.2.6. CALL语句 20.2.7. BEGIN ... END复合语句 20.2.8. DECLARE语句 20.2.9. 存储程序中的变量 20.2.10. 条件和处理程序 20.2.11. 光标 20.2.12. 流程控制构造 20.3. 存储程序、函数、触发程序和复制:常见问题 20.4. 存储子程序和触发程序的二进制日志功能 21. 触发程序 21.1. CREATE TRIGGER语法 21.2. DROP TRIGGER语法 21.3. 使用触发程序 22. 视图 22.1. ALTER VIEW语法 22.2. CREATE VIEW语法 22.3. DROP VIEW语法 22.4. SHOW CREATE VIEW语法 23. INFORMATION_SCHEMA信息数据库 23.1. INFORMATION_SCHEMA表 23.1.1. INFORMATION_SCHEMA SCHEMATA表 23.1.2. INFORMATION_SCHEMA TABLES表 23.1.3. INFORMATION_SCHEMA COLUMNS表 23.1.4. INFORMATION_SCHEMA STATISTICS表 23.1.5. INFORMATION_SCHEMA USER_PRIVILEGES表 23.1.6. INFORMATION_SCHEMA SCHEMA_PRIVILEGES表 23.1.7. INFORMATION_SCHEMA TABLE_PRIVILEGES表 23.1.8. INFORMATION_SCHEMA COLUMN_PRIVILEGES表 23.1.9. INFORMATION_SCHEMA CHARACTER_SETS表 23.1.10. INFORMATION_SCHEMA COLLATIONS表 23.1.11. INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY表 23.1.12. INFORMATION_SCHEMA TABLE_CONSTRAINTS表 23.1.13. INFORMATION_SCHEMA KEY_COLUMN_USAGE表 23.1.14. INFORMATION_SCHEMA ROUTINES表 23.1.15. INFORMATION_SCHEMA VIEWS表 23.1.16. INFORMATION_SCHEMA TRIGGERS表 23.1.17. 其他INFORMATION_SCHEMA表 23.2. SHOW语句的扩展 24. 精度数学 24.1. 数值的类型 24.2. DECIMAL数据类型更改 24.3. 表达式处理 24.4. 四舍五入 24.5. 精度数学示例 25. API和库 25.1. libmysqld,嵌入式MySQL服务器库 25.1.1. 嵌入式MySQL服务器库概述 25.1.2. 使用libmysqld编译程序 25.1.3. 使用嵌入式MySQL服务器时的限制 25.1.4. 与嵌入式服务器一起使用的选项 25.1.5. 嵌入式服务器中尚需完成的事项(TODO) 25.1.6. 嵌入式服务器示例 25.1.7. 嵌入式服务器的许可 25.2. MySQL C API 25.2.1. C API数据类型 25.2.2. C API函数概述 25.2.3. C API函数描述 25.2.4. C API预处理语句 25.2.5. C API预处理语句的数据类型 25.2.6. C API预处理语句函数概述 25.2.7. C API预处理语句函数描述 25.2.8. C API预处理语句方面的问题 25.2.9. 多查询执行的C API处理 25.2.10. 日期和时间值的C API处理 25.2.11. C API线程函数介绍 25.2.12. C API嵌入式服务器函数介绍 25.2.13. 使用C API时的常见问题 25.2.14. 创建客户端程序 25.2.15. 如何生成线程式客户端 25.3. MySQL PHP API 25.3.1. 使用MySQL和PHP的常见问题 25.4. MySQL Perl API 25.5. MySQL C++ API 25.5.1. Borland C++ 25.6. MySQL Python API 25.7. MySQL Tcl API 25.8. MySQL Eiffel Wrapper 25.9. MySQL程序开发实用工具 25.9.1. msql2mysql:转换mSQL程序以用于MySQL 25.9.2. mysql_config:获取编译客户端的编译选项 26. 连接器 26.1. MySQL Connector/ODBC 26.1.1. MyODBC介绍 26.1.2. 关于ODBC和MyODBC的一般信息 26.1.3. 如何安装MyODBC 26.1.4. 在Windows平台上从二进制版本安装MyODBC 26.1.5. I在Unix平台上从二进制版本安装MyODBC 26.1.6. 在Windows平台上从源码版本安装MyODBC 26.1.7. 在Unix平台上从源码版本安装MyODBC 26.1.8. 从BitKeeper开发源码树安装MyODBC 26.1.9. MyODBC配置 26.1.10. 与MyODBC连接相关的事宜 26.1.11. MyODBC和Microsoft Access 26.1.12. MyODBC和Microsoft VBA及ASP 26.1.13. MyODBC和第三方ODBC工具 26.1.14. MyODBC通用功能 26.1.15. 基本的MyODBC应用步骤 26.1.16. MyODBC API引用 26.1.17. MyODBC数据类型 26.1.18. MyODBC错误代码 26.1.19. MyODBC与VB:ADO、DAO和RDO 26.1.20. MyODBC与Microsoft.NET 26.1.21. 感谢 26.2. MySQL Connector/NET 26.2.1. 前言 26.2.2. 下载并安装MySQL Connector/NET 26.2.3. Connector/NET体系结构 26.2.4. 使用MySQL Connector/NET 26.2.5. MySQL Connector/NET变更史 26.3. MySQL Connector/J 26.3.1. 基本的JDBC概念 26.3.2. 安装 Connector/J 26.3.3. JDBC引用 26.3.4. 与J2EE和其他Java框架一起使用 Connector/J 26.3.5. 诊断 Connector/J方面的问题 26.3.6. Changelog 26.4. MySQL Connector/MXJ 26.4.1. 前言 26.4.2. 支持平台: 26.4.3. Junit测试要求 26.4.4. 运行Junit测试 26.4.5. 作为JDBC驱动程序的一部分运行 26.4.6. 在Java对象中运行 26.4.7. MysqldResource API 26.4.8. 在JMX代理(custom)中运行 26.4.9. 部署在标准的JMX代理环境下 (JBoss) 26.4.10. 安装 27. 扩展MySQL 27.1. MySQL内部控件 27.1.1. MySQL线程 27.1.2. MySQL测试套件 27.2. 为MySQL添加新函数 27.2.1. 自定义函数接口的特性 27.2.2. CREATE FUNCTION/DROP FUNCTION语法 27.2.3. 添加新的自定义函数 27.2.4. 添加新的固有函数 27.3. 为MySQL添加新步骤 27.3.1. 步骤分析 27.3.2. 编写步骤 A. 问题和常见错误 A.1. 如何确定导致问题的原因 A.2. 使用MySQL程序时的常见错误 A.2.1. 拒绝访问 A.2.2. 无法连接到[local] MySQL服务器 A.2.3. 客户端不支持鉴定协议 A.2.4. 输入密码时出现密码错误 A.2.5. 主机的host_name被屏蔽 A.2.6. 连接数过多 A.2.7. 内存溢出 A.2.8. MySQL服务器不可用 A.2.9. 信息包过大 A.2.10. 通信错误和失效连接 A.2.11. 表已满 A.2.12. 无法创建文件/写入文件 A.2.13. 命令不同步 A.2.14. 忽略用户 A.2.15. 表tbl_name不存在 A.2.16. 无法初始化字符集 A.2.17. 文件未找到 A.3. 与安装有关的事宜 A.3.1. 与MySQL客户端库的链接问题 A.3.2. 如何以普通用户身份运行MySQL A.3.3. 与文件许可有关的问题 A.4. 与管理有关的事宜 A.4.1. 如何复位根用户密码 A.4.2. 如果MySQL依然崩溃,应作些什么 A.4.3. MySQL处理磁盘满的方式 A.4.4. MySQL将临时文件储存在哪里 A.4.5. 如何保护或更改MySQL套接字文件/tmp/mysql.sock A.4.6. 时区问题 A.5. 与查询有关的事宜 A.5.1. 搜索中的大小写敏感性 A.5.2. 使用DATE列方面的问题 A.5.3. 与NULL值有关的问题 A.5.4. 与列别名有关的问题 A.5.5. 非事务表回滚失败 A.5.6. 从相关表删除行 A.5.7. 解决与不匹配行有关的问题 A.5.8. 与浮点比较有关的问题 A.6. 与优化器有关的事宜 A.7. 与表定义有关的事宜 A.7.1. 与ALTER TABLE有关的问题 A.7.2. 如何更改表中的列顺序 A.7.3. TEMPORARY TABLE问题 A.8. MySQL中的已知事宜 A.8.1. MySQL中的打开事宜 B. 错误代码和消息 B.1. 服务器错误代码和消息 B.2. 客户端错误代码和消息 C. 感谢 C.1. MySQL AB处的开发人 C.2. MySQL贡献人 C.3. 资料员和译员 C.4. MySQL使用和包含的库 C.5. 支持MySQL的软件包 C.6. 用于创建MySQL的工具 C.7. MySQL支持人员 D. MySQL变更史 D.1. 5.1.x版中的变更情况(开发) D.1.1. 5.1.2版中的变更情况(尚未发布) D.1.2. 5.1.1版中的变更情况(尚未发布) D.2. MyODBC的变更情况 D.2.1. MyODBC 3.51.12的变更情况 D.2.2. MyODBC 3.51.11的变更情况 E. 移植到其他系统 E.1. 调试MySQL服务器 E.1.1. 针对调试编译MySQL E.1.2. 创建跟踪文件 E.1.3. 在gdb环境下调试mysqld E.1.4. 使用堆栈跟踪 E.1.5. 使用日志文件找出mysqld中的错误原因 E.1.6. 如果出现表崩溃,请生成测试案例 E.2. 调试MySQL客户端 E.3. DBUG软件包 E.4. 关于RTS线程的注释 E.5. 线程软件包之间的差异 F. 环境变量 G. MySQL正则表达式 H. MySQL中的限制 H.1. 联合的限制 I. 特性限制 I.1. 对存储子程序和触发程序的限制 I.2. 对服务器端光标的限制 I.3. 对子查询的限制 I.4. 对视图的限制 I.5. 对XA事务的限制 J. GNU通用公共许可 K. MySQL FLOSS许可例外 索引 图形清单 14.1. MySQL插件式存储引擎的体系结构 14.2. 存储引擎比较 16.1. MySQL体系结构 表格清单 26.1. 连接属性 26.2. 转换表 26.3. 用于ResultSet.getObject()的MySQL类型和Java类型 26.4. MySQL对Java编码名称的翻译 示例清单 26.1. 从DriverManager获得连接 26.2. 使用java.sql.Statement执行SELECT查询 26.3. 存储程序示例 26.4. 使用Connection.prepareCall() 26.5. 注册输出参数 26.6. 设置CallableStatement输入参数 26.7. 检索结果和输出参数值 26.8. 使用Statement.getGeneratedKeys()检索AUTO_INCREMENT列的值 26.9. 使用SELECT LAST_INSERT_ID()检索AUTO_INCREMENT列的值 26.10. 在可更新的ResultSets中检索AUTO_INCREMENT列的值 26.11. 设置Unix环境下的CLASSPATH 26.12. 与J2EE应用服务器一起使用连接池 26.13. 重试逻辑的事务示例
言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. MaxDB的历史 1.5.3. MaxDB的特性 1.5.4. 许可和支持 1.5.5. MaxDB和MySQL之间的特性差异 1.5.6. MaxDB和MySQL之间的协同性 1.5.7. 与MaxDB有关的链接 1.6. MySQL发展大事记 1.6.1. MySQL 5.1的新特性 1.7. MySQL信息源 1.7.1. MySQL邮件列表 1.7.2. IRC(在线聊天系统)上的MySQL社区支持 1.7.3. MySQL论坛上的MySQL社区支持 1.8. MySQL标准的兼容性 1.8.1. MySQL遵从的标准是什么 1.8.2. 选择SQL模式 1.8.3. 在ANSI模式下运行MySQL 1.8.4. MySQL对标准SQL的扩展 1.8.5. MySQL与标准SQL的差别 1.8.6. MySQL处理约束的方式 2. 安装MySQL 2.1. 一般安装问题 2.1.1. MySQL支持的操作系统 2.1.2. 选择要安装MySQL分发版 2.1.3. 怎样获得MySQL 2.1.4. 通过MD5校验和或GnuPG验证软件包的完整性 2.1.5. 安装布局 2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装安装MySQL 2.3.4. 使用MySQL安装向导 2.3.5. 使用配置向导 2.3.6. 通过非安装Zip文件安装MySQL 2.3.7. 提取安装档案文件 2.3.8. 创建选项文件 2.3.9. 选择MySQL服务器类型 2.3.10. 首次启动服务器 2.3.11. 从Windows命令行启动MySQL 2.3.12. 以Windows服务方式启动MySQL 2.3.13. 测试MySQL安装 2.3.14. 在Windows环境下对MySQL安装的故障诊断与排除 2.3.15. 在Windows下升级MySQL 2.3.16. Windows版MySQL同Unix版MySQL对比 2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL 2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译问题 2.8.5. MIT-pthreads注意事项 2.8.6. 在Windows下从源码安装MySQL 2.8.7. 在Windows下编译MySQL客户端 2.9. 安装后的设置和测试 2.9.1. Windows下安装后的过程 2.9.2. Unix下安装后的过程 2.9.3. 使初始MySQL账户安全 2.10. 升级MySQL 2.10.1. 从5.0版升级 2.10.2. 升级授权表 2.10.3. 将MySQL数据库拷贝到另一台机器 2.11. 降级MySQL 2.12. 具体操作系统相关的注意事项 2.12.1. Linux注意事项 2.12.2. Mac OS X注意事项 2.12.3. Solaris注意事项 2.12.4. BSD注意事项 2.12.5. 其它Unix注意事项 2.12.6. OS/2注意事项 2.13. Perl安装注意事项 2.13.1. 在Unix中安装Perl 2.13.2. 在Windows下安装ActiveState Perl 2.13.3. 使用Perl DBI/DBD接口的问题 3. 教程 3.1. 连接与断开服务器 3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 3.4. 获得数据库和表的信息 3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. 根据两个键搜索 3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找所有未分发的孪生项 3.7.2. 显示孪生对状态的表 3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器服务器启动脚本 5.1.1. 服务器端脚本和实用工具概述 5.1.2. mysqld-max扩展MySQL服务器 5.1.3. mysqld_safe:MySQL服务器启动脚本 5.1.4. mysql.server:MySQL服务器启动脚本 5.1.5. mysqld_multi:管理多个MySQL服务器的程序 5.2. mysqlmanager:MySQL实例管理器 5.2.1. 用MySQL实例管理器启动MySQL服务器 5.2.2. 连接到MySQL实例管理器并创建用户账户 5.2.3. MySQL实例管理器命令行选项 5.2.4. MySQL实例管理器配置文件 5.2.5. MySQL实例管理器识别的命令 5.3. mysqld:MySQL服务器 5.3.1. mysqld命令行选项 5.3.2. SQL服务器模式 5.3.3. 服务器系统变量 5.3.4. 服务器状态变量 5.4. mysql_fix_privilege_tables:升级MySQL系统表 5.5. MySQL服务器关机进程 5.6. 一般安全问题 5.6.1. 通用安全指南 5.6.2. 使MySQL在攻击者面前保持安全 5.6.3. Mysqld安全相关启动选项 5.6.4. LOAD DATA LOCAL安全问题 5.7. MySQL访问权限系统 5.7.1. 权限系统的作用 5.7.2. 权限系统工作原理 5.7.3. MySQL提供的权限 5.7.4. 与MySQL服务器连接 5.7.5. 访问控制, 阶段1:连接核实 5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户管理 5.8.1. MySQL用户名和密码 5.8.2. 向MySQL增加新用户账户 5.8.3. 从MySQL删除用户账户 5.8.4. 限制账户资源 5.8.5. 设置账户密码 5.8.6. 使你的密码安全 5.8.7. 使用安全连接 5.9. 备份与恢复 5.9.1. 数据库备份 5.9.2. 示例用备份与恢复策略 5.9.3. 自动恢复 5.9.4. 表维护和崩溃恢复 5.9.5. myisamchk:MyISAM表维护实用工具 5.9.6. 建立表维护计划 5.9.7. 获取关于表的信息 5.10. MySQL本地化和国际应用 5.10.1. 数据和排序用字符集 5.10.2. 设置错误消息语言 5.10.3. 添加新的字符集 5.10.4. 字符定义数组 5.10.5. 字符串比较支持 5.10.6. 多字节字符支持 5.10.7. 字符集问题 5.10.8. MySQL服务器时区支持 5.11. MySQL日志文件 5.11.1. 错误日志 5.11.2. 通用查询日志 5.11.3. 二进制日志 5.11.4. 慢速查询日志 5.11.5. 日志文件维护 5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3. 复制实施细节 6.3.1. 复制主线程状态 6.3.2. 复制从I/O线程状态 6.3.3. 复制从SQL线程状态 6.3.4. 复制传递和状态文件 6.4. 如何设置复制 6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器复制中的Auto-Increment 7. 优化 7.1. 优化概述 7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关信息) 7.2.2. 估计查询性能 7.2.3. SELECT查询的速度 7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8. MySQL如何优化DISTINCT 7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN 7.2.10. MySQL如何优化嵌套Join 7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 7.2.18. DELETE语句的速度 7.2.19. 其它优化技巧 7.3. 锁定事宜 7.3.1. 锁定方法 7.3.2. 表锁定事宜 7.4. 优化数据库结构 7.4.1. 设计选择 7.4.2. 使你的数据尽可能小 7.4.3. 列索引 7.4.4. 多列索引 7.4.5. MySQL如何使用索引 7.4.6. MyISAM键高速缓冲 7.4.7. MyISAM索引统计集合 7.4.8. MySQL如何计算打开的表 7.4.9. MySQL如何打开和关闭表 7.4.10. 在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 7.5.6. MySQL如何使用DNS 7.6. 磁盘事宜 7.6.1. 使用符号链接 8. 客户端和实用工具程序 8.1. 客户端脚本和实用工具概述 8.2. myisampack:生成压缩、只读MyISAM表 8.3. mysqlMySQL命令行工具 8.3.1. 选项 8.3.2. mysql命令 8.3.3. 怎样从文本文件执行SQL语句 8.3.4. mysql技巧 8.4. mysqlaccess:用于检查访问权限的客户端 8.5. mysqladmin:用于管理MySQL服务器的客户端 8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. mysqlcheck:表维护和维修程序 8.8. mysqldump:数据库备份程序 8.9. mysqlhotcopy:数据库备份程序 8.10. mysqlimport:数据导入程序 8.11. mysqlshow-显示数据库、表和列信息 8.12. myisamlog:显示MyISAM日志文件内容 8.13. perror:解释错误代码 8.14. replace:字符串替换实用工具 8.15. mysql_zap:杀死符合某一模式的进程 9. 语言结构 9.1. 文字值 9.1.1. 字符串 9.1.2. 数值 9.1.3. 十六进制值 9.1.4. 布尔值 9.1.5. 位字段值 9.1.6. NULL值 9.2. 数据库、表、索引、列和别名 9.2.1. 识别符限制条件 9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集和校对 10.2. MySQL中的字符集和校对 10.3. 确定默认字符集和校对 10.3.1. 服务器字符集和校对 10.3.2. 数据库字符集和校对 10.3.3. 表字符集和校对 10.3.4. 列字符集和校对 10.3.5. 字符集和校对分配示例 10.3.6. 连接字符集和校对 10.3.7. 字符串文字字符集和校对 10.3.8. 在SQL语句中使用COLLATE 10.3.9. COLLATE子句优先 10.3.10. BINARY操作符 10.3.11. 校对确定较为复杂的一些特殊情况 10.3.12. 校对必须适合字符集 10.3.13. 校对效果的示例 10.4. 字符集支持影响到的操作 10.4.1. 结果字符串 10.4.2. CONVERT() 10.4.3. CAST() 10.4.4. SHOW语句 10.5. Unicode支持 10.6. 用于元数据的UTF8 10.7. 与其它DBMS的兼容性 10.8. 新字符集配置文件格式 10.9. 国家特有字符集 10.10. MySQL支持的字符集和校对 10.10.1. Unicode字符集 10.10.2. 西欧字符集 10.10.3. 中欧字符集 10.10.4. 南欧与中东字符集 10.10.5. 波罗的海字符集 10.10.6. 西里尔字符集 10.10.7. 亚洲字符集 11. 列类型 11.1. 列类型概述 11.1.1. 数值类型概述 11.1.2. 日期和时间类型概述 11.1.3. 字符串类型概述 11.2. 数值类型 11.3. 日期和时间类型 11.3.1. DATETIME、DATE和TIMESTAMP类型 11.3.2. TIME类型 11.3.3. YEAR类型 11.3.4. Y2K事宜和日期类型 11.4. String类型 11.4.1. CHAR和VARCHAR类型 11.4.2. BINARY和VARBINARY类型 11.4.3. BLOB和TEXT类型 11.4.4. ENUM类型 11.4.5. SET类型 11.5. 列类型存储需求 11.6. 选择正确的列类型 11.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. 控制流程函数 12.3. 字符串函数 12.3.1. 字符串比较函数 12.4. 数值函数 12.4.1. 算术操作符 12.4.2. 数学函数 12.5. 日期和时间函数 12.6. MySQL使用什么日历? 12.7. 全文搜索功能 12.7.1. 布尔全文搜索 12.7.2. 全文搜索带查询扩展 12.7.3. 全文停止字 12.7.4. 全文限定条件 12.7.5. 微调MySQL全文搜索 12.8. Cast函数和操作符 12.9. 其他函数 12.9.1. 位函数 12.9.2. 加密函数 12.9.3. 信息函数 12.9.4. 其他函数 12.10. 与GROUP BY子句同时使用的函数和修改程序 12.10.1. GROUP BY(聚合)函数 12.10.2. GROUP BY修改程序 12.10.3. 具有隐含字段的GROUP BY 13. SQL语句语法 13.1. 数据定义语句 13.1.1. ALTER DATABASE语法 13.1.2. ALTER TABLE语法 13.1.3. CREATE DATABASE语法 13.1.4. CREATE INDEX语法 13.1.5. CREATE TABLE语法 13.1.6. DROP DATABASE语法 13.1.7. DROP INDEX语法 13.1.8. DROP TABLE语法 13.1.9. RENAME TABLE语法 13.2. 数据操作语句 13.2.1. DELETE语法 13.2.2. DO语法 13.2.3. HANDLER语法 13.2.4. INSERT语法 13.2.5. LOAD DATA INFILE语法 13.2.6. REPLACE语法 13.2.7. SELECT语法 13.2.8. Subquery语法 13.2.9. TRUNCATE语法 13.2.10. UPDATE语法 13.3. MySQL实用工具语句 13.3.1. DESCRIBE语法(获取有关列的信息) 13.3.2. USE语法 13.4. MySQL事务处理和锁定语句 13.4.1. START TRANSACTION, COMMIT和ROLLBACK语法 13.4.2. 不能回滚的语句 13.4.3. 会造成隐式提交的语句 13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET语法 13.5.4. SHOW语法 13.5.5. 其它管理语句 13.6. 复制语句 13.6.1. 用于控制主服务器的SQL语句 13.6.2. 用于控制从服务器的SQL语句 13.7. 用于预处理语句的SQL语法 14. 插件式存储引擎体系结构 14.1. 前言 14.2. 概述 14.3. 公共MySQL数据库服务器层 14.4. 选择存储引擎 14.5. 将存储引擎指定给表 14.6. 存储引擎和事务 14.7. 插入存储引擎 14.8. 拔出存储引擎 14.9. 插件式存储器的安全含义 15. 存储引擎和表类型 15.1. MyISAM存储引擎 15.1.1. MyISAM启动选项 15.1.2. 键所需的空间 15.1.3. MyISAM表的存储格式 15.1.4. MyISAM表方面的问题 15.2. InnoDB存储引擎 15.2.1. InnoDB概述 15.2.2. InnoDB联系信息 15.2.3. InnoDB配置 15.2.4. InnoDB启动选项 15.2.5. 创建InnoDB表空间 15.2.6. 创建InnoDB表 15.2.7. 添加和删除InnoDB数据和日志文件 15.2.8. InnoDB数据库的备份和恢复 15.2.9. 将InnoDB数据库移到另一台机器上 15.2.10. InnoDB事务模型和锁定 15.2.11. InnoDB性能调节提示 15.2.12. 多版本的实施 15.2.13. 表和索引结构 15.2.14. 文件空间管理和磁盘I/O 15.2.15. InnoDB错误处理 15.2.16. 对InnoDB表的限制 15.2.17. InnoDB故障诊断与排除 15.3. MERGE存储引擎 15.3.1. MERGE表方面的问题 15.4. MEMORY (HEAP)存储引擎 15.5. BDB (BerkeleyDB)存储引擎 15.5.1. BDB支持的操作系统 15.5.2. 安装BDB 15.5.3. BDB启动选项 15.5.4. BDB表的特性 15.5.5. 修改BDB所需的事宜 15.5.6. 对BDB表的限制 15.5.7. 使用BDB表时可能出现的错误 15.6. EXAMPLE存储引擎 15.7. FEDERATED存储引擎 15.7.1. 安装FEDERATED存储引擎 15.7.2. FEDERATED存储引擎介绍 15.7.3. 如何使用FEDERATED表 15.7.4. FEDERATED存储引擎的局限性 15.8. ARCHIVE存储引擎 15.9. CSV存储引擎 15.10. BLACKHOLE存储引擎 16. 编写自定义存储引擎 16.1. 前言 16.2. 概述 16.3. 创建存储引擎源文件 16.4. 创建handlerton 16.5. 对处理程序进行实例化处理 16.6. 定义表扩展 16.7. 创建表 16.8. 打开表 16.9. 实施基本的表扫描功能 16.9.1. 实施store_lock()函数 16.9.2. 实施external_lock()函数 16.9.3. 实施rnd_init()函数 16.9.4. 实施info()函数 16.9.5. 实施extra()函数 16.9.6. 实施rnd_next()函数 16.10. 关闭表 16.11. 为存储引擎添加对INSERT的支持 16.12. 为存储引擎添加对UPDATE的支持 16.13. 为存储引擎添加对DELETE的支持 16.14. API引用 16.14.1. bas_ext 16.14.2. close 16.14.3. create 16.14.4. delete_row 16.14.5. delete_table 16.14.6. external_lock 16.14.7. extra 16.14.8. info 16.14.9. open 16.14.10. rnd_init 16.14.11. rnd_next 16.14.12. store_lock 16.14.13. update_row 16.14.14. write_row 17. MySQL簇 17.1. MySQL簇概述 17.2. MySQL簇的基本概念 17.3. 多计算机的简单基础知识 17.3.1. 硬件、软件和联网 17.3.2. 安装 17.3.3. 配置 17.3.4. 首次启动 17.3.5. 加载示例数据并执行查询 17.3.6. 安全关闭和重启 17.4. MySQL簇的配置 17.4.1. 从源码创建MySQL簇 17.4.2. 安装软件 17.4.3. MySQL簇的快速测试设置 17.4.4. 配置文件 17.5. MySQL簇中的进程管理 17.5.1. 用于MySQL簇的MySQL服务器进程使用 17.5.2. ndbd,存储引擎节点进程 17.5.3. ndb_mgmd,“管理服务器”进程 17.5.4. ndb_mgm,“管理客户端”进程 17.5.5. 用于MySQL簇进程的命令选项 17.6. MySQL簇的管理 17.6.1. MySQL簇的启动阶段 17.6.2. “管理客户端”中的命令 17.6.3. MySQL簇中生成的事件报告 17.6.4. 单用户模式 17.6.5. MySQL簇的联机备份 17.7. 使用与MySQL簇的高速互连 17.7.1. 配置MySQL簇以使用SCI套接字 17.7.2. 理解簇互连的影响 17.8. MySQL簇的已知限制 17.9. MySQL簇发展的重要历程 17.9.1. MySQL 5.0中的MySQL簇变化 17.9.2. 关于MySQL簇的MySQL 5.1发展历程 17.10. MySQL簇常见问题解答 17.11. MySQL簇术语表 18. 分区 18.1. MySQL中的分区概述 18.2. 分区类型 18.2.1. RANGE分区 18.2.2. LIST分区 18.2.3. HASH分区 18.2.4. KEY分区 18.2.5. 子分区 18.2.6. MySQL分区处理NULL值的方式 18.3. 分区管理 18.3.1. RANGE和LIST分区的管理 18.3.2. HASH和KEY分区的管理 18.3.3. 分区维护 18.3.4. 获取关于分区的信息 19. MySQL中的空间扩展 19.1. 前言 19.2. OpenGIS几何模型 19.2.1. Geometry类的层次 19.2.2. 类Geometry 19.2.3. 类Point 19.2.4. 类Curve 19.2.5. 类LineString 19.2.6. 类Surface 19.2.7. 类Polygon 19.2.8. 类GeometryCollection 19.2.9. 类MultiPoint 19.2.10. 类MultiCurve 19.2.11. 类MultiLineString 19.2.12. 类MultiSurface 19.2.13. 类MultiPolygon 19.3. 支持的空间数据格式 19.3.1. 著名的文本(WKT)格式 19.3.2. 著名的二进制(WKB)格式 19.4. 创建具备空间功能的MySQL数据库 19.4.1. MySQL空间数据类型 19.4.2. 创建空间值 19.4.3. 创建空间列 19.4.4. 填充空间列 19.4.5. 获取空间数据 19.5. 分析空间信息 19.5.1. Geometry格式转换函数 19.5.2. Geometry函数 19.5.3. 从已有Geometry创建新Geometry的函数 19.5.4. 测试几何对象间空间关系的函数 19.5.5. 关于几何最小边界矩形(MBR)的关系 19.5.6. 测试几何类之间空间关系的函数 19.6. 优化空间分析 19.6.1. 创建空间索引 19.6.2. 使用空间索引 19.7. MySQL的一致性和兼容性 19.7.1. 尚未实施的GIS特性 20. 存储程序和函数 20.1. 存储程序和授权表 20.2. 存储程序的语法 20.2.1. CREATE PROCEDURE和CREATE FUNCTION 20.2.2. ALTER PROCEDURE和ALTER FUNCTION 20.2.3. DROP PROCEDURE和DROP FUNCTION 20.2.4. SHOW CREATE PROCEDURE和SHOW CREATE FUNCTION 20.2.5. SHOW PROCEDURE STATUS和SHOW FUNCTION STATUS 20.2.6. CALL语句 20.2.7. BEGIN ... END复合语句 20.2.8. DECLARE语句 20.2.9. 存储程序中的变量 20.2.10. 条件和处理程序 20.2.11. 光标 20.2.12. 流程控制构造 20.3. 存储程序、函数、触发程序和复制:常见问题 20.4. 存储子程序和触发程序的二进制日志功能 21. 触发程序 21.1. CREATE TRIGGER语法 21.2. DROP TRIGGER语法 21.3. 使用触发程序 22. 视图 22.1. ALTER VIEW语法 22.2. CREATE VIEW语法 22.3. DROP VIEW语法 22.4. SHOW CREATE VIEW语法 23. INFORMATION_SCHEMA信息数据库 23.1. INFORMATION_SCHEMA表 23.1.1. INFORMATION_SCHEMA SCHEMATA表 23.1.2. INFORMATION_SCHEMA TABLES表 23.1.3. INFORMATION_SCHEMA COLUMNS表 23.1.4. INFORMATION_SCHEMA STATISTICS表 23.1.5. INFORMATION_SCHEMA USER_PRIVILEGES表 23.1.6. INFORMATION_SCHEMA SCHEMA_PRIVILEGES表 23.1.7. INFORMATION_SCHEMA TABLE_PRIVILEGES表 23.1.8. INFORMATION_SCHEMA COLUMN_PRIVILEGES表 23.1.9. INFORMATION_SCHEMA CHARACTER_SETS表 23.1.10. INFORMATION_SCHEMA COLLATIONS表 23.1.11. INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY表 23.1.12. INFORMATION_SCHEMA TABLE_CONSTRAINTS表 23.1.13. INFORMATION_SCHEMA KEY_COLUMN_USAGE表 23.1.14. INFORMATION_SCHEMA ROUTINES表 23.1.15. INFORMATION_SCHEMA VIEWS表 23.1.16. INFORMATION_SCHEMA TRIGGERS表 23.1.17. 其他INFORMATION_SCHEMA表 23.2. SHOW语句的扩展 24. 精度数学 24.1. 数值的类型 24.2. DECIMAL数据类型更改 24.3. 表达式处理 24.4. 四舍五入 24.5. 精度数学示例 25. API和库 25.1. libmysqld,嵌入式MySQL服务器库 25.1.1. 嵌入式MySQL服务器库概述 25.1.2. 使用libmysqld编译程序 25.1.3. 使用嵌入式MySQL服务器时的限制 25.1.4. 与嵌入式服务器一起使用的选项 25.1.5. 嵌入式服务器中尚需完成的事项(TODO) 25.1.6. 嵌入式服务器示例 25.1.7. 嵌入式服务器的许可 25.2. MySQL C API 25.2.1. C API数据类型 25.2.2. C API函数概述 25.2.3. C API函数描述 25.2.4. C API预处理语句 25.2.5. C API预处理语句的数据类型 25.2.6. C API预处理语句函数概述 25.2.7. C API预处理语句函数描述 25.2.8. C API预处理语句方面的问题 25.2.9. 多查询执行的C API处理 25.2.10. 日期和时间值的C API处理 25.2.11. C API线程函数介绍 25.2.12. C API嵌入式服务器函数介绍 25.2.13. 使用C API时的常见问题 25.2.14. 创建客户端程序 25.2.15. 如何生成线程式客户端 25.3. MySQL PHP API 25.3.1. 使用MySQL和PHP的常见问题 25.4. MySQL Perl API 25.5. MySQL C++ API 25.5.1. Borland C++ 25.6. MySQL Python API 25.7. MySQL Tcl API 25.8. MySQL Eiffel Wrapper 25.9. MySQL程序开发实用工具 25.9.1. msql2mysql:转换mSQL程序以用于MySQL 25.9.2. mysql_config:获取编译客户端的编译选项 26. 连接器 26.1. MySQL Connector/ODBC 26.1.1. MyODBC介绍 26.1.2. 关于ODBC和MyODBC的一般信息 26.1.3. 如何安装MyODBC 26.1.4. 在Windows平台上从二进制版本安装MyODBC 26.1.5. I在Unix平台上从二进制版本安装MyODBC 26.1.6. 在Windows平台上从源码版本安装MyODBC 26.1.7. 在Unix平台上从源码版本安装MyODBC 26.1.8. 从BitKeeper开发源码树安装MyODBC 26.1.9. MyODBC配置 26.1.10. 与MyODBC连接相关的事宜 26.1.11. MyODBC和Microsoft Access 26.1.12. MyODBC和Microsoft VBA及ASP 26.1.13. MyODBC和第三方ODBC工具 26.1.14. MyODBC通用功能 26.1.15. 基本的MyODBC应用步骤 26.1.16. MyODBC API引用 26.1.17. MyODBC数据类型 26.1.18. MyODBC错误代码 26.1.19. MyODBC与VB:ADO、DAO和RDO 26.1.20. MyODBC与Microsoft.NET 26.1.21. 感谢 26.2. MySQL Connector/NET 26.2.1. 前言 26.2.2. 下载并安装MySQL Connector/NET 26.2.3. Connector/NET体系结构 26.2.4. 使用MySQL Connector/NET 26.2.5. MySQL Connector/NET变更史 26.3. MySQL Connector/J 26.3.1. 基本的JDBC概念 26.3.2. 安装 Connector/J 26.3.3. JDBC引用 26.3.4. 与J2EE和其他Java框架一起使用 Connector/J 26.3.5. 诊断 Connector/J方面的问题 26.3.6. Changelog 26.4. MySQL Connector/MXJ 26.4.1. 前言 26.4.2. 支持平台: 26.4.3. Junit测试要求 26.4.4. 运行Junit测试 26.4.5. 作为JDBC驱动程序的一部分运行 26.4.6. 在Java对象中运行 26.4.7. MysqldResource API 26.4.8. 在JMX代理(custom)中运行 26.4.9. 部署在标准的JMX代理环境下 (JBoss) 26.4.10. 安装 27. 扩展MySQL 27.1. MySQL内部控件 27.1.1. MySQL线程 27.1.2. MySQL测试套件 27.2. 为MySQL添加新函数 27.2.1. 自定义函数接口的特性 27.2.2. CREATE FUNCTION/DROP FUNCTION语法 27.2.3. 添加新的自定义函数 27.2.4. 添加新的固有函数 27.3. 为MySQL添加新步骤 27.3.1. 步骤分析 27.3.2. 编写步骤 A. 问题和常见错误 A.1. 如何确定导致问题的原因 A.2. 使用MySQL程序时的常见错误 A.2.1. 拒绝访问 A.2.2. 无法连接到[local] MySQL服务器 A.2.3. 客户端不支持鉴定协议 A.2.4. 输入密码时出现密码错误 A.2.5. 主机的host_name被屏蔽 A.2.6. 连接数过多 A.2.7. 内存溢出 A.2.8. MySQL服务器不可用 A.2.9. 信息包过大 A.2.10. 通信错误和失效连接 A.2.11. 表已满 A.2.12. 无法创建文件/写入文件 A.2.13. 命令不同步 A.2.14. 忽略用户 A.2.15. 表tbl_name不存在 A.2.16. 无法初始化字符集 A.2.17. 文件未找到 A.3. 与安装有关的事宜 A.3.1. 与MySQL客户端库的链接问题 A.3.2. 如何以普通用户身份运行MySQL A.3.3. 与文件许可有关的问题 A.4. 与管理有关的事宜 A.4.1. 如何复位根用户密码 A.4.2. 如果MySQL依然崩溃,应作些什么 A.4.3. MySQL处理磁盘满的方式 A.4.4. MySQL将临时文件储存在哪里 A.4.5. 如何保护或更改MySQL套接字文件/tmp/mysql.sock A.4.6. 时区问题 A.5. 与查询有关的事宜 A.5.1. 搜索中的大小写敏感性 A.5.2. 使用DATE列方面的问题 A.5.3. 与NULL值有关的问题 A.5.4. 与列别名有关的问题 A.5.5. 非事务表回滚失败 A.5.6. 从相关表删除行 A.5.7. 解决与不匹配行有关的问题 A.5.8. 与浮点比较有关的问题 A.6. 与优化器有关的事宜 A.7. 与表定义有关的事宜 A.7.1. 与ALTER TABLE有关的问题 A.7.2. 如何更改表中的列顺序 A.7.3. TEMPORARY TABLE问题 A.8. MySQL中的已知事宜 A.8.1. MySQL中的打开事宜 B. 错误代码和消息 B.1. 服务器错误代码和消息 B.2. 客户端错误代码和消息 C. 感谢 C.1. MySQL AB处的开发人 C.2. MySQL贡献人 C.3. 资料员和译员 C.4. MySQL使用和包含的库 C.5. 支持MySQL的软件包 C.6. 用于创建MySQL的工具 C.7. MySQL支持人员 D. MySQL变更史 D.1. 5.1.x版中的变更情况(开发) D.1.1. 5.1.2版中的变更情况(尚未发布) D.1.2. 5.1.1版中的变更情况(尚未发布) D.2. MyODBC的变更情况 D.2.1. MyODBC 3.51.12的变更情况 D.2.2. MyODBC 3.51.11的变更情况 E. 移植到其他系统 E.1. 调试MySQL服务器 E.1.1. 针对调试编译MySQL E.1.2. 创建跟踪文件 E.1.3. 在gdb环境下调试mysqld E.1.4. 使用堆栈跟踪 E.1.5. 使用日志文件找出mysqld中的错误原因 E.1.6. 如果出现表崩溃,请生成测试案例 E.2. 调试MySQL客户端 E.3. DBUG软件包 E.4. 关于RTS线程的注释 E.5. 线程软件包之间的差异 F. 环境变量 G. MySQL正则表达式 H. MySQL中的限制 H.1. 联合的限制 I. 特性限制 I.1. 对存储子程序和触发程序的限制 I.2. 对服务器端光标的限制 I.3. 对子查询的限制 I.4. 对视图的限制 I.5. 对XA事务的限制 J. GNU通用公共许可 K. MySQL FLOSS许可例外 索引 图形清单 14.1. MySQL插件式存储引擎的体系结构 14.2. 存储引擎比较 16.1. MySQL体系结构 表格清单 26.1. 连接属性 26.2. 转换表 26.3. 用于ResultSet.getObject()的MySQL类型和Java类型 26.4. MySQL对Java编码名称的翻译 示例清单 26.1. 从DriverManager获得连接 26.2. 使用java.sql.Statement执行SELECT查询 26.3. 存储程序示例 26.4. 使用Connection.prepareCall() 26.5. 注册输出参数 26.6. 设置CallableStatement输入参数 26.7. 检索结果和输出参数值 26.8. 使用Statement.getGeneratedKeys()检索AUTO_INCREMENT列的值 26.9. 使用SELECT LAST_INSERT_ID()检索AUTO_INCREMENT列的值 26.10. 在可更新的ResultSets中检索AUTO_INCREMENT列的值 26.11. 设置Unix环境下的CLASSPATH 26.12. 与J2EE应用服务器一起使用连接池 26.13. 重试逻辑的事务示例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值