轻松掌握在 Mac OS X中安装MySQL
中国it实验室 【转载】 2009年03月25日 18:03
可以在Mac OS X 10.2.x(“Jaguar”)和以上版本上Mac OS X使用二进制安装软件包的PKG格式代替二进制分发版来安装MySQL.请注意该软件包不支持旧版本的Mac OS X(例如,10.1.x)。
安装软件包位于硬盘映象(。dmg)文件中,必须首先双击搜索起中的图标来安装该文件。应当安装图像并显示其内容。
注释:在继续安装前,一定要使用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
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.5110.2.3-10.2.6 3.23.5310.3 4.0.1410.3.2 4.0.1610.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上安装了从http://www.entropy.ch下载的Marc Liyanage的MySQL软件包,你可以只使用该页给出的二进制安装布局按照更新说明来安装。
如果你从Marc的3.23.xx 版本或从Mac OS X的MySQL服务器版本升级到官方MySQL PKG,你还需要将已有MySQL授权表转换为当前格式,因为已经加了许多新的安全权限。
如果你想在系统启动过程中自动启动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/mysqlshell> 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/mysqlaliasMySQLadmin /usr/local/mysql/bin/mysqladmin |
对于bash,使用:
aliasMySQL=/usr/local/mysql/bin/mysqlaliasMySQLadmin=/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目录。
修改完成后,重新启动listener (先用lsnrctl stop, 然后 lsnrctl start), 然后,使用tnsping 来测试一下是否配置正确:
tnsping extproc_connection_data 或者
tnsping extproc_connection_data.world,如果配置正确,会显示:
Attempting to contact (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)) OK(140毫秒)
否则请检查你的上述两个文件,并注意,在修改后一定要重新启动listener,但并不需要重新启动数据库。
3.设置词法分析器(lexer)
Oracle实现全文检索,其机制其实很简单。即通过Oracle专利的词法分析器(lexer),将文章中所有的表意单元(Oracle 称为 term) 找出来,记录在一组 以 dr\$开头的表中,同时记下该term出现的位置、次数、hash 值等信息。检索时,Oracle 从这组表中查找相应的 term,并计算其出现频率,根据某个算法来计算每个文档的得分(score),即所谓的‘匹配率’。而lexer则是该机制的核心,它决定了全文检索的效率。Oracle 针对不同的语言提供了不同的 lexer, 而我们通常能用到其中的三个:
basic_lexer: 针对英语。它能根据空格和标点来将英语单词从句子中分离,还能自动将一些出现频率过高已经失去检索意义的单词作为‘垃圾’处理,如if , is 等,具有较高的处理效率。但该lexer应用于汉语则有很多问题,由于它只认空格和标点,而汉语的一句话中通常不会有空格,因此,它会把整句话作为一个term,事实上失去检索能力。以‘中国人民站起来了’这句话为例,basic_lexer 分析的结果只有一个term ,就是‘中国人民站起来了’。此时若检索‘中国’,将检索不到内容。
chinese_vgram_lexer: 专门的汉语分析器,支持所有汉字字符集。该分析器按字为单元来分析汉语句子。‘中国人民站起来了’这句话,会被它分析成如下几个term: ‘中’,‘中国’,‘国人’,‘人民’,‘民站’,‘站起’,起来‘,’来了‘,’了‘。可以看出,这种分析方法,实现算法很简单,并且能实现’一网打尽‘,但效率则是差强人意。
chinese_lexer: 这是一个新的汉语分析器,只支持utf8字符集。上面已经看到,chinese vgram lexer这个分析器由于不认识常用的汉语词汇,因此分析的单元非常机械,像上面的‘民站’,‘站起’在汉语中根本不会单独出现,因此这种term是没有意义的,反而影响效率。chinese_lexer的最大改进就是该分析器 能认识大部分常用汉语词汇,因此能更有效率地分析句子,像以上两个愚蠢的单元将不会再出现,极大 提高了效率。但是它只支持 utf8, 如果你的数据库是zhs16gbk字符集,则只能使用笨笨的那个Chinese vgram lexer.
如果不做任何设置,Oracle 缺省使用basic_lexer这个分析器。要指定使用哪一个lexer, 可以这样操作:
第一。在ctxsys用户下建立一个preference:
begin ctx_ddl.create_preference('my_lexer','chinese_vgram_lexer'); end;
第二。在建立intermedia索引时,指明所用的lexer:
create index myindex on mytable(mycolumn) indextype is ctxsys.context
parameters('lexer my_lexer');
这样建立的全文检索索引,就会使用chinese_vgram_lexer作为分析器。
4.使用job定时同步和优化
在intermedia索引建好后,如果表中的数据发生变化,比如增加或修改了记录,怎么办?由于对表所发生的任何dml语句,都不会自动修改索引,因此,必须定时同步(sync)和优化(optimize)索引,以正确反映数据的变化。
在索引建好后,我们可以在该用户下查到Oracle自动产生了以下几个表:(假设索引名为myindex):
DR\$myindex\$I,DR\$myindex\$K,DR\$myindex\$R,DR\$myindex\$N
其中以I表最重要,可以查询一下该表,看看有什么内容:
select token_text, token_count from DR\$I_RSK1\$I where rownum<=20;
这里就不列出查询接过了。可以看到,该表中保存的其实就是Oracle 分析你的文档后,生成的term记录在这里,包括term出现的位置、次数、hash值等。当文档的内容改变后,可以想见这个I表的内容也应该相应改变,才能保证Oracle在做全文检索时正确检索到内容(因为所谓全文检索,其实核心就是查询这个表)。那么如何维护该表的内容呢?总不能每次数据改变都重新建立索引吧!这就用到sync 和 optimize了。
同步(sync):将新的term 保存到I表;
优化(optimize):清除I表的垃圾,主要是将已经被删除的term从I表删除。
Oracle提供了一个所谓的ctx server来做这个同步和优化的工作,只需要在后台运行这个进程,它会监视数据的变化,及时进行同步。但笔者使用ctxserver碰到了许多问题,Oracle 北京的support也建议不使用,而是用以下的两个job来完成(该job要建在和表同一个用户下):
| -- sync: VARIABLE jobno number; BEGIN DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.sync_index(''myindex'');', SYSDATE, 'SYSDATE + (1/24/4)'); commit; END; -- optimizer VARIABLE jobno number; BEGIN DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''myindex'',''FULL'');', SYSDATE, 'SYSDATE + 1'); commit; END; |
其中, 第一个job的SYSDATE + (1/24/4)是指每隔15分钟同步一次,第二个job的SYSDATE + 1是每隔1天做一次全优化。具体的时间间隔,你可以根据自己的应用的需要而定。至此,你的全文检索功能已设置完成。
二、常见错误
下面就一些常见的错误信息给出解释和解决办法:
1、sync 失败
DRG-10595: ALTER INDEX T_DOC6_CT失败
DRG-50857: oracle error in drsxsopen
ORA-01480: STR 赋值变量缺少空后缀
解决:这是8i的一个bug, 但可以避免它,方法是在同步之前先发一个语句:
alter session set nls_language=American;
2.create index 失败
ORA-29855: 执行 ODCIINDEXCREATE 例行程序时出错
ORA-20000: interMedia Text 错误:
ORA-06512: 在"CTXSYS.DRUE", line 126
ORA-06512: 在"CTXSYS.TEXTINDEXMETHODS", line 54
ORA-06512: 在line 1
解决:这是8.1.6.3之前的版本的一个bug, 在处理中文时,某个特殊字符造成的。向Oracle要补丁,或者自己去metalink.oracle.com 下载(需要CSI 号码)。
3.create index 失败
RA-29855: 执行 ODCIINDEXCREATE 例行程序时出错
ORA-20000: interMedia Text 错误:
DRG-50704: Net8 监听器没有运行或无法启动外部过程
ORA-28575: 无法打开与外部过程代理程序的 RPC 连接
ORA-06512: 在"CTXSYS.DRUE", line 126
ORA-06512: 在"CTXSYS.TEXTINDEXMETHODS", line 54
ORA-06512: 在line 1
解决:明显的extproc配置不当。仔细阅读本文基本设置的第二步。
4.访问建有索引的表时失败
ora-29861: 域索引标记为loading/failed/unusable
解决:这是该表的一个intermedia索引有问题,该索引要么没有正确建立,要么是某次同步失败导致它状态异常。先查到是哪个索引:
Select idx_name,idx_status from ctxsys.ctx_indexes;
然后同步该索引或者强制删除它:
重建:alter index myindex rebuild online parameters('sync');
删除:drop index myindex force;
5.使用chinese_lexer失败
ERROR at row 1:
ORA-29855: err on ODCIINDEXCREATE
ORA-20000: interMedia Text err:
DRG-10502: index 1386 is not existing.
DRG-11102: the lexer cann't analyze as SIMPLIFIED CHINESE_CHINA.ZHS16GBK
ORA-06512: 在"CTXSYS.DRUE", line 126
ORA-06512: 在"CTXSYS.TEXTINDEXMETHODS", line 54
ORA-06512: 在line 1
解决:chinese_lexer 只支持utf8字符集。现在你面临抉择:忍受chinese vgram lexer的愚蠢,或者将数据库字符集改到 utf8, 但面对可能引起你的应用不能正确处理中文的风险(先咨询Oracle support, 并且与你的应用软件提供商联系)。
6.升级或应用patch后失败
ORA-29856: err when execute ODCIINDEXDROP
ORA-20000: interMedia Texterr
ORA-06508: PL/SQL: can not find program unit beingcalled
ORA-06512: at "CTXSYS.DRUE", line 126
ORA-06512: at"CTXSYS.TEXTINDEXMETHODS", line 229
ORA-06512: at line 1
解决:这是intermedia的某个object 没有正确产生或者编译。用ctxsys用户登录后,运行 \$oracle_home/ctx/admin/dr0pkh.sql 和 \$oracle_home/ctx/admin/dr0plb.sql 以重新产生所有的package.你也可以直接察看dba_objects视图,找出那些属于ctxsys用户并且status 为invalid的东西,重新产生或者重新编译。(你可能会发现有许多这种东西,不要惊讶,Oracle不会因此而崩溃)。
7.create index 失败
ERROR 位于第 1 行:
ORA-29855: 执行 ODCIINDEXCREATE 例行程序时出错
ORA-20000: interMedia Text 错误:
DRG-50857: oracle error in driddl.IndexResume
ORA-04030: 在尝试分配 524288 字节 (cursor work he,QERHJ Bit vector)时进程内存不足
ORA-06512: 在"CTXSYS.DRUE", line 126
ORA-06512: 在"CTXSYS.TEXTINDEXMETHODS", line 214
ORA-06512: 在line 1
解决:引起这个问题可以有多种原因,首先你可以将sort_area_size这个参数减小到不多于2M,这可以防止Oracle在创建索引时分配太多的sort 内存而耗尽资源。 但如果这不起作用,而且你是8.1.7, 则恭喜,你hit 了bug 1391737. 该bug 在你要建索引的字段,如果某条记录的长度超过2000字符时引起Oracle耗尽内存资源。别无它法,除了打 8.1.7.1B 的补丁。
- 相关阅读:
- ·服务器安全:CentOS 7中安装CSF防火墙
//server.zol.com.cn/548/5486088.html - ·IT审计:CentOS 6/7中 安装Open-AudIT
//server.zol.com.cn/557/5572319.html - ·多业务支持 IBM x3850 X6服务器促销中
//server.zol.com.cn/553/5539825.html - ·操作系统免费装 IBM x3850 X6服务器促销
//server.zol.com.cn/553/5534436.html - ·上门安装送好礼 IBM x3650 M5服务器促
//server.zol.com.cn/547/5479330.html
推荐:12款超棒的乌班图 Linux GTK主题
Z拆机:杰和GCR2524MP-RF服务器图赏
2022龙芯生态大会专题
2021浪潮专题
宝德 NVIDIA 协同赋能,为您的AI之旅保驾护
OCP CHINA DAY 2019