所谓多实例安装实际上是指在一台机器上开启多个不一样的mysql服务端口(3306,3307),运行多个mysql服务进程,这些服务进程经过不一样的socket监听不一样的服务端口来提供各自的服务;多实例安装主要目的是为了有效利用服务器资源,可是也存在资源互相抢占问题。mysql
$ yum install -y libaio #安装mysql依赖软件包 $ groupadd mysql #添加mysql权限组 $ useradd -r -g mysql -s /bin/false mysql #添加mysql权限组的非登陆用户mysql $ cd /usr/local #进入安装目录 $ tar zxvf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz #解压MySQL安装包 $ mv mysql-5.7.27-linux-glibc2.12-x86_64 mysql #重命名为mysql,此处也能够创建软链接,MySQL配置中使用的是mysql,因此此处目录名最好为mysql,不要修改为其它的。 $ cd mysql $ mkdir -p data/3306/{data,tmp,log} #建立3306实例的相关目录 $ touch data/3306/log/mysql.log #建立mysql日志文件,此文件mysql不会自动生成,只好先手动生成了 $ cp /etc/my.cnf data/3306/ #建立3306实例的配置文件 $ vi data/3306/my.cnf #修改my.cnf配置文件,参数以下图(参数就再也不介绍了,和单实例的配置几乎同样,就mysqld中多了port参数)
$ cp -R data/3306 data/3307 #将3306实例相关配置复制到3307实例 $ cat data/3307/my.cnf | tr [3306] [3307] >> my1.cnf ; mv -f my1.cnf my.cnf #修改3307配置文件将其中的3306全局替换成3307 $ chown mysql:mysql -R data/ #修改权限 $ bin/mysqld --defaults-file=/usr/local/mysql/data/3306/my.cnf --initialize-insecure --user=mysql #初始化3306实例数据库,此处会加载my.cnf中的datadir参数,并在其配置目录建立初始数据库,此处经过--initialize-insecure参数指定不生成默认密码 $ bin/mysqld --defaults-file=/usr/local/mysql/data/3307/my.cnf --initialize-insecure --user=mysql #初始化3307实例数据库,此处会加载my.cnf中的datadir参数,并在其配置目录建立初始数据库,此处经过--initialize-insecure参数指定不生成默认密码 $ bin/mysqld_safe --defaults-file=/usr/local/mysql/data/3306/my.cnf --user=mysql & #启动3306数据库实例 $ bin/mysqld_safe --defaults-file=/usr/local/mysql/data/3307/my.cnf --user=mysql & #启动3307数据库实例 $ ps -ef | grep mysql | grep -v grep #此处有3306和3307实例说明启动了2个mysql服务 $ bin/mysql -S /usr/local/mysql/data/3306/tmp/mysql.sock #启动mysql客户端链接3306数据库实例,此处能够启动并进入mysql命令行,说明mysql服务没有问题 $ bin/mysql -S /usr/local/mysql/data/3307/tmp/mysql.sock #启动mysql客户端链接3307数据库实例,此处能够启动并进入mysql命令行,说明mysql服务没有问题
$ vi /etc/profile #修改全局配置文件将mysql相关命令设置进环境变量中
此处就不写多实例MySQL启动的脚本了,有兴趣的能够参考/usr/local/mysql/support-files/mysqld_multi.server文件或者自行百度。linux
此错误是我使用bin/mysql -S /usr/local/mysql/data/3306/tmp/mysql.sock命令链接数据库时报的错误, 后来看了下我使用这个命令时登陆用户是普通用户非root且该用户不在mysql用户列表中,因此 须要把命令改为bin/mysql -uroot -p -S /usr/local/mysql/data/3306/tmp/mysql.sock来指定mysql链接用户。sql