ITEEDU

2.12.4.1. FreeBSD注意事项

对于运行MySQL,推荐使用FreeBSD 4.x或更新版本,因为其线程包更加完整。要想遇到一个安全、稳定的系统,你应当只使用标记-RELEASE的FreeBSD内核。

最容易因此是比较受喜欢的安装方法是使用mysql-server和mysql-client移植,可从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关掉的问题。

遗憾的是,FreeBSD调用的某些函数还不能完全保证线程安全。特别令人注意的是,包括gethostbyname()函数, MySQL使用该函数将主机名转换为IP地址。在某些环境中,mysqld进程会突然造成100%的CPU负荷,不再响应。如果你遇到该问题,尝试使用--skip-name-resolve选项启动MySQL。

另外,还可以将FreeBSD 4.x中的MySQL同LinuxThreads库连接,这样可以避免一些原生FreeBSD线程执行时的问题。为了更好地将LinuxThreads同原生线程进行对比,参见Jeremy Zawodny的文章FreeBSD or Linux for your MySQL Server? 地址:http://jeremy.zawodny.com/blog/archives/000697.html

在FreeBSD使用LinuxThreads的已知问题有:

·         连接时间(wait_timeout、interactive_timeout和net_read_timeout)值不理想。现象是永久连接挂起较长时间,不能关闭,只有线程执行新命令时 'kill'线程方有效。

这可能是线程库中的信号处理问题,信号不能中断挂起的读命令。期望在FreeBSD 5.0中修复。

MySQL构建进程需要GNU make(gmake)工作。如果没有GNU make,必须在编译MySQL前先安装它。

建议的在FreeBSD中用gcc(2.95.2和以上版本)编译和安装MySQL的方法是:

CC=gcc CFLAGS="-O2 -fno-strength-reduce" \
    CXX=gcc CXXFLAGS="-O2 -fno-rtti -fno-exceptions \
    -felide-constructors -fno-strength-reduce" \
    ./configure --prefix=/usr/local/mysql --enable-assembler
gmake
gmake install
cd /usr/local/mysql
bin/mysql_install_db --user=mysql
bin/mysqld_safe &
 

如果configure使用MIT-pthreads,应当阅读MIT-pthreads注意事项。请参见2.8.5节,“MIT-pthreads注意事项”

如果你从make install遇到一个它不能找到“/usr/include/pthreads”的错误,configure没有检测出你需要MIT-pthreads。要修复该问题,移走config.cache,然后用--with-mit-threads选项重新运行configure。

确定让你的名字解析程序安装正确,否则当连接mysqld时,你可能会遇到解析延时或失败。保证在“/etc/hosts”文件中的localhost入口是正确的。“/etc/hosts”文件应该以下面一行开始:

127.0.0.1       localhost localhost.your.domain

已知FreeBSD的文件句柄限制默认值很低。请参见A.2.17节,“文件未找到”。使用--open-files-limit选项执行mysqld_safe启动服务器,或在/etc/login.conf为mysqld用户提高限制并用cap_mkdb /etc/login.conf重建它。如果你不使用默认名(即使用chpass mysqld-user-name),还要保证为该用户设置在密码文件中的相应级别。请参见5.1.3节,“mysqld_safe:MySQL服务器启动脚本”

FreeBSD将进程空间限制到512MB,即使系统有很多的可用RAM也如此。因此你可能会遇到如下所示错误:

Out of memory (Needed 16391 bytes)

在当前版本的FreeBSD(至少4.x和更高版本)中,你可以在/boot/loader.conf文件中增加下面的条目并重启机器增加该限制(不能在运行时间用sysctl命令更改这些设定值):

kern.maxdsiz="1073741824" # 1GB
kern.dfldsiz="1073741824" # 1GB
kern.maxssiz="134217728" # 128MB

在旧版本的FreeBSD中,必须重新编译内核,以便更改进程的最大数据段空间。在这种情况下,应当查看LINT配置文件中的MAXDSIZ选项查看更详细的信息。

如果MySQL的当前日期有问题,设置TZ变量将会有帮助。请参见附录F:环境变量