Posts Tagged ‘技术’

单机启动多个MySQL Server

Wednesday, September 23rd, 2009

有时候我们需要在一台服务器启动多个 MySql Server。有一个方法是使用官方的多server管理工具 mysqld_multi ,适合多server运行时的管理,有专用的配置项方便日常管理维护。或者如果不想用 mysqld_multi,我们看看幕后都做了什么,简单的自己动手配置一下。

这篇来讲讲怎么通过自己配置,启动多个mysqld。

无论是发行版包管理工具安装的,还是自己编译安装的,都会默认读取 my.cnf 文件,位置一般是 /etc/my.cnf 、$MYSQL_HOME/my.cnf 等。发行版包管理工具一般只会安装在固定的位置,不方便同时装两个 mysql server。自己编译的话,也不方便临时再 install 到其他位置和读取另外的 my.cnf 文件。

参考 MySQL 官方手册的内容,使用现有的mysql系列可执行程序,在启动server和client时,指定 --defaults-file 参数,即刻达到效果。

1、编辑一个新的 my.cnf 文件用于新的server

sudo cp /etc/my.cnf /etc/my.2.cnf
sudo vim /etc/my.2.cnf

修改配置,防止和原有配置冲突。主要需要修改的有:

  • 端口(port)、socket 文件路径 (socket)、数据文件路径 (datadir);
  • 如果用到 InnoDB(一般都会用到),则要修改 InnoDB 数据文件路径 (innodb_data_home_dir)、InnoDB 日志文件路径 (innodb_log_group_home_dir);
  • 如果用到replication时,还要修改server的唯一id (server-id)、下载到master的binlog的存放路径 (relay-log)等。其他配置修改,则根据具体情况自行调整。

这里注意 datadir 和 InnoDB 的几个dir,根据情况新建目录,并给 mysql 用户读写权限,否则无法启动正常。另外特别注意,需要确保这些路径不和 product 环境下对应配置的路径有冲突,除非你的确希望这样做,这可能会损坏对应路径下的数据文件。

2、初始化DB

sudo /usr/bin/mysql_install_db --defaults-file=/etc/my.2.cnf
sudo cd $datadir
sudo chown mysql:mysql . -R

这里 $datadir 是新配置的 my.cnf 的 datadir 项所配置的路径。注意需要对文件权限变更为 mysql,否则启动server时会出现文件无权限等错误。

3、启动 mysqld

/usr/bin/mysqld_safe --defaults-file=/etc/my.2.cnf &

查看 $datadir/$host.err 观察是否启动成功。

4、启动 client

/usr/bin/mysql --defaults-file=/etc/my.2.cnf -hlocalhost -uroot

这些命令为了方便使用,可以写到shell脚本里。上述步骤只叙述了标题相关内容,在权限、性能等无关方面没有特别说明。另外注意 --defaults-filedefaults 有个 s,之前我自己写漏了,整个参数被忽律掉,总报错。:-)