前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql多实例

mysql多实例

作者头像
仙人技术
发布2020-04-29 13:28:42
2.4K0
发布2020-04-29 13:28:42
举报
文章被收录于专栏:山山仙人的专栏

1、什么是mysql多实例

mysql多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务

2、mysql多实例的特点

  • 有效利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务
  • 节约服务器资源
  • 资源互相抢占问题,当某个服务实例服务并发很高时或者开启慢查询时,会消耗更多的内存、CPU、磁盘IO资源,导致服务器上的其他实例提供服务的质量下降

3、部署mysql多实例

3.1、部署mysql多实例的两种方式

  • 第一种是使用多个配置文件启动不同的进程来实现多实例,这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便
  • 第二种是通过官方自带的mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每个实例的配置不太方面,优点是管理起来很方便,集中管理

同一开发环境下安装两个数据库,必须处理以下问题: 配置文件安装路径不能相同 数据库目录不能相同 启动脚本不能同名 端口不能相同 socket文件的生成路径不能相同

3.2、mysqld_multi配置mysql多实例

在进行此操作前已经编译安装好了mysql,安装位置在/application/mysql/

3.2.1、初始化数据目录
代码语言:javascript
复制
mkdir /usr/local/var -p
/application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/usr/local/var/mysql1 --user=mysql
/application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/usr/local/var/mysql2 --user=mysql
/application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/usr/local/var/mysql3 --user=mysql
/application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/usr/local/var/mysql4 --user=mysql

修改授权

代码语言:javascript
复制
chown -R mysql.mysql /usr/local/var/mysql*
3.2.2、配置多实例启动脚本
代码语言:javascript
复制
cp /application/mysql/support-files/mysqld_multi.server /etc/init.d/
#修改basedir和bindir为安装路径
basedir=/application/mysql
bindir=/application/mysql/bin
3.2.3、配置多实例数据库配置文件

/etc/目录下创建创建文件/etc/mysqld_multi.cnf,内容如下

代码语言:javascript
复制
[mysqld_multi]
mysqld     = /application/mysql/bin/mysqld_safe
mysqladmin = /application/mysql/bin/mysqladmin
#user       = mysql
#password   = my_password

[mysqld1]
socket     = /usr/local/var/mysql1/mysql1.sock
port       = 3306
pid-file   = /usr/local/var/mysql1/mysql1.pid
datadir    = /usr/local/var/mysql1
#language   = /usr/local/mysql/share/mysql/english
user       = mysql

[mysqld2]
socket     = /usr/local/var/mysql2/mysql2.sock
port       = 3307
pid-file   = /usr/local/var/mysql2/mysql2.pid
datadir    = /usr/local/var/mysql2
#language   = /usr/local/mysql/share/mysql/english
user       = mysql

[mysqld3]
socket     = /usr/local/var/mysql3/mysql3.sock
port       = 3308
pid-file   = /usr/local/var/mysql3/mysql3.pid
datadir    = /usr/local/var/mysql3
#language   = /usr/local/mysql/share/mysql/english
user       = mysql

[mysqld4]
socket     = /usr/local/var/mysql4/mysql4.sock
port       = 3309
pid-file   = /usr/local/var/mysql4/mysql4.pid
datadir    = /usr/local/var/mysql4
#language   = /usr/local/mysql/share/mysql/english
user       = mysql
3.2.4、启动多实例数据库
代码语言:javascript
复制
mysqld_multi --defaults-extra-file=/etc/mysqld_multi.cnf start

启动或停止具体某一个实例可在start、stop后面加上具体数据1,2,3等 mysqld_multi进行多实例管理 启动全部实例:

代码语言:javascript
复制
/usr/local/mysql/bin/mysqld_multi --defaults-extra-file=/etc/mysqld_multi.cnf start

查看全部实例状态:

代码语言:javascript
复制
/usr/local/mysql/bin/mysqld_multi report 

启动单个实例:

代码语言:javascript
复制
/usr/local/mysql/bin/mysqld_multi --defaults-extra-file=/etc/mysqld_multi.cnf start 3306 

停止单个实例:

代码语言:javascript
复制
/usr/local/mysql/bin/mysqld_multi --defaults-extra-file=/etc/mysqld_multi.cnf stop 3306 

查看单个实例状态:

代码语言:javascript
复制
/usr/local/mysql/bin/mysqld_multi --defaults-extra-file=/etc/mysqld_multi.cnf report 3306

检查

代码语言:javascript
复制
[root@db02 ~]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      5016/mysqld         
tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      5026/mysqld         
tcp        0      0 0.0.0.0:3308                0.0.0.0:*                   LISTEN      5036/mysqld         
tcp        0      0 0.0.0.0:3309                0.0.0.0:*                   LISTEN      5042/mysqld         
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1317/sshd           
tcp        0      0 :::22                       :::*                        LISTEN      1317/sshd    
3.2.5、登录相应数据库

