MySQL-5.7.28二进制多实例部署

多实例介绍

  • MySQL多实例就是在一台服务器上同时开启多个不同的服务器端口(如3306、3307),同时运行多个MySQL服务进程,通过不同的socket监听不同的服务器端口来提供服务。
  • MySQL多实例共用一套MySQL安装程序,使用不同的my.cnf(也可以相同)配置文件、启动程序(也可以相同)和数据文件。它们根据配置文件的对应设定值,获得服务器相应数量的硬件资源。
  • 打个比方:
    • MySQL多实例就像你家里面的多个卧室,你家的房子就代表整个服务器,房子里的一间卧室看做一个实例,卧室属于个人环境。你家的厨房、卫生间、客厅属于公共资源只要是住在卧室里的人都可以用这些资源。就像服务器的硬件资源(CPU、Mem、Disk、系统)

优缺点

  • 有效利用服务器资源

    • 当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务,且可以实现资源的逻辑隔离。
  • 节约服务器资源

    • 当公司资金紧张,但是数据库有需要各自尽量独立地提供服务,而且需要主从复制等设计时,多实例就再好不过了。
  • 存在资源互相抢占问题

    • 当某个 数据库实例并发很高或有SQL慢查询时,整个实例会消耗大量的CPU、磁盘I/O等资源,导致服务器上的其他实例提供服务的质量下降。相当于一个房子里面多个卧室一样,早晨起来上班上学,都要刷牙、洗脸等,长时间占用卫生间,其他人就要等待。不同实例获取的资源都是相对独立的,无法像虚拟化一样完全隔离。

二进制多实例部署

二进制安装数据库教程地址

[root@localhost ~]# mkdir -p /usr/local/mysql-330{7,8,9}/data
[root@localhost ~]# cat >> /usr/local/mysql-3307/my.cnf << EOF
> [mysqld]
> user=mysql
> server_id=7
> port=3307
> bind-address=0.0.0.0
> basedir=/usr/local/mysql
> datadir=/usr/local/mysql-3307/data
> socket=/usr/local/mysql-3307/mysql.sock
> log_error=/usr/local/mysql-3307/mysql.log
> EOF
[root@localhost ~]# cat >> /usr/local/mysql-3308/my.cnf << EOF
> [mysqld]
> server_id=8
> port=3308
> bind-address=0.0.0.0
> basedir=/usr/local/mysql
> datadir=/usr/local/mysql-3308/data
> socket=/usr/local/mysql-3308/mysql.sock
> log_error=/usr/local/mysql-3308/mysql.log
> EOF
[root@localhost ~]# cat >> /usr/local/mysql-3309/my.cnf << EOF
> [mysqld]
> server_id=9
> port=3309
> bind-address=0.0.0.0
> basedir=/usr/local/mysql
> datadir=/usr/local/mysql-3309/data
> socket=/usr/local/mysql-3309/mysql.sock
> log_error=/usr/local/mysql-3309/mysql.log
> EOF

初始化数据

[root@localhost ~]# mysqld --initialize-insecure --basedir=/usr/local/mysql --user=mysql --datadir=/usr/local/mysql-3307/data && echo $?
[root@localhost ~]# mysqld --initialize-insecure --basedir=/usr/local/mysql --user=mysql --datadir=/usr/local/mysql-3308/data && echo $?
[root@localhost ~]# mysqld --initialize-insecure --basedir=/usr/local/mysql --user=mysql --datadir=/usr/local/mysql-3309/data && echo $?

拷贝systemd启动文件

[root@localhost ~]# cp /etc/systemd/system/mysqld.service /etc/systemd/system/mysqld-3307.service 
[root@localhost ~]# cp /etc/systemd/system/mysqld.service /etc/systemd/system/mysqld-3308.service 
[root@localhost ~]# cp /etc/systemd/system/mysqld.service /etc/systemd/system/mysqld-3309.service 

修改启动配置文件路径

[root@localhost ~]# sed -i 's#ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf#ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql-3307/my.cnf#g' /etc/systemd/system/mysqld-3307.service
[root@localhost ~]# sed -i 's#ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf#ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql-3308/my.cnf#g' /etc/systemd/system/mysqld-3308.service
[root@localhost ~]# sed -i 's#ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf#ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql-3309/my.cnf#g' /etc/systemd/system/mysqld-3309.service

授权

[root@localhost ~]# chown -R mysql.mysql /usr/local/mysql-*

启动多个实例

[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start mysqld-3307.service
[root@localhost ~]# systemctl start mysqld-3308.service
[root@localhost ~]# systemctl start mysqld-3309.service

在这里插入图片描述
连接查看实例ID

[root@localhost ~]# mysql -S /usr/local/mysql-3307/mysql.sock -e "show variables like 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 7     |
+---------------+-------+
[root@localhost ~]# mysql -S /usr/local/mysql-3308/mysql.sock -e "show variables like 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 8     |
+---------------+-------+
[root@localhost ~]# mysql -S /usr/local/mysql-3309/mysql.sock -e "show variables like 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 9     |
+---------------+-------+

多实例数据库的管理

  • MySQL安装完成后,默认情况下,root账户是无密码的。
  • 登录不同的实例需要指定不同实例的mysql.sock文件路径,mylsq.sock是在my.cnf配置文件里指定的。
  • 下面是无密码情况下登录数据库的方法,关键点是-S参数及后面指定的mysql.sock路径,注意:不同实例的sock虽然名字相同,但是路径不同。
[root@localhost ~]# mysql -S /usr/local/mysql-3307/mysql.sock
[root@localhost ~]# mysql -S /usr/local/mysql-3308/mysql.sock
[root@localhost ~]# mysql -S /usr/local/mysql-3309/mysql.sock

MySQL安全配置

  • MySQL的root账户密码默认为空,极不安全,可以通过mysqladmin命令为MySQL不同实例的数据库设置独立的密码。
[root@localhost ~]# mysqladmin -uroot -S /usr/local/mysql-3307/mysql.sock password '000000'
[root@localhost ~]# mysql -uroot -p -S /usr/local/mysql-3307/mysql.sock
Enter password: 000000
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.28 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
  • 8和9实例的方法和7相同,只是sock路径不同而已
[root@localhost ~]# mysqladmin -uroot -S /usr/local/mysql-3308/mysql.sock password '000000'
[root@localhost ~]# mysqladmin -uroot -S /usr/local/mysql-3309/mysql.sock password '000000'
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想敲代码的运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值