安装环境:操作系统版本为CentOS 6.5,MySQL为官网下载的5.7.25版本的rpm捆绑压缩安装包

一、安装MySQL前的准备工作

1、查看、卸载系统默认安装的MySQL相关的所有包

rpm -qa | grep -E '*mysql*'yum list installed | grep -E '*mysql*'

rpm或者yum查看都可以,发现有一个5.1的libs包,为了避免接下来的安装有版本冲突,先全部卸载掉,建议用yum的方式卸载,避免其它包有依赖关系导致卸载出错或者无法卸载。

操作完成之后再次确认下,是否已经卸载成功,确认已经没有其它版本的MySQL相关的包了。

二、安装MySQL

1、解压下载的MySQL5.7的rpm捆绑包

tar -xf mysql-5.7.25-1.el6.x86_64.rpm-bundle.tar

2、安装rpm包

rpm包比较多,虽然其实只需要安装四个就可以了,但是已经下载了,就全部安装吧。建议按照以下顺序依次安装,避免因为前置安装包的原因要重复多次安装

a、mysql-community-common-5.7.25-1.el6.x86_64.rpm

b、mysql-community-libs-5.7.25-1.el6.x86_64.rpm

c、mysql-community-libs-compat-5.7.25-1.el6.x86_64.rpm

d、mysql-community-devel-5.7.25-1.el6.x86_64.rpm

e、mysql-community-embedded-5.7.25-1.el6.x86_64.rpm

f、mysql-community-embedded-devel-5.7.25-1.el6.x86_64.rpm

g、mysql-community-client-5.7.25-1.el6.x86_64.rpm

h、mysql-community-server-5.7.25-1.el6.x86_64.rpm

i、mysql-community-test-5.7.25-1.el6.x86_64.rpm

安装过程中可能会出现两个报错

解决方法:需要安装numactl,wget下载rpm包后,rpm安装下载的numactl包,然后再次安装mysql-community-embedded-5.7.25-1.el6.x86_64.rpm

numactl的下载地址如下:

解决方法:需要安装perl-JSON和perl-Time-HiRes,UHost的yum源里默认有这两个包,只需要yum安装就可以了

yum install -y perl-JSON perl-Time-HiRes

注意:安装完成后,不要直接启动MySQL服务(service mysqld start),如果启动了,会初始化生成默认的文件夹,这样在安装多实例的时候还得删除重建。

三、配置MySQL多实例的目录及配置文件

安装完成后,默认会在/var/lib下生成一个mysql文件夹,如果是单实例,上面步骤二操作完成后,启动mysqld服务,会在这个mysql文件夹下初始化生成一堆mysql相关文件,比如ibdata1、ib_logfile0、 ib_logfile1、mysql.sock等,但这里我们是需要安装多实例,所以不能直接初始化生成默认文件。

查看一下现在MySQL的默认配置文件是怎样的

cat /etc/my.cnf

发现默认配置了datadir、socket、log-error、pid-file的路径,那下面也就一一对多实例的也配置一下

1、配置MySQL多实例的datadir

为了方便管理,我们在/var/lib/mysql下继续创建多实例各自独立的目录,这里先创建4个,如果有多个,依次继续创建就行了即/var/lib/mysql/mysql1、/var/lib/mysql/mysql2、/var/lib/mysql/mysql3、/var/lib/mysql/mysql4

mkdir mysql1 mysql2 mysql3 mysql4chown -R mysql:mysql mysql1 mysql2 mysql3 mysql4 #这里是用root帐号操作的,所以还需要把目录所属组修改成mysql,否则到时候会报错

2、配置MySQL多实例的socket目录

当MySQL服务还未启动的时候,socket文件是不会生成的,所以到时候只需要在my.cnf文件中修改下路径就好了,这里目前不需要进行任何操作

3、配置MySQL多实例的log-error目录

touch mysqld_multi.log mysqld1.log mysqld2.log mysqld3.log mysqld4.logchown mysql:mysql mysqld* #同样需要注意修改log的属组

因为多实例最终会用MySQL官方的mysqld_multi管理工具来进行管理,所以在创建log的时候多创建了一个mysqld_multi.log,如果到时候管理工具使用过程中有报错,可以直接查看此log信息

