什么是多实例
– 在一台物理主机上运行多个数据库服务
• 为什么要使用多实例
– 节约运维成本
– 提高硬件利用率
• 配置步骤说明
– 安装支持多实例服务的软件包
– 修改主配置文件
– 根据配置文件做相应设置
– 初始化授权库
– 启动服务
– 客户端访问
[root@host50 ~]# systemctl stop mysqld.service
[root@host50 ~]# systemctl disable mysqld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/mysqld.service
[root@host50 ~]# ss -ntulp | grep mysql
1.把软件包下载
mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
1.2解包
[root@host50 ~]# tar -zxf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
[root@host50 ~]# ls
mysql-5.7.17.tar
mysql-5.7.20-linux-glibc2.12-x86_64
mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
[root@host50 ~]# ls mysql-5.7.20-linux-glibc2.12-x86_64
bin COPYING docs include lib man README share support-files
[root@host50 ~]# ls /usr/local/
bin etc games include lib lib64 libexec sbin share src
[root@host50 ~]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql
[root@host50 ~]# vim /etc/profile
export PATH=/usr/local/mysql/bin:$PATH
:wq
[root@host50 ~]# source /etc/profile——直接运行命令的意思(刷新原)——刷新配置文件
[root@host50 ~]# echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
现在输入命令就不用打绝对路径
创建主配置文件:
[root@host50 ~]# mv /etc/my.cnf /etc/my.cnf.bak——把原有的给改一个名
配置文件参数说明
• 主配置文件 /etc/my.cnf
– 每个实例要有独立的数据库目录和监听端口号
– 每个实例要有独立的实例名称和独立的 sock 文件
[mysqld_multi] // 启用多实例
mysqld = /usr/local/mysql/bin/mysqld_safe // 指定进程文件的路径
mysqladmin = /usr/local/mysql/bin/mysqladmin // 指定管理命令路径
user = root // 指定调用进程的用户
[mysqlX] // 实例进程名称 ,X 表示实例名称 , 如 [mysql2]
port= 3307// 端口号
datadir = /data3307// 数据库目录 ,要手动创建
socket=/data3307/mysql.sock // 指定 sock 文件的路径和名称
pid-file = /data3307/mysqld.pid // 进程 pid 号文件位置
log-error = /data3307/mysqld.err // 错误日志位置
sock 文件:是服务起来才会有这个文件
当关停服务是就会关闭sock文件
服务自己连接自己的时候,是通过sock文件连接
启动服务:
启动服务时会对数据进行初始化
初始化授权库:
– 会提示 root 用户登录的初始化密码
知
• 启动实例进程
• 停止实例进程
[root@localhost bin]# /mysqld --user=mysql --basedir= 软件安装目录
--datadir= 数据库目录 –initialize // 初始化授权库
[root@stu ~]# mysqld_multi start实例编号 // 启动实例进程
[root@localhost bin]# ./mysqld_multi --user=root --password=密码 stop 实例编号 // 停止实例进程
--datadir= 数据库目录 –initialize (初始化的意思)
实验步骤:
[root@host50 ~]# 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 = /data3307
socket = /data3307/mysql.sock
pid-file = /data3307/mysqld.pid
log-error = /data3307/mysqld.err
[mysqld2]
port = 3308
datadir = /data3308
socket = /data3308/mysql.sock
pid-file = /data3308/mysqld.pid
log-error = /data3308/mysqld.err
:wq
可以添加多个数据库,只要硬件带得起
启动进程:
(不用重起服务,只要手动初始化就可以了)
[root@host50 ~]# mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/data3307 --initialize
[root@host50 ~]# mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/data3308 --initialize
要等命令执行完毕,自动跳出来
命令自动创建文件:
[root@host50 ~]# ls /data3307
auto.cnf ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema sys
[root@host50 ~]# ls /data3308
auto.cnf ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema sys
[root@host50 ~]# ll /data3307
总用量 110628
-rw-r-----. 1 mysql mysql 56 7月 23 09:07 auto.cnf
-rw-r-----. 1 mysql mysql 419 7月 23 09:07 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 7月 23 09:07 ibdata1
-rw-r-----. 1 mysql mysql 50331648 7月 23 09:07 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 7月 23 09:07 ib_logfile1
drwxr-x---. 2 mysql mysql 4096 7月 23 09:07 mysql
drwxr-x---. 2 mysql mysql 8192 7月 23 09:07 performance_schema
drwxr-x---. 2 mysql mysql 8192 7月 23 09:07 sys
[root@host50 ~]# ll /data3308
总用量 110628
-rw-r-----. 1 mysql mysql 56 7月 23 09:08 auto.cnf
-rw-r-----. 1 mysql mysql 419 7月 23 09:08 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 7月 23 09:08 ibdata1
-rw-r-----. 1 mysql mysql 50331648 7月 23 09:08 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 7月 23 09:08 ib_logfile1
drwxr-x---. 2 mysql mysql 4096 7月 23 09:08 mysql
drwxr-x---. 2 mysql mysql 8192 7月 23 09:08 performance_schema
drwxr-x---. 2 mysql mysql 8192 7月 23 09:08 sys
启动服务:
[root@host50 ~]# ss -ntulp | grep 3307
[root@host50 ~]# ss -ntulp | grep 3308
[root@host50 ~]# mysqld_multi start 1
[root@host50 ~]# ss -ntulp | grep 3307
tcp LISTEN 0 80 :::3307 :::* users:(("mysqld",pid=2002,fd=16))
[root@host50 ~]# ls /data3307
auto.cnf ib_logfile0 mysql mysql.sock sys
ib_buffer_pool ib_logfile1 mysqld.err mysql.sock.lock
ibdata1 ibtmp1 mysqld.pid performance_schema
[root@host50 ~]# mysqld_multi start 2
[root@host50 ~]# ss -nutlp | grep 3308
tcp LISTEN 0 80 :::3308 :::* users:(("mysqld",pid=2516,fd=16))
测试配置:
1.两个初始密码:
3307
2018-07-23T01:07:41.618814Z 1 [Note] A temporary password is generated for root@localhost: _lQI_p#a>3Tv
3308
2018-07-23T01:08:16.381694Z 1 [Note] A temporary password is generated for root@localhost: SKu-01)r+iu_
2.语法格式:
mysql -uroot -p初始密码 -S sock 文件
[root@host50 ~]# mysql -uroot -p'_lQI_p#a>3Tv' -S /data3307/mysql.sock
mysql> alter user root@"localhost" identified by "123456";
Query OK, 0 rows affected (0.00 sec)
[root@host50 ~]# mysql -uroot -p"SKu-01)r+iu_" -S /data3308/mysql.sock
mysql> alter user root@"localhost" identified by "123456";
Query OK, 0 rows affected (0.00 sec)
停止多实例服务:
mysqld_mutli --user=root --password=密码 stop 编号
[root@host50 ~]# ss -nutlp | grep 3307
tcp LISTEN 0 80 :::3307 :::* users:(("mysqld",pid=2002,fd=16))
[root@host50 ~]# mysqld_multi --user=root --password=123456 stop 1
[root@host50 ~]# ss -nutlp | grep 3307
多实例的优点:
一台服务器可以创建多个数据库:(只要硬件可以带得起服务)
多实例的缺点:
服务器断电或者硬件损坏,服务就会停止,影响到客户的访问