楼主: oraclelang

MySQL中文參考手冊

[复制链接]
论坛徽章:
4
每日论坛发贴之星
日期:2005-04-26 01:01:12会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB元老
日期:2008-01-09 22:26:12
121#
 楼主| 发表于 2006-4-29 10:20 | 只看该作者
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”。
在咝心愕目蛻舫绦蚯埃?裭ibmysqlclient.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
每日论坛发贴之星
日期:2005-04-26 01:01:12会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB元老
日期:2008-01-09 22:26:12
122#
 楼主| 发表于 2006-4-29 10:20 | 只看该作者
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'), 然後再試一試。

在編譯時,你可能得到一些警告;顯示在下面的那些可以被忽略:

使用道具 举报

回复
论坛徽章:
4
每日论坛发贴之星
日期:2005-04-26 01:01:12会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB元老
日期:2008-01-09 22:26:12
123#
 楼主| 发表于 2006-4-29 10:20 | 只看该作者
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'

像這樣咝衏onfigure,你能避免使用“libg++.a”:

shell> CXX=gcc ./configure

使用道具 举报

回复
论坛徽章:
4
每日论坛发贴之星
日期:2005-04-26 01:01:12会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB元老
日期:2008-01-09 22:26:12
124#
 楼主| 发表于 2006-4-29 10:20 | 只看该作者
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並咝衏onfigure --with-mysqld-ldflags=-all-static選項。

對于glibc2.0.7的源代碼分發,容易哂脕K被MySQL測試的一個補丁可以在下面找到

使用道具 举报

回复
论坛徽章:
4
每日论坛发贴之星
日期:2005-04-26 01:01:12会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB元老
日期:2008-01-09 22:26:12
125#
 楼主| 发表于 2006-4-29 10:21 | 只看该作者
http://www.mysql.com/Download/Li ... -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之前,你不能咝衏onfigure --with-mysqld-ldflags=-all-static選項!

你可以用rpm -q glibc檢查你有glibc哪個版本。

使用道具 举报

回复
论坛徽章:
4
每日论坛发贴之星
日期:2005-04-26 01:01:12会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB元老
日期:2008-01-09 22:26:12
126#
 楼主| 发表于 2006-4-29 10:21 | 只看该作者
4.11.5.4 Linux-SPARC 注意事項
在一些實現中,readdir_r()被破壞了。其症狀是SHOW DATABASES總是返回一個空集合。這可以通過在編譯前從“config.h”中刪除HAVE_READDIR_R進行更正。

有些問題將需要給你的Linux安裝打補丁。補丁可在http://www.mysql.com/patches/Lin ... gers.edu(一個從來]有與官方的2.0.30版合並的版本)得到。你也必須安裝LinuxThreads 0.6或更新。

感謝jacques@solucorp.qc.ca提供這個信息。

4.11.5.5 Linux-Alpha注意事項

使用道具 举报

回复
论坛徽章:
4
每日论坛发贴之星
日期:2005-04-26 01:01:12会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB元老
日期:2008-01-09 22:26:12
127#
 楼主| 发表于 2006-4-29 10:21 | 只看该作者
在Linux-Alpha上的大問題仍然是在這個平台上的glibc的線程有一些問題。你應該從得到你能找到的最新glibc版本開始。

注意:在你咝腥魏问褂镁

使用道具 举报

回复
论坛徽章:
4
每日论坛发贴之星
日期:2005-04-26 01:01:12会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB元老
日期:2008-01-09 22:26:12
128#
 楼主| 发表于 2006-4-29 10:21 | 只看该作者
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外)。你應該象下面這樣咝衏onfigure:

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

當編譯mysqld時,你可能看見這樣一些警告:

使用道具 举报

回复
论坛徽章:
4
每日论坛发贴之星
日期:2005-04-26 01:01:12会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB元老
日期:2008-01-09 22:26:12
129#
 楼主| 发表于 2006-4-29 10:21 | 只看该作者
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信號了。另外,通過咝衧afe_mysqld啟動服務器,它為你使用nohup調用mysqld

使用道具 举报

回复
论坛徽章:
4
每日论坛发贴之星
日期:2005-04-26 01:01:12会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB元老
日期:2008-01-09 22:26:12
130#
 楼主| 发表于 2006-4-29 10:22 | 只看该作者
4.11.7 Alpha-DEC-OSF1注意事項
如果你有編譯問題並安裝了DECCC和gcc,嘗試這樣咝衏onfigure:

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

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表