Mysql多实例

概述:在一台物理主机上运行多个数据库服务

作用:节约运维成本,提高硬件利用率

配置步骤说明
我们以mysql-5.7.20 为例
1– 安装支持多实例服务的软件包

1.1解压软件

[root@host50~]# tar -zxvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

1.2– 修改目录名

[root@host50 mysql-20]# mv mysql-5.7.20-linux-glibc2.12-x86_64/ /usr/local/mysql

1.3– 修改 PATH 变量

[root@host50 local]# vim /etc/profile

[root@host56 ~]# echo "export PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile

[root@host50 local]# source /etc/profile

2– 修改主配置文件

[root@host50 local]# vim /etc/my.cnf

[mysqld_multi] // 启用多实例

mysqld = /usr/local/mysql/bin/mysqld_safe // 指定进程文件的路径

mysqladmin = /usr/local/mysql/bin/mysqladmin // 指定管理命令路径

user = root // 指定调用进程的用户

[mysqld1] // 实例进程名称 ,X 表示实例名称 , 如 [mysql1]

port=3307 // 端口号

datadir=/dataone // 数据库目录 ,要手动创建

socket=/dataone/mysqld.sock // 指定 sock 文件的路径和名称

log-error=/dataone/mysqld.log // 错误日志位置

pid-file=/dataone/mysqld.pid // 进程 pid 号文件位置

[mysqld2] // 实例进程名称 ,X 表示实例名称 , 如 [mysql1]

port=3308 // 端口号

datadir=/datatwo // 数据库目录 ,要手动创建

socket=/datatwo/mysqld.sock // 指定 sock 文件的路径和名称

log-error=/datatwo/mysqld.log // 错误日志位置

pid-file=/datatwo/mysqld.pid // 错误日志位置

– 根据配置文件做相应设置

root@host56 ~]# mkdir -p /dataone

[root@host56 ~]# mkdir -p /datatwo

[root@host56 ~]# useradd mysql

c[root@host56 ~]# chown mysql:mysql /data*

*为了安全可以更改文件权限

chown mysql:mysql /data*

– 初始化授权库

[root@localhost bin]# ./mysqld --user=mysql --basedir= 软件安装目录 --datadir= 数据库目录 – initialize // 初始化授权库

]#mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/dataone --initialize

]#mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/datatwo --initialize

– 启动服务

[root@stu ~]# mysqld_multi start实例编号 //启动实例进程

– 客户端访问

[root@host50~]# mysqld_multi start 1

[root@host50 ~]# mysqld_multi start 2

root@host56 ~]# netstat -utnlp | grep :3308

tcp6 0 0 :::3308 :::* LISTEN 1156/mysqld

[root@host56 ~]# netstat -utnlp | grep :3307

tcp6 0 0 :::3307 :::* LISTEN 927/mysqld

[root@host56 ~]#

[root@localhost bin]# ./mysqld_multi --user=root --password=

密码 stop 实例编号 // 停止实例进程

6 访问多实例服务

连接实例服务1

[root@host50 ~]#mysql -uroot -p'bXk.5j!pjto#' -S /dataone/mysqld.sock

mysql> ALTER USER user() identified by "123456";

mysql> quit;

]# mysql -uroot -p123456 -S /dataone/mysqld.sock

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| sys |

+--------------------+

4 rows in set (0.00 sec)

mysql>

连接实例服务2

[root@host50 ~]#mysql -uroot -p'bKsaf+xzk0V3' -S /datatwo/mysqld.sock

mysql> alter user user() identified by "123456";

Query OK, 0 rows affected (0.00 sec)

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| sys |

+--------------------+

4 rows in set (0.00 sec)

mysql> quit

Bye

[root@host50 ~]# mysql -uroot -p123456 -S /datatwo/mysqld.sock

停止启动的实例服务

]# mysqld_multi --user=root --password=密码 stop 实例编号

[root@host50~]# netstat -utnlp | grep :3307

tcp6 0 0 :::3307 :::* LISTEN 927/mysqld

[root@host50 ~]#

[root@host50 ~]#

[root@host50~]# netstat -utnlp | grep :3308

tcp6 0 0 :::3308 :::* LISTEN 1156/mysqld

[root@host50 ~]# mysqld_multi --user=root --password=123456 stop 1

[root@host50 ~]# netstat -utnlp | grep :3307

[root@host50 ~]# netstat -utnlp | grep :3308

tcp6 0 0 :::3308 :::* LISTEN 1156/mysqld

[root@host50 ~]#

[root@host50 ~]#

[root@host50~]#

[root@host50 ~]# mysqld_multi --user=root --password=123456 stop 2

[root@host50~]# netstat -utnlp | grep :3308

[root@host50~]# mysql -uroot -p123456 -S /datatwo/mysqld.sock

mysql: [Warning] Using a password on the command line interface can be insecure.

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/datatwo/mysqld.sock' (2)