4、配置MySQL多实例的pid-file目录

同socket一样,在服务未运行的时候,pid-file文件也是不会生成的,所以到时候也直接在my.cnf文件中修改配置路径就行了,目前不用做操作配置

5、修改MySQL多实例的my.cnf配置文件

[mysqld_multi]mysqld=/usr/sbin/mysqldmysqladmin=/usr/bin/mysqladminlog=/var/log/mysqld_multi.log[mysqld1]port=3306user=mysqlbind_address = 0.0.0.0datadir=/var/lib/mysql/mysql1socket=/var/lib/mysql/mysql1/mysql.sock1log-error=/var/log/mysqld1.logpid-file=/var/lib/mysql/mysql1/mysqld1.pid[mysqld2]port=3307user=mysqlbind_address = 0.0.0.0datadir=/var/lib/mysql/mysql2socket=/var/lib/mysql/mysql2/mysql.sock2log-error=/var/log/mysqld2.logpid-file=/var/lib/mysql/mysql2/mysqld2.pid[mysqld3]port=3308user=mysqlbind_address = 0.0.0.0datadir=/var/lib/mysql/mysql3socket=/var/lib/mysql/mysql3/mysql.sock3log-error=/var/log/mysqld3.logpid-file=/var/lib/mysql/mysql3/mysqld3.pid[mysqld4]port=3309user=mysqlbind_address = 0.0.0.0datadir=/var/lib/mysql/mysql4socket=/var/lib/mysql/mysql4/mysql.sock4log-error=/var/log/mysqld4.logpid-file=/var/lib/mysql/mysql4/mysqld4.pid#以上只是简单配置,若针对每个实例还需要单独添加、修改其它参数,在各自的myqld下修改就可以了注意:mysqld和mysqladmin的路径可以用whereis xxx来查找

四、初始化多实例

mysqld --initialize --user=mysql --basedir=/var/lib/mysql/mysql1 --datadir=/var/lib/mysql/mysql1 --initialize 初始化--user=mysql 以mysql账户初始化,如果不加此选项,则/var/lib/mysql/mysql1下的文件属组会为默认的root,到时候还需要再修改下

修改完毕后,用mysqld_multi工具启动各实例,并且查看各实例状态

mysqld_multi start #启动所有实例mysqld_multi start 1,3 #启动实例1和实例3mysqld_multi stop #停止所有实例mysqld_multi stop 2,3 #停止实例2和实例3mysqld_multi report #查看所有实例的状态mysqld_multi report 1,2 #查看实例1和实例2的状态

期间遇到的问题:

1、mysqld_multi start后,report发现各实例并未运行

查看/var/log/mysqld_multi.log,发现有以下报错:

[ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!这个是因为mysqld因为安全原因,默认是使用mysql帐号来运行服务的,但现在用了root帐号来运行,所以报错了。

解决方法:在配置文件my.cnf中指定各实例运行的帐号为user=mysql,即每个[mysqld]下添加

2、mysqld_multi stop后,report发现各实例还是在运行中,并未停止

查看/var/log/mysqld_multi.log,发现有以下报错:

Gmysqladmin: connect to server at 'localhost' failederror: 'Access denied for user 'root'@'localhost' (using password: NO)'Gmysqladmin: connect to server at 'localhost' failederror: 'Access denied for user 'root'@'localhost' (using password: NO)'Gmysqladmin: connect to server at 'localhost' failederror: 'Access denied for user 'root'@'localhost' (using password: NO)'Gmysqladmin: connect to server at 'localhost' failederror: 'Access denied for user 'root'@'localhost' (using password: NO)'

以下解决方法任选一种即可:a、在初始化的时候,把初始化选项--initialize换成--initialize-insecure,这样初始化后,各实例都是没有密码的

b、依然使用--initialize这个初始化选项,会生成一个初始化密码,这样需要每个实例都用默认的初始密码登录一下,并且登录后要把4个实例的密码都设置为一样的,然后还要在配置文件中把帐号密码也添加进去

3、若用的方法b,但是还是关闭不了,检查配置文件/etc/my.cnf中添加的帐号和密码的写法是否正确,配置文件中密码为pass而非password,如果用了password会识别不了的。