如何在机器上创建多个mysql实例
2011 年 8 月 19 日
最近提供一个仿真环境的数据库(配置和数据量同线上一样),在现有的数据库服务器上再安装一个实例,目的:
- 有效利用资源,大部分情况下CPU和内存还是有冗余的
- 未来一些服务使用独立的数据库实例,可以提前做一些准备
以前也多次提过,在生产环境中不建议使用yum方式安装MySQL,因为太傻瓜化会屏蔽很多细节;同时如果了解不够,安装第二个实例很容易和原有实例冲突,所以建议编译安装。
在mysql有basedir目录(比如/usr/local/mysql)和datadir目录(比如第一个实例是/data/mysql3306),先初始化第二个实例的datadir:
bin/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql3307 --no-defaults --user=mysql
接下去就是启动,注意一些参数可能会冲突,比如 datadir、port、socket、pid、log-bin、log-error,注意这些就可以了,你可以手动运行实例:
bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql3307 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql3307/mysql.log --pid-file=/data/mysql3307/mysql.pid --socket=/data/mysql3307/3307.sock --port=3307
但是建议将启动参数放入mysql.cnf文件中,比如:
bin/mysqld_safe --defaults-file=/data/mysql3307/3307.cnf &
可是最方便的方式是使用service运行mysql,那么拷贝:
cp ~/software/mysql-5.6.45/support-files/mysql.server.sh /etc/init.d/mysqld3307 chmod +x /etc/init.d/mysqld3307
不过运行会失败,因为在编译basedir的时候,默认的service会认为只有一个mysql实例运行,所以需要修改mysqld3307,话说回来,/etc/init.d/mysqld对于理解mysql启动和关闭非常有用,修改mysqld3307如下:
basedir=/usr/local/mysql extra_args="/data/mysql3307/3307.cnf" mysqld_pid_file_path="/data/mysql3307/3307.pid" $bindir/mysqld_safe --defaults-file=/data/mysql3307/3307.cnf --pid-file="/data/mysql3307/3307.pid" >/dev/null &
最后运行第二个实例:
service mysql3307 start
参考:https://dev.mysql.com/doc/refman/5.6/en/multiple-servers.html