进入端口为3306的数据库

代码语言:javascript
复制
mysql -uroot -p -h127.0.0.1 -P3306  ####密码为空

或者

代码语言:javascript
复制
mysql -S /usr/local/var/mysql1/mysql1.sock

3.3、多配置文件实现MySQL多实例

在进行此操作前已经编译安装好了mysql,安装位置在/application/mysql/

3.3.1、创建目录和配置文件
代码语言:javascript
复制
mkdir -p /data/{3306,3307}/data
vim /data/3306/my.cnf
[client]
port = 3306
socket = /data/3306/mysql.sock

[mysql]
no-auto-rehash

[mysqld]
user = mysql
port = 3306
socket = /data/3306/mysql.sock
basedir = /application/mysql
datadir = /data/3306/data
pid-file = /data/3306/mysql.pid
log-bin = /data/3306/mysql-bin
relay-log = /data/3306/relay-bin
relay-log-info-file = /data/3306/relay-log.info
server-id = 1

[mysqld_safe]
log-error=/data/3306/mysql_3306.err
pid-file=/data/3306/mysqld.pid
3.3.2、创建启动脚本
代码语言:javascript
复制
vim /data/3306/mysql
#!/bin/sh

#init
port=3306
CmdPath="/application/mysql/bin"
mysql_sock="/data/${port}/mysql.sock"
#startup function
function_start_mysql()
{
    if [ ! -e "$mysql_sock" ];then
      printf "Starting MySQL...\n"
      /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
    else
      printf "MySQL is running...\n"
      exit
    fi
}

#stop function
function_stop_mysql()
{
    if [ ! -e "$mysql_sock" ];then
       printf "MySQL is stopped...\n"
       exit
    else
       printf "Stoping MySQL...\n"
       ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown
   fi
}

#restart function
function_restart_mysql()
{
    printf "Restarting MySQL...\n"
    function_stop_mysql
    sleep 2
    function_start_mysql
}

case $1 in
start)
    function_start_mysql
;;
stop)
    function_stop_mysql
;;
restart)
    function_restart_mysql
;;
*)
    printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
esac
3.3.3、增加3307实例
代码语言:javascript
复制
sed 's#3306#3307#g;s#server-id = 1#server-id = 3#g' /data/3306/my.cnf >/data/3307/my.cnf
sed 's#3306#3307#g' /data/3306/mysql >/data/3307/mysql
3.3.4、修改权限
代码语言:javascript
复制
chown -R mysql.mysql /data
chmod +x /data/{3306,3307}/mysql
3.3.5、初始化
代码语言:javascript
复制
/application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/data/3306/data
/application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/data/3307/data
3.3.6、启动
代码语言:javascript
复制
/data/3306/mysql start
/data/3307/mysql start

启动的时候报错

代码语言:javascript
复制
[root@db01 ~]# 180707 16:30:54 mysqld_safe error: log-error set to '/data/3306/mysql_3306.err', however file don't exists. Create writable for user 'mysql'.

手动创建文件并授权,再次启动成功

代码语言:javascript
复制
touch /data/3306/mysql_3306.err
chown mysql:mysql /data/3306/mysql_3306.err

检查

代码语言:javascript
复制
[root@db01 ~]# netstat -lntup|grep mysql
tcp6       0      0 :::3306                 :::*                    LISTEN      2023/mysqld         
tcp6       0      0 :::3307                 :::*                    LISTEN      2505/mysqld
3.3.7、初始化密码登录
代码语言:javascript
复制
mysqladmin -uroot -S /data/3306/mysql.sock password '123456'
mysqladmin -uroot -S /data/3307/mysql.sock password '123456'

参考来源: https://www.cnblogs.com/xuchenliang/p/6843990.html https://blog.csdn.net/clevercode/article/details/47610619 https://blog.csdn.net/clevercode/article/details/47659457

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、什么是mysql多实例
  • 2、mysql多实例的特点
  • 3、部署mysql多实例
    • 3.1、部署mysql多实例的两种方式
      • 3.2、mysqld_multi配置mysql多实例
        • 3.2.1、初始化数据目录
        • 3.2.2、配置多实例启动脚本
        • 3.2.3、配置多实例数据库配置文件
        • 3.2.4、启动多实例数据库
        • 3.2.5、登录相应数据库
      • 3.3、多配置文件实现MySQL多实例
        • 3.3.1、创建目录和配置文件
        • 3.3.2、创建启动脚本
        • 3.3.3、增加3307实例
        • 3.3.4、修改权限
        • 3.3.5、初始化
        • 3.3.6、启动
        • 3.3.7、初始化密码登录
    相关产品与服务
    云数据库 SQL Server
    腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档