多实例的概念
什么是多实例?
在一台物理主机上运行多个数据库服务 (并不是所有的版本的数据库的可以配置多实例)
• 为什么要使用多实例?
节约运维成本,提高硬件利用率
配置步骤
• 配置步骤说明
– 安装支持多实例服务的软件包
具体配置(解压软件,修改目录名,修改 PATH 变量)
– 修改主配置文件
– 根据配置文件做相应设置
– 初始化授权库
– 启动服务
– 客户端访问
1.安装提供多实例服务的, mysql数据库服务软件
[root@host56 ~]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql 为了方便之后使用命令
[root@host56 ~]# ls /usr/local/mysql/
bin COPYING docs include lib man README share support-files
[root@host56 ~]# ls /usr/local/mysql/bin/ ---主要的命令的介绍
mysqld_multi ----mysql多实例的启用
mysqldump --- 备份数据库的
mysql ---连接数据库服务
mysqladmin --改密码的
mysqlbinlog --看日志的
[root@host56 ~]# echo "export PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile
--- --为了使用方便,把源码包的多实例文件路径添加到系统变量中
[root@host56 ~]# source /etc/profile --刷新系统环境变量
[root@host56 ~]# echo $PATH ---检查是否安装成功
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
2 编辑配置文件
如果服务器上有其他mysql版本的数据库,应该把其他版本的数据库服务停止并设置disable并删除
相应的/etc/my.cnf,然后在自己创建etc/my.cnf。不能在原有的版本的数据库配置文件中进行更改。
否则将会出现错误。
[root@host56 ~]# rm -rf /etc/my.cnf
[root@host56 ~]#vim /etc/my.cnf
[mysqld_multi] ---启用多实例
mysqld = /usr/local/mysql/bin/mysqld_safe ---指定进程文件的路径
mysqladmin = /usr/local/mysql/bin/mysqladmin ----指定管理命令路径
user = root --指定调用进程的所有者用户
[mysqld1] ---实例进程名称
port=3307 ----该实例端口号
datadir=/zhu1 ----指定数据库存放的目录,需要手动创建
socket=/zhu1/mysqld.sock ---指定sock文件的路径和名称
log-error=/zhu1/mysqld.log ----指定进程pid号文件位置
pid-file=/zhu1/mysqld.pid ---指定错误日志位置
[mysqld2]
port=3308
datadir=/zhu2
socket=/zhu2/mysqld.sock
log-error=/zhu2/mysqld.log
pid-file=/zhu2/mysqld.pid
3 根据配置文件的设置,做相应的配置
3.1创建数据库目录
3.2创建进程运行的所有者和组 mysql
[root@host56 ~]# mkdir -p /zhu1
[root@host56 ~]# mkdir -p /zhu2
[root@host56 ~]# useradd mysql
c[root@host56 ~]# chown mysql:mysql /zhu*
3.3 初始化授权库
在初始化的过程中最后一行会出现该实例的初始化密码。该密码用于开启实例。
[root@host56 ~]#mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/zhu1 --initialize
2018-05-05T08:47:48.992696Z 1 [Note] A temporary password is generated for root@localhost:
bXk.5j!pjto#
[root@host56 ~]# ls /zhu1/ ----当没有开启实例的时候,实例的进程文件下是没有sock文件的。
auto.cnf ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema sys
[root@host56 ~]#mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/zhu2 --initialize
2018-05-05T08:50:09.429934Z 1 [Note] A temporary password is generated for root@localhost:
bKsaf+xzk0V3
[root@host56 ~]# ls /zhu2/
auto.cnf ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema sys
4 启动多实例服务
[root@host56 ~]# mysqld_multi start 1 -----开启多实例
[root@host56 ~]# 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 ~]#
5.访问多实例服务
连接实例服务1,这里的密码是在初始化的时候得到的。
[root@host56 ~]#mysql -uroot -p'bXk.5j!pjto#' -S /zhu1/mysqld.sock
mysql> ALTER USER user() identified by "123456";
mysql> quit;
]# mysql -uroot -p123456 -S /zhu1/mysqld.sock
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
连接实例服务2
[root@host56 ~]#mysql -uroot -p'bKsaf+xzk0V3' -S /zhu2/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@host56 ~]# mysql -uroot -p123456 -S /zhu2/mysqld.sock
6.停止启动的实例服务
[root@host56 ~]# netstat -utnlp | grep :3307
tcp6 0 0 :::3307 :::* LISTEN 927/mysqld
[root@host56 ~]# netstat -utnlp | grep :3308
tcp6 0 0 :::3308 :::* LISTEN 1156/mysqld
[root@host56 ~]# mysqld_multi --user=root --password=123456 stop 1
[root@host56 ~]# netstat -utnlp | grep :3307
[root@host56 ~]# netstat -utnlp | grep :3308
tcp6 0 0 :::3308 :::* LISTEN 1156/mysqld
[root@host56 ~]# mysqld_multi --user=root --password=123456 stop 2
[root@host56 ~]# netstat -utnlp | grep :3308
[root@host56 ~]# mysql -uroot -p123456 -S /zhu2/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)