数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
MySQL中文参考手册5(安装MySQL上)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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

转载 译者:晏子

返回〗〖转发〗

译者:晏子 ([email protected])主页:http://linuxdb.yeah.net
4 安装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的因特网链接不是很快的;我们更希望让你从下列镜象站点之一进行真正的下载。 

请向[email protected]报告不存在的或过时的镜像站点。 

欧洲: 


      
  • 奥地利 [ 维也纳技术大学 ]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 & 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++ 编译器的现代系统是可能的。(仅仅为了编译客户代码,只需要一个 C++ 编译器而不是线程)。我们主要在Sun Solaris(版本 2.5 & 2.6)上使用并开发软件本身,而RedHat Linux 5.0 居其次。 

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

有原生线程的AIX 4.x 
包括 MIT-pthreads 包的BSDI 2.x 
有原生线程的BSDI 3.0、3.1和4.x 
有原生线程的DEC UNIX 4.x 
包括MIT-pthreads包的FreeBSD 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 
MacOS 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、Win98和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 注意事项。 

如果你碰到问题,在把问题邮寄到[email protected]时,请总是使用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命令的-lmysqlclient选项进行链接。你可能也需要指定一个 -L 选项,告诉链接器在哪儿查找库文件。例如,如果库文件安装在“/usr/local/mysql/lib”里,在链接命令上使用 -L/usr/local/mysql/lib -lmysqlclient。 

对使用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或更新。 
如果你遇到问题,当向[email protected]邮寄问题时,请一直使用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++。如果构造失败并且产生有关编译器或链接器的错误,不能创建共享库“libmysqlclient.so.#”(“#”是一个版本号), 你可以通过为configure指定--disable-shared选项来解决此问题。在这种情况下,configure将不构造一个共享libmysqlclient.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/libmysql.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的模块, 你应该做下列步骤: 

打开一个DOS 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不能找到共享库文件“libmysqlclient.so”。 

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

用perl Makefile.PL -static而非perl Makefile.PL编译Msql-Mysql-modules分发。 
拷贝libmysqlclient.so到其他共享库文件所在的目录(可能是“/usr/lib”或“/lib”)。 
在Linux上,你可以把libmysqlclient.so所在目录的路径名加到“/etc/ld.so.conf”文件中。 
把libmysqlclient.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时,可能看到这样的一个错误: 

x 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: libmysqlclient.so.#: open failed: No such file or directory

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

用下列标志链接客户(而不是-Lpath): -Wl,r/full-path-to-libmysqlclient.so。 
拷贝libmysqclient.so到“/usr/lib”。 
在运行你的客户程序前,把libmysqlclient.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: libmysqlclient.so.4: open failed: No such file or directory

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

用下列标志链接客户(而不是-Lpath): -Wl,r/path-libmysqlclient.so。 
拷贝libmysqclient.so到“/usr/lib”。 
在运行你的客户程序前,把libmysqlclient.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或更新。 

感谢[email protected]提供这个信息。 

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资源文件中以便从命令行访问mysql和mysqladmin。 

alias mysql '/usr/local/mysql/bin/mysql'
alias mysqladmin '/usr/local/mysql/libexec/mysqladmin'

责任编辑:eight(2001-06-06 21:26)



相关文章

相关软件