MySQL5.7开多实例指导

时间:2021-06-21 16:00:38

一、mysql多实例原理

  在一台服务器上,mysql服务开启多个不同的端口,运行多个服务进程。他们通过不同的 socket来监听不同的端口互不干扰地运行。

二、开发环境

  ubuntu16.04.5LTS/i5/8G/500G/64位/mysql5.7.23/php7/apache2

三、配置步骤

1、创建mysql实例数据存储目录

cd /var/lib/

mkdir 3308_mysql  

chown -R mysql:mysql 3308_mysql    //修改权限

2、创建配置文件

(我的环境中,mysql配置主要是/etc/mysql/my.cnf,其中又相应的加载conf.d和mysql.conf.d文件夹中的文件。我们直接copy,然后修改部分重要内容即可)

cd /etc/mysql/

cp -r conf.d conf3308.d

cp my.cnf my3308.cnf

cp -r mysql.conf.d mysql3308.conf.d

vi my3308.cnf

MySQL5.7开多实例指导

修改内容如下

!includedir /etc/mysql/conf3308.d/
!includedir /etc/mysql/mysql3308.conf.d/

cd mysql3308.conf.d

vi mysqld.cnf

修改内容如下:

[mysqld_safe]
socket        = /var/lib/3308_mysql/mysqldsafe.sock
#nice        = 0

[mysqld]
#
# * Basic Settings
#
user        = mysql
pid-file    = /var/lib/3308_mysql/mysqld.pid
socket        = /var/lib/3308_mysql/mysqld.sock
port        = 3308
basedir        = /usr
datadir        = /var/lib/3308_mysql

log_error = /var/lib/3308_mysql/error.log

3、添加读写权限apparmor

vi /etc/apparmor.d/usr.sbin.mysqld

在下面添加:

/var/lib/3308_mysql/ r,
/var/lib/3308_mysql/** rwk,

让apparmor重新加载配置文件

service apparmor reload

4、启动实例

这里得提醒大家的是,mysql_install_db初始化的方法已经不能在5.7版本使用了,亲测了N种方法都失败了,请使用以下命令。

mysqld --initialize-insecure --datadir=/var/lib/3308_mysql --user=mysql  //初始化,其中--initialize-insecure 为创建时不带密码

mysqld_safe --defaults-file=/etc/mysql/my3308.cnf  //启动

执行 ctrl + z //让实例后台运行

此时我们可以看数据库运行情况

netstat -anp | grep mysql

会看到

MySQL5.7开多实例指导

成功!监听3308端口

5、设置实例密码

mysql -uroot -p -S /var/lib/3308_mysql/mysqldsafe.sock -P 3308

Enter password:   //直接enter,因为我们初始化时--initialize-insecure

mysql> use mysql

mysql> UPDATE user SET authentication_string= password ('123456') WHERE User='root';

mysql> exit

//重新启动

mysqladmin -uroot -S /var/lib/3308_mysql/mysqldsafe.sock shutdown  

mysqld_safe --defaults-file=/etc/mysql/my3308.cnf

ctrl + z

mysql -uroot -p -S /var/lib/3308_mysql/mysqldsafe.sock -P 3308

Enter password:   //此时需要输入刚才设置的密码

MySQL5.7开多实例指导

四、建库测试

MySQL5.7开多实例指导

我们在3308中创建了库db3308,我们去3306库中并没发现此库

MySQL5.7开多实例指导

反过来我们在3306的数据库操作对3308也没有影响。

我们发现,各个库独立运行,互不干扰。

五、开更多实例

重复配置步骤即可