前言
大学把数据库的课全翘了,之后可能是报应吧,后面数据库相关的东西怎么都学不会。最近有个MySQL多开的需求,正好借这个机会再复习一遍MySQL安装配置。
写这篇博客还有另一个原因,现在网上搜到的MySQL多开教程都不是针对5.7版本的,直接按那些教程做很多地方会报错。
MySQL多实例的原理
MySQL本来就可以多实例运行,只要修改启动脚本和配置文件,把端口,basedir
,datadir
文件夹分开,两个实例就可以互不影响运行。但是这种方式太过繁杂,所以MySQL官方提供了一个mysqld_multi的程序来辅助实现多实例运行,本篇教程就使用这种方式。
一,创建并初始化data文件夹
几个实例要分开运行,必然要把数据库文件放到不同文件夹中,所以第一步是要建立各个实例的数据文件夹,这里假设我们要运行三个实例,端口分别是3306
,3307
,3308
,为了方便维护,我们把数据文件夹也按照端口号来命名:
mkdir /mnt/data/mysql/3306
mkdir /mnt/data/mysql/3307
mkdir /mnt/data/mysql/3308
chown mysql:mysql /mnt/data/mysql/3306
chown mysql:mysql /mnt/data/mysql/3307
chown mysql:mysql /mnt/data/mysql/3308
建好文件夹后,我们还要初始化数据文件夹,旧的命令是:
mysql_install_db --basedir=/usr/local/mysql --datadir=/mnt/data/mysql/3308 --user=mysql
这个命令已经不能再用!!!
按照官方教程,新的命令应该是:
mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql/mysql --datadir=/opt/mysql/mysql/data
但是这个命令也会报错!!!
正确的做法是:
mysqld --defaults-file=/opt/mysql/mysql/etc/my.cnf --initialize-insecure --user=mysql
其中的原因我没有细究,可能是mysqld --initialize-insecure
还需要几个参数,.cnf
文件里有提供这几个参数。
新建几个.cnf
文件,用来初始化数据文件夹,.cnf
文件内容如下:
[client]
port = 3308