5.12.2. 在Unix中运行多个服务器

Unix中运行多个服务器最容易的方法是使用不同的TCP/IP端口sUnix套接字文件编译,因此每个实例在不同的网络接口侦听。另外,每个安装应在不同的基础目录中编译,那将自动为你的每个服务器产生使用不同的编译进来的数据目录、日志文件和PID文件位置。

假设一个现有的4.1.8版本服务器配置为默认TCP/IP端口号(3306)Unix套接字文件(/tmp/mysql.sock)。要想配置一个新的5.1.2-alpha版的服务器来使用不同的操作参数,使用一个configure命令,大概象这样使用:

shell> ./configure --with-tcp-port=port_number \
             --with-unix-socket-path=file_name \
             --prefix=/usr/local/mysql-5.1.2-alpha

这里,port_numberfile_name必须不同于默认TCP/IP端口号和Unix套接字文件路径名,并且--prefix值应指定一个不同于现有MySQL安装目录的安装目录。

如果你有一个MySQL服务器正侦听一个给定的端口号,你可以使用下面的命令来找出针对一些重要配置变量它使用了那些操作参数,包括基础目录和Unix套接字文件名:

shell> mysqladmin --host=host_name --port=port_number variables

通过该命令显示的信息,当配置其它服务器时,你可以告诉服务器该选项没有使用的值。

请注意,如果你指定localhost作为一个主机名,mysqladmin默认使用Unix套接字文件连接,而不是TCP/IP。从 MySQL 4.1开始,通过--protocol= TCP | SOCKET | PIPE | MEMORY}选项,你可以显示地指定连接协议。

如果只是用一个不同的Unix套接字文件和TCP/IP端口号启动,不必编译新的MySQL服务器。还可以在运行时指定这些值。这样做的一个方法是使用命令行选项:

shell> mysqld_safe --socket=file_name --port=port_number

要启动第二个服务器,提供不同的--socket--port选项值,并且传递一个--datadir=path选项给mysqld_safe,以便服务器使用一个不同的数据目录。

达到相似效果的另一个方法是使用环境变量来设置 Unix套接字文件名和TCP/IP端口号:

shell> MYSQL_UNIX_PORT=/tmp/mysqld-new.sock
shell> MYSQL_TCP_PORT=3307
shell> export MYSQL_UNIX_PORT MYSQL_TCP_PORT
shell> mysql_install_db --user=mysql
shell> mysqld_safe --datadir=/path/to/datadir &

这是一个快速启动第二个服务器以用于测试的方法。该方法的最大好处是环境变量设定值适用于你从相同的shell调用的任何客户端程序。因而,那些客户端连接自动指向第二个服务器!

附录F:环境变量包括你可以使用的影响mysqld的其它环境变量列表

对于自动服务器启动,对于每个服务器,机器引导时执行的启动脚本应执行下面的命令,每个命令用一个相应的选项文件路径:

mysqld_safe --defaults-file=path

每个选项文件应包含一个给定服务器特定的选项值。

Unix中,mysqld_multi脚本是启动多个服务器的另一个方法。参见5.1.5节,“mysqld_multi:管理多个MySQL服务器的程序”

关注编程学问公众号