分类: Mysql/postgreSQL
2008-05-11 17:26:50
本节列出了在Windows中升级MySQL应采取的步骤。
1. 进行升级前你应先备份当前的MySQL安装。请参见5.9.1节,“数据库备份”。
2. 从http://dev.mysql.com/downloads/下载最新Windows版MySQL。
3. 升级MySQL前,必须停止服务器。
如果服务器安装为服务,必须在命令提示符下在命令行中用下面的命令停止服务:
C:\> NET STOP MYSQL
如果MySQL服务器不是服务,使用下面的命令停止服务器:
C:\> C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqladmin -u root shutdown
4. 当从以前至的4.1.5版本升级到MySQL 5.1时,或从Zip文件安装的MySQL升级到MySQL Installation Wizard(安装帮助)安装的MySQL时,你必须手动卸载前面安装的MySQL服务。
要想卸载MySQL服务,使用下面的命令:
C:\> C:\mysql\bin\mysqld --remove
如果你不想卸载已有的服务,MySQL Installation Wizard(安装帮助)则不会正确安装新的MySQL服务。
5. 如果你使用MySQL Installation Wizard(安装帮助),按照2.3.4节,“使用MySQL安装向导”的描述来启动帮助。
6. 如果用Zip文件安装MySQL,应提取文件。你可以覆盖已有的MySQL安装(通常位于C:\mysql),或将它安装到其它目录,例如 C:\mysql4。建议覆盖原有的安装。
7. 重新启动服务器。如果你运行MySQL服务,则使用NET START MySQL,还可以直接调用mysqld。
8. 关于在Windows之外的操作系统升级MySQL的详细信息,请参阅2.10节,“升级MySQL”。
9. 如果遇到错误,参见 2.3.14节,“在Windows环境下对MySQL安装的故障诊断与排除”。
已经证明,Windows版MySQL很稳定。Windows版MySQL的功能与相应的Unix版相同,只有以下例外:
· Windows 95和线程
Windows 95创建一个线程时大约需要200字节的主内存。MySQL的每个连接都会创建一个新线程,因此如果你的服务器正处理许多连接,你不应当在Windows 95中运行mysqld。
· 有限的端口数目
Windows系统有大约4,000个端口供客户端连接,某个端口的连接关闭后,在能够重新利用该端口前,需要2至4分钟。在客户端频繁连接并从服务器上断开时,在可以重新使用关闭的端口前,有可能用完了所有可用的端口。如果发生这种情况,MySQL服务器不会响应,即使它仍在运行。请注意机器上运行的其它应用程序也可以使用端口,此时可供MySQL使用的端口数要少。
详细信息参见。
· 并行读
MySQL依靠pread()和pwrite()系统调用来同时使用INSERT和SELECT。目前我们使用互斥来竞争pread()和pwrite()。我们将来想用虚拟接口替换文件级接口,因此要想更快,我们可以在NT、2000和XP上使用readfile()/writefile()接口。目前MySQL 5.1可以打开的文件的限制数目为2,048,意味着在Windows NT,2000,XP和2003上可以运行的并行线程不如Unix上多。
· 阻塞读
MySQL为每个连接使用阻塞读取,如果启用了命名管道连接,其含义如下:
o 连接不会在8小时后自动断开,而在Unix版MySQL中会发生。
o 如果连接被挂起,不杀掉MySQL则不会将其中断。
o mysqladmin kill不会杀掉睡眠中的连接。
o 只要有睡眠连接,mysqladmin shutdown不会中断。
我们计划在将来修复该问题。
· ALTER TABLE
执行ALTER TABLE语句时,将该表锁定不让其它线程使用。在Windows中,你不能删除正被另一个线程使用的文件。在将来,我们会找出办法解决该问题。
· DROP TABLE
在Windows中对一个被MERGE表应用的表执行DROP TABLE不会实现,因为MERGE处理器将表从MySQL上层映射隐藏起来。由于Windows不允许删除打开的文件,必须在删除表之前首先清空所有MERGE表(使用FLUSH TABLES)或删掉MERGE表。
· DATA DIRECTORY and INDEX DIRECTORY
在Windows中将忽略DATA DIRECTORY和INDEX DIRECTORY选项,因为Windows不支持符号连接。在具有非功能realpath()调用的系统中,这些选项也被忽略。
· DROP DATABASE
你不能删掉正被线程使用的数据库。
· 从Task Manager(任务管理器)杀掉MySQL
你不能从Task Manager(任务管理求)或使用Windows 95的shutdown工具来杀掉MySQL。你必须通过mysqladmin shutdown停止它。
· 大小写名
由于Windows对文件名大小写不敏感。因此在Windows中MySQL数据库名和表名对大小写也不敏感。唯一的限制是在同一个语句中,必须同时使用大写或小写指定数据库名和表名。请参见9.2.2节,“识别符大小写敏感性”。
· ‘\’路径名间隔符
Windows中的路径名用‘\’符间隔开,在MySQL中还是转义字符。如果你使用LOAD DATA INFILE或SELECT ... INTO OUTFILE,用‘/’符使用Unix-类文件名:
mysql> LOAD DATA INFILE 'C:/tmp/skr.txt' INTO TABLE skr;
mysql> SELECT * INTO OUTFILE 'C:/tmp/skr.txt' FROM skr;
你还可以使用双‘\’符:
mysql> LOAD DATA INFILE 'C:\\tmp\\skr.txt' INTO TABLE skr;
mysql> SELECT * INTO OUTFILE 'C:\\tmp\\skr.txt' FROM skr;
· 管道问题。
管道不能在Windows命令行提示符下可靠地工作。如果管道包括字符^Z/CHAR(24),Windows认为遇到了文件末尾并中断程序。
这主要是按照如下所示使用二进制日志的主要问题:
C:\>mysqlbinlog binary-log-name | mysql --user=root
如果使用日志时出现问题,怀疑是由于^Z / CHAR(24)字符,你可以使用下面的程序:
C:\> mysqlbinlog binary-log-file --result-file=/tmp/bin.sql
C:\> mysql --user=root --execute "source /tmp/bin.sql"
后面的命令还可以用来可靠读取任何包含二进制数据的SQL文件。
· Access denied for user错误
如果你试图运行MySQL客户端程序来连接同一机器上运行的服务器,但是遇到错误Access denied for user 'some-user'@'unknown' to database 'mysql',这意味着MySQL不能正确识别你的主机名。
要解决该问题,你应当创建一个名为\windows\hosts包含下面信息的文件:
127.0.0.1 localhost
这儿有一些公开问题,提供给想要帮助我们改进Windows中的MySQL的人们:
· 增加宏来使用Windows提供的更快的线程安全增/减方法。
建议在Linux中使用RPM包来安装MySQL。MySQL RPM目前已经嵌入到SuSE Linux 7.3系统中,但是应当能在大多数支持rpm和使用glibc的Linux版本中工作。要想获得RPM软件包,参见2.1.3节,“怎样获得MySQL”。
MySQL AB不提供与具体平台相关的RPM;具体平台相关的RPM和通用RPM之间的区别是具体平台相关RPM为目标平台而构建,为动态连接。而通用RPM与Linux线程之间是静态连接。
注释:通常由其它供应商提供MySQL的RPM分发版。其特征和功能与MySQL AB所构建的不同,该手册中的指令不一定适合安装其它供应商提供的MySQL的RPM分发版。此时应咨询供应商的说明。
如果RPM文件有问题(例如,如果你收到错误“Sorry, the host 'xxxx' could not be looked up”),参见2.12.1.2节,“Linux二进制分发版说明”。
在大多数情况,你只需要安装MySQL-server和MySQL-client软件包来安装MySQL。在标准安装中不需要其它的包。如果你想要运行含更多功能的MySQL-Max服务器,还应当安装MySQL-Max RPM。必须先安装M MySQL-server RPM再安装该模块。请参见5.1.2节,“mysqld-max扩展MySQL服务器”。
如果安装MySQL软件包时出现从属错误(例如,“error: removing these packages would break dependencies: libmysqlclient.so.10 is needed by ..”),你还应当安装包MySQL-shared-compat,其中包括两个向后兼容的共享库(MySQL 4.0为libmysqlclient.so.12,MySQL 3.23为libmysqlclient.so.10)。
许多Linux分发版包含了MySQL 3.23,通常动态连接应用程序以节省硬盘空间。如果这些共享库在单独的包内(例如,MySQL-shared),只需要安装这些包并升级MySQL服务器和客户端软件包(为静态连接,不依赖共享库)。对于包含与MySQL服务器相同软件包中的共享库的分发版(例如,Red Hat Linux),你可以安装3.23 MySQL-shared RPM,或使用MySQL-shared-compat包。
可以使用以下RPM包:
· MySQL-server-VERSION.i386.rpm
MySQL服务器。你需要该选项,除非你只想连接运行在另一台机器上的MySQL服务器。 注释:在MySQL 4.0.10之前,服务器RPM文件被称为MySQL-VERSION.i386.rpm。也就是说,名称中不含有-server。
· MySQL-Max-VERSION.i386.rpm
MySQL-Max服务器。该服务器具有其它功能,这是MySQL-server RPM不具备的。你必须首先安装MySQL-server RPM,因为MySQL-Max RPM依赖于它。
· MySQL-client-VERSION.i386.rpm
标准MySQL客户端程序。你可能总是要安装该软件包。
· MySQL-bench-VERSION.i386.rpm
测试和基准。需要Perl和DBD::mysql模块。
· MySQL-devel-VERSION.i386.rpm
库和包含文件,如果你想要编译其它MySQL客户端,例如Perl模块,则需要。
· MySQL-shared-VERSION.i386.rpm
该软件包包含某些语言和应用程序需要动态装载的共享库(libmysqlclient.so*),使用MySQL。
· MySQL-shared-compat-VERSION.i386.rpm
该软件包包括MySQL 3.23和MySQL 4.0的共享库。如果你安装了应用程序动态连接MySQL 3.23,但是你想要升级到MySQL 4.0而不想打破库的从属关系,则安装该软件包而不要安装MySQL-shared。从MySQL 4.0.13起包含该安装软件包。
· MySQL-embedded-VERSION.i386.rpm
嵌入式MySQL服务器库(从MySQL 4.0起)。
· MySQL-VERSION.src.rpm
包含以前所有软件包的源码。可用来在其它架构上重建RPM(例如,Alpha或SPARC)。
要想看到RPM软件包内的所有文件(例如,MySQL-server RPM),运行:
shell> rpm -qpl MySQL-server-VERSION.i386.rpm
要想执行标准最小安装,运行:
shell> rpm -i MySQL-server-VERSION.i386.rpm
shell> rpm -i MySQL-client-VERSION.i386.rpm
要想只安装客户端软件包,运行:
shell> rpm -i MySQL-client-VERSION.i386.rpm
RPM提供在安装软件包前验证其完整性和真实性的功能。如果你要想了解关于该功能的更多信息,参见2.1.4节,“通过MD5校验和或GnuPG验证软件包的完整性”。
服务器RPM将数据放入/var/lib/mysql目录。RPM还为mysql用户创建登录账户(如果还没有),用来运行MySQL服务器,并在/etc/init.d/创建相应条目,以便在引导时自动启动服务器。(这意味着如果你已经安装并且已经更改启动脚本,你可能要复制脚本,以便你安装新RPM时 不会丢掉脚本)。关于系统启动时如何自动启动MySQL的详细信息,参见 2.9.2.2节,“自动启动和停止MySQL”。
如果想要在旧的不支持/etc/init.d(直接或通过符号连接)初始化脚本的Linux分发版中安装MySQL RPM,你应当创建一个指向初始化脚本实际安装的位置的符号连接。例如,如果安装位置为/etc/rc.d/init.d,安装RPM前使用这些命令创建/etc/init.d,作为指向该位置的符号连接:
shell> cd /etc
shell> ln -s rc.d/init.d。
目前主要Linux分发版应当支持使用/etc/init.d的新目录布局,因为需要LSB(Linux标准基)兼容性。
如果你安装的RPM文件包括MySQL-server,安装后MySQLd服务器应当能启动并运行。你应当能使用MySQL启动。
如果出现问题,可以从二进制安装部分找到详细信息。2.7节,“在其它类Unix系统中安装MySQL”。
注释:MySQL授权表中的账户开始没有密码。启动服务器后,应当按照2.9节,“安装后的设置和测试”中的说明为它们设置密码。
可以在Mac OS X 10.2.x(“Jaguar”)和以上版本上Mac OS X使用二进制安装软件包的PKG格式代替二进制分发版来安装MySQL。请注意该软件包不支持旧版本的Mac OS X(例如,10.1.x)。
安装软件包位于硬盘映象(.dmg)文件中,必须首先双击搜索起中的图标来安装该文件。应当安装图像并显示其内容。
要想获得MySQL,参见2.1.3节,“怎样获得MySQL”。
注释:在继续安装前,一定要使用MySQL管理器应用程序(在Mac OS X服务器上)或通过命令行的mysqladmin shutdown关闭所有运行MySQL服务器实例。
要想安装MySQL PKG文件,双击软件包图标。将启动Mac OS X安装软件包安装器,将指导你完成MySQL安装。
Mac OS X安装软件包的安装器中有一个缺陷,你会在目标盘选择对话框中发现该错误消息:
You cannot install this software on this disk. (null)
如果出现该错误,只需要点击Go Back按钮返回前面的窗口。然后点击Continue再次选择目标盘,此时应当可以正确地选择目标盘。我们已经向Apple报告了该缺陷,它正在调查该问题。
MySQL的Mac OS X PKG安装到/usr/local/mysql-VERSION,并且还会安装一个符号连接,/usr/local/mysql,指向新的位置。如果有/usr/local/mysql目录,首先将它改名为/usr/local/mysql.bak。安装完后,安装器执行mysql_install_db在MySQL数据库中创建授权表。
安装布局与tar文件二进制分发版类似;所有MySQL二进制代码位于目录/usr/local/mysql/bin中。默认情况,MySQL套接字文件创建为/tmp/mysql.sock。请参见2.1.5节,“安装布局”。
MySQL安装需要Mac OS X的mysql用户账户。在Mac OS X 10.2及以上版本中,默认情况应存在mysql用户账户。
如果正运行Mac OS X服务器,需要安装MySQL。随Mac OS X服务器版本安装的MySQL版本如下表所示:
Mac OS X服务器版本 |
MySQL版本 |
10.2-10.2.2 |
3.23.51 |
10.2.3-10.2.6 |
3.23.53 |
10.3 |
4.0.14 |
10.3.2 |
4.0.16 |
10.4.0 |
4.1.10a |
本节只覆盖官方MySQL Mac OS X PKG版本。一定要阅读Apple关于MySQL安装的帮助信息:运行“帮助视图”应用程序,选择“Mac OS X服务器”帮助,搜索“MySQL”,阅读标题为“安装MySQL”的内容。
对于Mac OS X服务器上已经安装的MySQL版本,如果早于4.0,应特别注意应当使用mysqld_safe而不是safe_mysqld来启动mysqld。
如果你前面在Mac OS X上安装了从下载的Marc Liyanage的MySQL软件包,你可以只使用该页给出的二进制安装布局按照更新说明来安装。
如果你从Marc的3.23.xx 版本或从Mac OS X的MySQL服务器版本升级到官方MySQL PKG,你还需要将已有MySQL授权表转换为当前格式,因为已经加了许多新的安全权限。请参见2.10.2节,“升级授权表”。
如果你想在系统启动过程中自动启动MySQL,你还需要安装MySQL Startup Item。在MySQL 5.1中,它是Mac OS X安装盘映像的一部分,是一个独立的安装软件包。只需要双击MySQLStartupItem.图标并按照说明来安装。
请注意Startup Item只需要安装一次!不需要在以后每次升级MySQL软件包时都安装它。
MySQL 5.1的Startup Item安装在/Library/StartupItems/MySQLCOM。(在MySQL 4.1.2以前的版本,安装位置为/Library/StartupItems/MySQL,但与Mac OS X服务器安装的MySQL Startup Item冲突)。Startup Item安装时在系统配置文件/etc/hostconfig中加入变量MySQLCOM=-YES-。如果你想要disable自动启动MySQL,只需要将该变量更改为MySQLCOM=-NO-。
在Mac OS X服务器上,默认MySQL安装使用/etc/hostconfig文件中的变量MySQL。MySQL AB Startup Item安装器将其设置为MySQL=-NO-禁用该变量。这样可以避免启动时间与MySQL AB Startup Item使用的MySQLCOM变量冲突。但是,不会关闭运行的MySQL服务器。你应当自己关闭。
安装完后,可以在终端窗口运行下面的命令来启动MySQL。你必须具有管理员权限来执行该任务。
如果你已经安装的Startup Item:
shell> sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
(Enter your password, if necessary)
(Press Control-D or enter "exit" to exit the shell)
如果不使用Startup Item,输入下面的命令序列:
shell> cd /usr/local/mysql
shell> sudo ./bin/mysqld_safe
(Enter your password, if necessary)
(Press Control-Z)
shell> bg
(Press Control-D or enter "exit" to exit the shell)
你应当能够连接MySQL服务器,例如,通过运行/usr/local/mysql/bin/mysql来连接。
注释:MySQL授权表中的账户开始没有密码。启动服务器后,应当按照2.9节,“安装后的设置和测试”中的说明来设置密码。
你可以为外壳源文件起一个别名,使它更容易访问常用的程序,例如从命令行运行mysql和mysqladmin。tcsh语法为:
aliasMySQL /usr/local/mysql/bin/mysql
aliasMySQLadmin /usr/local/mysql/bin/mysqladmin
对于bash,使用:
aliasMySQL=/usr/local/mysql/bin/mysql
aliasMySQLadmin=/usr/local/mysql/bin/mysqladmin
最好是在PATH环境变量中加入/usr/local/mysql/bin。例如,如果外壳命令是tcsh,在$HOME/.tcshrc文件中加入下面一行:
setenv PATH ${PATH}:/usr/local/mysql/bin
如果根目录中没有.tcshrc文件,则用文本编辑器创建该文件。
如果你对已有的安装进行升级,请注意安装新MySQL PKG时不会卸载旧的安装目录。遗憾的是,Mac OS X安装器尚未提供功能来正确升级前面安装的软件包。
要想在新安装中使用已有的数据库,你需要将旧数据目录中的内容复制到新的数据目录。执行该操作时,确保关闭新、旧服务器。将以前安装的MySQL数据库文件拷贝过来并成功启动新的服务器后,应当卸载旧的文件以节省硬盘空间。并且,还应当卸掉位于/Library/Receipts/mysql-VERSION.pkg的旧版本Package Receipt目录。
将MySQL装入到NetWare首先由Novell实现。Novell客户应当满意,NetWare 6.5中捆绑了SQL二进制,并具有自动商业使用许可,用于运行该版本NetWare的所有服务器。
NetWare的MySQL使用NetWare的Metrowerks CodeWarrior和专用跨编译版GNU自动工具编译而成。
可以从http://dev.mysql.com/downloads/获得最新的二进制软件包NetWare。请参见2.1.3节,“怎样获得MySQL”。
为了使MySQL驻留在主机上,NetWare服务器必须满足以下要求:
· 安装的 或的Latest Support Pack(最新支持补丁)。
· 系统必须满足Novell的最低要求以运行相关版本的NetWare。
· MySQL数据及其二进制,必须安装到NSS卷内;不支持传统卷。
要想在NetWare下安装MySQL,遵从下面的步骤:
1. 如果你对前面的安装进行升级,停止MySQL服务器。应使用下面的命令从服务器控制台完成:
2. SERVER: mysqladmin -u root shutdown
3. 从客户端登录到目标服务器上,访问安装MySQL的位置。
4. 将二进制软件包Zip文件提取到服务器上。一定要使用Zip文件中的路径。简单地将文件提取到SYS:\是很安全的。
如果你从前面的安装升级,你可能需要复制数据目录(例如,SYS:MYSQL\DATA)和my.cnf(如果你已经定制)。然后你可以删除旧版本的MySQL。
5. 你可以将目录重新命名为更加一致和易于使用的名称。在本手册的例子中使用SYS:MYSQL来指向安装目录。
请注意在NetWare上安装MySQL不会检测到是否已经安装了NetWare发布之外的MySQL版本。因此,如果你已经在SYS:\MYSQL安装了从网站上下载的最新MySQL版本(例如,MySQL 4.1或更新版本),在升级NetWare服务器之前,必须重新命名文件夹;否则,SYS:\MySQL中的文件会被NetWare Support Pack中的版本所覆盖。
6. 在服务器控制台中,加入含有 MySQL NLM的目录的搜索路径。例如:
7. SERVER: SEARCH ADD SYS:MYSQL\BIN
8. 初始化数据目录和授权表,如果需要,应在服务器控制台执行mysql_install_db。
9. 在服务器控制台使用mysqld_safe启动MySQL服务器。
10.要完成安装,还应当在autoexec.ncf中加入以下命令。例如,如果MySQL安装在SYS:MYSQL中,你想让MySQL自动启动,可以加入以下行:
11. #Starts the MySQL 5.1.x database server
12. SEARCH ADD SYS:MYSQL\BIN
13. MYSQLD_SAFE
如果MySQL运行在NetWare 6.0上,我们强烈建议你在命令行中使用--skip-external-locking选项:
#Starts the MySQL 5.1.x database server
SEARCH ADD SYS:MYSQL\BIN
MYSQLD_SAFE --skip-external-locking
还需要使用CHECK TABLE和REPAIR TABLE来替代myisamchk,因为myisamchk使用外部锁。已经知道外部锁在NetWare 6.0中有问题;在NetWare 6.5中已经解决了该问题。
NetWare中的mysqld_safe提供了窗口保留功能。当卸载(关闭)mysqld_safe NLM时,默认情况窗口不会消失。相反,会提示用户输入:
**
如果你想让NetWare自动关闭窗口,在mysqld_safe中使用--autoclose选项。例如:
#Starts the MySQL 5.1.x database server
SEARCH ADD SYS:MYSQL\BIN
MYSQLD_SAFE --autoclose
14.当首次安装或从前面的版本升级MySQL 5.1版时,应下载并安装最新的相应Perl模块和PHP扩展名:
· Perl for NetWare:
· PHP for NetWare:
(MySQL 4.1的PHP 5扩展名适用于MySQL 5.1)。
在5.1.3节,“mysqld_safe:MySQL服务器启动脚本”中详细描述了NetWare中的mysqld_safe的行为。
如果服务器上已经安装了MySQL,一定要检查autoexec.ncf中已有的MySQL启动命令,如果需要则编辑或删除这些命令。
注释:MySQL授权表中的初始账户没有密码。启动服务器后,你应当使用2.9节,“安装后的设置和测试”中的说明来设置密码。
本节介绍在各种平台上安装tar压缩文件格式的MySQL二进制分发版(文件有.tar.gz 扩展名)。详细目录参见2.1.2.5节,“MySQL AB编译的MySQL二进制版本”。
要想获得MySQL,参见2.1.3节,“怎样获得MySQL”。
MySQLtar文件二进制分发版的文件名格式为mysql-VERSION-OS.tar.gz,其中VERSION是版本号(例如,5.1.2-alpha),OS表示分发版安装的操作系统类型(例如,pc-linux-i686)。
除了这些通用软件包,我们还为各平台提供了具体的二进制安装软件包。关于如何安装的详细信息参见2.2节,“使用二进制分发版的标准MySQL安装”。
你需要下面的工具来安装MySQL tar文件二进制分发版:
· GNU gunzip解压缩分发版。
· 一个适当的tar解包分发版。 GNU tar已知可以。一些操作系统中含有预安装的tar,已知有问题。例如,已知Mac OS X tar和Sun tar对于长文件名有问题。在Mac OS X中,你可以使用预安装的gnutar程序。在其它系统中若tar不完善,你应当首先安装GNU tar。
如果你遇到问题,在把问题寄到MySQL邮件目录时,请一定使用mysqlbug,就算问题不是一个缺陷,mysqlbug也会收集系统信息,将有助于其它人解决你的问题。不使用mysqlbug,你将减少得到你问题的一个解决方案的可能性!在你解包分发版后,你会在“bin”目录下找到mysqlbug。请参见1.7.1.3节,“如何通报缺陷和问题”。
必须执行以便安装并使用MySQL二进制分发版的基本命令是:
shell> groupadd mysql
shell> useradd -g mysql mysql
shell> cd /usr/local
shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> cd mysql
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell> chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &
注释:该过程未设置MySQL账户的密码。完成下面的过程后,继续执行想2.9节,“安装后的设置和测试”。
下面为安装二进制分发版的更详细的描述:
1. 为mysqld增加一个登录用户和组:
2. shell> groupadd mysql
3. shell> useradd -g mysql mysql
这些命令将增加MySQL组和MySQL用户。不同版本的Unix中,useradd和groupadd的语法可能会稍有不同。还可以称为adduser和addgroup。
你可能会将这些用户和组命名为mysql之外的名称。如果是这样,在下面的步骤中替换为相应的名称。
4. 挑选一个你想解开分发包的目录,进入该目录。在下面的例子中,我们将分发解包在“/usr/local”下(因此,下列说明假设你有权限在“/usr/local”中创建文件和目录,如果该目录被保护,你需要以root实施安装)。
5. shell> cd /usr/local
6. 从2.1.3节,“怎样获得MySQL”中列出的站点之一获得一个分发文件。对于一个给定的版本,所有平台的二进制分发版均从相同的MySQL源码分发版构建。
7. 解包分发版,将创建安装目录。然后生成到该目录的一个符号链接:
8. shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -
9. shell> ln -s full-path-to-mysql-VERSION-OS mysql
tar命令创建mysql-VERSION-OS目录。ln命令生成到该目录的一个符号链接。这让你更容易地把安装目录指定为/usr/local/mysql。
使用GNU tar,则不再需要gunzip。可以用下面的命令替换第一行来解包和提取分发版:
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
10.进入安装目录:
11. shell> cd mysql
你会在mysql目录下发现几个文件和子目录,对安装目的最重要的是“bin”和“scripts”子目录。
· bin
这个目录包含客户端程序和服务器,你应该把这个目录的完整路径加到PATH环境变量,以便shell能正确的找到MySQL程序。请参见附录F:环境变量。
· scripts
这个目录包含mysql_install_db脚本,用来初始化mysql数据库的 授权表,其中贮存了服务器访问允许。
12.如果还没有安装MySQL,必须创建MySQL授权表:
13. shell> scripts/mysql_install_db --user=mysql
如果你用root运行命令,应当使用--user选项。选项的值应与你在第一步为运行服务器所创建的登录账户相同。如果你用该用户登录来运行命令,可以省略--user选项。
创建或升级授权表后,需要手动重新启动服务器。
14.将程序二进制的所有权改为root,数据目录的所有权改为运行mysqld 的用户。如果位于安装目录(/usr/local/mysql)下,命令应为:
15. shell> chown -R root .
16. shell> chown -R mysql data
17. shell> chgrp -R mysql .
第一个命令将文件的所有属性改为root用户。第二个命令将数据目录的所有属性改为mysql用户。第三个命令将组属性改为mysql组。
18.如果你喜欢在引导机器时自动启动MySQL,可以拷贝support-files/mysql.server文件到系统有启动文件的地方。更多的信息可以在support-files/mysql.server脚本中和2.9.2.2节,“自动启动和停止MySQL”中找到。
19.如果安装了DBI和DBD::mysql Perl模块,可以使用bin/mysql_setpermission脚本增加新账户。关于说明,参见 2.13节,“Perl安装注意事项”。
20.如果你想使用mysqlaccess而在某个非标准的地点有MySQL分发版,你必须改变地点,在那儿mysqlaccess期望找到mysql客户端。编辑“bin/mysqlaccess”脚本,大约在第18行,寻找类似下面的行:
21. $MYSQL = '/usr/local/bin/mysql'; # path to mysql executable
改变路径以反映出mysql实际存储在你系统上的地点。如果不这样做,当运行mysqlaccess时,你将遇到一个broken pipe的错误。
在所有东西被解包并且安装以后,你应该初始化并且测试你的分发版。
可以用下列命令启动MySQL服务器:
shell> bin/mysqld_safe --user=mysql &
关于mysqld_safe的详细信息参见5.1.3节,“mysqld_safe:MySQL服务器启动脚本”。
注释:MySQL授权表中的账户开始没有密码。启动服务器后,应当使用2.9节,“安装后的设置和测试”中的说明来设置密码。
安装源码之前,首先检查我们的二进制是否适合你的平台,是否可以工作。我们做了大量的工作确保我们的二进制用最合适的选项来构建。
要获得MySQLa 源码分发版,参见2.1.3节,“怎样获得MySQL”。
MySQL源码分发版为tar压缩文件,文件名格式为mysql-VERSION.tar.gz,其中 VERSION是版本号,例如5.1.2-alpha。
你需要下列工具构造并安装MySQL源码:
· GNU gunzip解压缩该分发版。
· 一个适当的tar解包分发版。GNU tar已知可以。一些操作系统中含有预安装的tar,已知有问题。例如,已知Mac OS X tar和Sun tar对于长文件名有问题。在Mac OS X中,你可以使用预安装的gnutar程序。在其它系统中若tar不完善,你应当首先安装GNU tar。
· 一个能工作的ANSI C++编译器。gcc> = 2.95.2、egcs> = 1.0.2或egcs 2.91.66、SGI C++和SunPro C++是一些已知能工作的编译器。当使用gcc时,不需要libg++。gcc2.7.x有一个缺陷,使得它可能不能编译一些完全合法的C++文件,例如“sql/sql_base.cc”。如果你仅有gcc2.7.x,你必须升级gcc才能编译MySQL。已知gcc 2.8.1在某些平台上有一些问题,因此如果平台上有新的编译器,则不要使用gcc 2.8.1。
编译MySQL 3.23.x时,建议使用gcc 2.95.2或更新版。
· 一个优秀的make程序。总是推荐GNU make且有时必须使用。如果你有问题,我们推荐试一试GNU make3.75或更新版。
如果你使用的gcc版本足够新,可以识别-fno-exceptions选项,则使用该选项非常重要。否则,你编译二进制时出现问题。我们建议你同时使用-felide-constructors和-fno-rtti选项。当有疑问时,执行下面操作:
CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors \
-fno-exceptions -fno-rtti" ./configure \
--prefix=/usr/local/mysql --enable-assembler \
--with-mysqld-ldflags=-all-static
在大多数系统中,可以得到快速、稳定的二进制。
如果你遇到问题,在把问题邮寄到MySQL邮件目录时,请总是使用mysqlbug,就算问题不是一个缺陷,mysqlbug收集系统信息,将有助于其它人解决你的问题。不使用mysqlbug,你将减少得到问题的解决方案的可能性!在解包分发版后,你会在“bin”目录下找到mysqlbug。请参见1.7.1.3节,“如何通报缺陷和问题”。
你必须执行的安装MySQL源码分发版的基本命令是:
shell> groupadd mysql
shell> useradd -g mysql mysql
shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
shell> ./configure --prefix=/usr/local/mysql
shell> make
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> bin/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql var
shell> chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &
如果从一个源码RPM开始,那么执行如下命令:
shell> rpmbuild --rebuild --clean MySQL-VERSION.src.rpm
这样你制作一个可以安装的二进制RPM。对于旧版本的RPM,你可能需要替换用rpm替换命令rpmbuild。
注释:该过程不为任何MySQL账户设置密码。完成下面的过程后,根据2.9节,“安装后的设置和测试”进行安装后的设置和测试。
以下是安装MySQL源码分发版的更详细的描述:
1. 为mysqld增加一个登录用户和组:
2. shell> groupadd mysql
3. shell> useradd -g mysql mysql
这些命令将增加MySQL组和 MySQL用户。不同版本的Unix中,useradd 和groupadd的语法可能会稍有不同。还可以称为adduser和addgroup。
你可能会将这些用户和组命名为mysql之外的名称。如果是这样,在下面的步骤中替换为相应的名称。
4. 挑选一个你想解开分发包的目录,进入该目录。
5. 从2.1.3节,“怎样获得MySQL”中列出的站点之一获得一个分发文件。
6. 在当前目录下解包分发版:
7. shell> gunzip < /path/to/mysql-VERSION.tar.gz | tar xvf -
该命令创建mysql-VERSION 目录。
使用GNU tar,则不再需要gunzip。你可以用下面的命令来解包和提取分发:
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
8. 进入解包分发版的顶级目录:
9. shell> cd mysql-VERSION
请注意目前必须从顶级目录配置和构建MySQL。你不能在其它目录中构建。
10.配置发布版并且编译:
11. shell> ./configure --prefix=/usr/local/mysql
12. shell> make
当你运行configure时,你可能想要指定一些选项,运行./configure --help得到一个选项列表。2.8.2节,“典型配置选项”讨论一些很有用的选项。
如果configure失败,你将向MySQL邮件目录发送包含你认为能帮你解决该问题的包含“config.log”中所有行的邮件,也要包括configure的最后几行输出。用mysqlbug脚本邮寄错误报告。请参见1.7.1.3节,“如何通报缺陷和问题”。
如果编译失败,参见2.8.4节,“处理MySQL编译问题”寻求帮助。
13.安装分发版:
14. shell> make install
如果你想要设置一个选项文件,使用support-files目录中的一个作为模板。例如:
shell> cp support-files/my-medium.cnf /etc/my.cnf
可能你需要用root用户运行这些命令。
如果想要配置为支持InnoDB表,应当编辑/etc/my.cnf文件,去掉innodb_...开始选项行前面的#符,并将选项值改为你想要的。请参见4.3.2节,“使用选项文件”和15.2.3节,“InnoDB配置”。
15.进入安装目录:
16. shell> cd /usr/local/mysql
17.如果还没有安装的MySQL,必须创建MySQL授权表:
18. shell> bin/mysql_install_db --user=mysql
如果用root运行命令,应当使用--user选项。选项的值应与你在第一步为运行服务器所创建的登录账户相同。如果用该用户登录来运行命令,可以省略--user选项。
用mysql_install_db创建MySQL授权表后,需要手动重新启动服务器
19.将程序二进制的所有权改为root,数据目录的所有权改为你运行mysqld的用户。如果位于安装目录(/usr/local/mysql)下,命令应为:
20. shell> chown -R root .
21. shell> chown -R mysql var
22. shell> chgrp -R mysql .
第一个命令将文件的所有属性改为root用户。第二个命令将数据目录的所有属性改为mysql用户。第三个命令将组属性改为mysql组。
23.如果你喜欢在引导机器时自动启动MySQL,你可以拷贝support-files/mysql.server文件到你系统有启动文件的地方。更多的信息可以在support-files/mysql.server脚本中和2.9.2.2节,“自动启动和停止MySQL”中找到。
24.如果安装了DBI和DBD::mysql Perl模块,可以使用bin/mysql_setpermission脚本增加新账户。关于说明,参见2.13节,“Perl安装注意事项”。
在所有东西被安装以后,你应当使用该命令初始化并且测试你的分发版:
shell> /usr/local/mysql/bin/mysqld_safe --user=mysql &
如果这个命令提示mysqld daemon ended并马上失败,那么你能在数据目录中的文件“hostname'.err”找到一些信息。
关于mysqld_safe的详细信息参见5.1.3节,“mysqld_safe:MySQL服务器启动脚本”。
注释:MySQL授权表中的账户开始没有密码。启动服务器后,你应当使用2.9节,“安装后的设置和测试”中的说明来设置密码。
configure脚本给你一个很大的控制权来控制如何配置MySQL源码分发版。一般使用configure命令行的选项来进行。你也可以用某些环境变量作用于configure。请参见附录F:环境变量。要查看configure支持的选择列表,可以运行命令:
shell> ./configure --help
如果你没有C++编译器,则不能编译mysql(有一个客户端程序需要C++)。在这种情况下,你可以去掉configure里面测试C++编译器的代码,然后运行带有 --without-server选项的./configure。编译步骤步将仍然尝试构造mysql,但是你可以忽略任何关于“mysql.cc”的警告。(如果make停止,试试make -k告诉它即使出错继续剩下的构造步骤)。
· 如果你想要构建嵌入式MySQL库 (libmysqld.a),你应当使用--with-embedded-server选项。
第一个命令改变安装前缀以便将所有内容安装到“/usr/local/mysql”下面而非 默认的“/usr/local”。第二个命令保留默认安装前缀,但是覆盖了数据库目录默认目录(通常是“/usr/local/var”)并且把它改为/usr/local/mysql/data。编译完MySQL后,可以通过选项文件更改这些选项。请参见4.3.2节,“使用选项文件”。
注意给出的文件名必须是一个绝对路径。你还可以在以后使用MySQL选项文件更改mysql.sock的位置。请参见A.4.5节,“如何保护或更改MySQL套接字文件/tmp/mysql.sock”。
· shell>./configure --with-client-ldflags=-all-static\
· --with-mysqld-ldflags=-all-static
当你使用gcc作为C++编译器用时,它将不试图链接libg++或libstdc++。即使你安装了这些库,这样也很好,因为过去使用MySQL时,它们的部分版本会出现一些奇怪的问题。
下面列出了一些经常使用的编译器和环境变量设定值。
o gcc 2.7.2:
o CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors"
o egcs 1.0.3a:
o CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors \
o -fno-exceptions -fno-rtti"
o gcc 2.95.2:
o CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro \
o -felide-constructors -fno-exceptions -fno-rtti"
o pgcc 2.90.29 或更新版:
o CFLAGS="-O3 -mpentiumpro -mstack-align-double" CXX=gcc \
o CXXFLAGS="-O3 -mpentiumpro -mstack-align-double \
o -felide-constructors -fno- exceptions -fno-rtti"
在大多数情况,在configure行使用前面列出的选项并加入下面的选项,可以得到合理的优化的MySQL二进制:
--prefix=/usr/local/mysql --enable-assembler \
--with-mysqld-ldflags=-all-static
换句话说,对于所有最近的gcc版,整个configure行应为:
CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro \
-felide-constructors -fno- exceptions -fno-rtti" ./ configure \
--prefix=/usr/local/mysql --enable-assembler \
--with-mysqld-ldflags=-all-static
我们在MySQL网址提供的二进制均已经编译过并进行了优化,对于大多数用户应当比较完善。请参见2.1.2.5节,“MySQL AB编译的MySQL二进制版本”。其中有一些配置设定值,可以选用来构建更快的二进制,但是只适用高级用户。请参见7.5.4节,“编译和链接怎样影响MySQL的速度”。
如果构造失败并且产生有关编译器或链接器的错误,不能创建共享库“libmysqlclient.so.#”(“#”是一个版本号), 你可以通过为configure指定--disable-shared选项来解决此问题。在这种情况下,configure将不构造一个共享libmysqlclient.so.#库。
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或win1251ukr。请参见5.10.1节,“数据和排序用字符集”。
可以指定默认校对规则。MySQL默认使用latin1_swedish_ci校对规则。要想更改,使用--with-collation选项:
shell> ./configure --with-collation=COLLATION
要想更改字符集和校对规则,要同时使用--with-charset和--with-collation选项。 校对规则必须是字符集的合法校对规则。(使用SHOW COLLATION语句来确定每个字符集使用哪个校对规则)。
如果想在服务器和客户端之间变换字符,你应该看一下SET OPTION CHARACTER SET命令。请参见13.5.3节,“SET语法”。
警告:如果你在创建了任何数据库表之后改变字符集,你将必须对每个表运行myisamchk -r -q --set-character-set=charset,否则索引可能不正确地排序。(如果安装了MySQL,创建一些表,然后重新配置MySQL使用一个不同的字符集并且重新安装它,这时就可能发生这种情况。)
通过configure选项--with-extra-charsets=LIST,你可以定义在服务器中再定义哪些字符集。LIST 指下面任何一项:
o 空格间隔的一系列字符集名
o complex -,以包括不能动态装载的所有字符集
o all –,以将所有字符集包括进二进制
这导致包含一个安全的内存分配器,能发现一些错误和并提供关于正在发生的事情的输出。请参见E.1节,“调试MySQL服务器”。
· 如果客户端程序使用线程,还必须使用--enable-thread-safe-client配置选项来编译线程安全版的MySQL客户端库。将创建一个libmysqlclient_r库,可以用来连接应用程序线程。请参见25.2.15节,“如何生成线程式客户端”。
· 可以使用--with-big-tables选项构建支持大数据库表的MySQL。
该选项使变量用来将表行数保存到unsigned long long中而不是unsigned long。结果是允许表有大约1.844E+19 ((232)2)行而不是232 (~4.295E+09) 行。在以前,要完成该功能必须手动将-DBIG_TABLES传递给编译器。
属于特定系统的选项可在本章特定系统的小节里找到。请参见2.12节,“具体操作系统相关的注意事项”