• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MySQL系列之二 多实例配置

    系列教程

    MySQL系列之开篇 MySQL关系型数据库基础概念
    MySQL系列之一 MariaDB-server安装
    MySQL系列之三 基础篇
    MySQL系列之四 SQL语法
    MySQL系列之五 视图、存储函数、存储过程、触发器
    MySQL系列之六 用户与授权
    MySQL系列之七 MySQL存储引擎
    MySQL系列之八 MySQL服务器变量
    MySQL系列之九 mysql查询缓存及索引
    MySQL系列之十 MySQL事务隔离实现并发控制
    MySQL系列之十一 日志记录
    MySQL系列之十二 备份与恢复
    MySQL系列之十三 MySQL的复制
    MySQL系列之十四 MySQL的高可用实现
    MySQL系列之十五 MySQL常用配置和性能压力测试

    什么是MySQL多实例?

    简单地说,MySQL多实例就是在一台服务器上同时开启多个不同的服务端口(如:3306,3307),同时运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供服务。

    这些MySQL多实例共用一套MySQL安装程序,使用不同的my.cnf(也可以相同)配置文件、启动程序(也可以相同)和数据文件。在提供服务时,多实例MySQL在逻辑上看来是各自独立的,它们根据配置文件的对应设定值,获得服务器相应数量的硬件资源。

    打个比方吧,MySQL多实例就相当于房子的多个卧室,每个实例可以看作一间卧室,整个服务器就是一套房子,服务器的硬件资源(cpu,men,disk)、软件资源(CentOS操作系统)可以看作房子的卫生间、厨房、客厅,是房子的共用资源。若你是北漂的小伙伴,与朋友一起租房子,相信更好理解,大家蜗居在一起,休息在自己的卧室,出来活动肯定是要共用上述公共资源。这样就可以很好的理解MySQL多实例了。

    其实很多网络服务都是可以配置多实例的,例如nginx、Apache、haproxy、redis等都可以配置多实例。这在门户网站使用都很广泛。

    在一台物理机中需要多个测试环境,那么就需要用到了搭建数据库的多个实例,多个实例的意思就是运行多份程序,实例与实例之间没有影响。要注意监听的端口需要不同。

    环境:CentOS7.5,编译安装MariaDB-10.2.15版本,软件安装目录:/app/mysql/

    ​ 1)创建运行的目录环境

    [root@centos7 ~]# mkdir -p /mysqldb/{3306,3307,3308}/{etc,socket,pid,log,data,bin}
    [root@centos7 ~]# chown -R mysql:mysql /mysqldb/
    

    ​ 2)初始化数据库

    [root@centos7 ~]# cd /app/mysql/
    [root@centos7 mysql]# scripts/mysql_install_db --datadir=/mysqldb/3306/data/ --user=mysql --basedir=/app/mysql/ 
    [root@centos7 mysql]# scripts/mysql_install_db --datadir=/mysqldb/3307/data/ --user=mysql --basedir=/app/mysql/
    [root@centos7 mysql]# scripts/mysql_install_db --datadir=/mysqldb/3308/data/ --user=mysql --basedir=/app/mysql/
    

    以上是编译安装的,安装目录为/app/mysql/,需要先进入软件的安装目录然后执行初始化脚本,如果是yum安装的包,则直接运行mysql_install_db命令即可

    ​ 3)提供配置文件并按需要修改

    [root@centos7 mysql]# cp support-files/my-huge.cnf /mysqldb/3306/etc/my.cnf
    [root@centos7 mysql]# cp support-files/my-huge.cnf /mysqldb/3307/etc/my.cnf
    [root@centos7 mysql]# cp support-files/my-huge.cnf /mysqldb/3308/etc/my.cnf
    [root@centos7 mysqldb]# cd /mysqldb/
    [root@centos7 mysqldb]# vim 3306/etc/my.cnf
    [mysqld]
    port        = 3306
    datadir     = /mysqldb/3306/data
    socket      = /mysqldb/3306/socket/mysql.sock
    [root@centos7 mysqldb]# vim 3307/etc/my.cnf  #按以上配置示例更改
    [root@centos7 mysqldb]# vim 3308/etc/my.cnf
    

    ​ 4)提供服务启动脚本

    [root@centos7 ~]# cat mysqld  #脚本示例
    #!/bin/bash
    
    port=3306  #需要修改为当前实例的端口号
    mysql_user="root"
    mysql_pwd=""
    cmd_path="/app/mysql/bin"  #安装目录下的bin
    mysql_basedir="/mysqldb"  #实例数据库文件所在目录
    mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"
    
    function_start_mysql()
    {
        if [ ! -e "$mysql_sock" ];then
          printf "Starting MySQL...\n"
          ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf  > /dev/null  
        else
          printf "MySQL is running...\n"
          exit
        fi
    }
    
    
    function_stop_mysql()
    {
        if [ ! -e "$mysql_sock" ];then
           printf "MySQL is stopped...\n"
           exit
        else
           printf "Stoping MySQL...\n"
           ${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
       fi
    }
    
    
    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: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
    esac
    [root@centos7 ~]# cp mysqld /mysqldb/3306/bin/
    [root@centos7 ~]# cp mysqld /mysqldb/3307/bin/
    [root@centos7 ~]# cp mysqld /mysqldb/3308/bin/
    [root@centos7 ~]# vim /mysqldb/3306/bin/mysqld
    port=3306
    [root@centos7 ~]# vim /mysqldb/3307/bin/mysqld
    port=3307
    [root@centos7 ~]# vim /mysqldb/3308/bin/mysqld
    port=3308
    
    

    ​ 5)修改脚本文件权限,防止密码被别人看到

    [root@centos7 ~]# chmod 700 /mysqldb/3306/bin/mysqld 
    [root@centos7 ~]# chmod 700 /mysqldb/3307/bin/mysqld  
    [root@centos7 ~]# chmod 700 /mysqldb/3308/bin/mysqld 
    

    ​ 6)启动服务

    [root@centos7 ~]# service mysqld stop  #保证自己原来的服务停止,释放3306端口
    [root@centos7 ~]# /mysqldb/3306/bin/mysqld start  #启动服务
    [root@centos7 ~]# /mysqldb/3307/bin/mysqld start
    [root@centos7 ~]# /mysqldb/3308/bin/mysqld start
    [root@centos7 ~]# ss -tnl  #如果看到三个实例监听的端口都打开后说明服务启动正常
    LISTEN 0 80 :::3306 :::*
    LISTEN 0 80 :::3307 :::*
    LISTEN 0 80 :::3308 :::*
    

    ​ 7)连接测试

    [root@centos7 ~]# mysql -S /mysqldb/3306/socket/mysql.sock  #使用-S指定套接字文件
    Server version: 10.2.15-MariaDB-log Source distribution
    MariaDB [(none)]> show variables like '%port';  #查看端口是否是3306
    +---------------------+-------+
    | Variable_name       | Value |
    +---------------------+-------+
    | extra_port          | 0     |
    | large_files_support | ON    |
    | port                | 3306  |
    | report_port         | 3306  |
    +---------------------+-------+
    4 rows in set (0.00 sec)
    
    [root@centos7 ~]# mysql -S /mysqldb/3307/socket/mysql.sock  #再连接测试一下3307和3308
    Server version: 10.2.15-MariaDB-log Source distribution
    MariaDB [(none)]> show variables like '%port';
    +---------------------+-------+
    | Variable_name       | Value |
    +---------------------+-------+
    | extra_port          | 0     |
    | large_files_support | ON    |
    | port                | 3307  |
    | report_port         | 3307  |
    +---------------------+-------+
    4 rows in set (0.00 sec)
    
    [root@centos7 ~]# mysql -S /mysqldb/3308/socket/mysql.sock
    Server version: 10.2.15-MariaDB-log Source distribution
    MariaDB [(none)]> show variables like '%port';
    +---------------------+-------+
    | Variable_name       | Value |
    +---------------------+-------+
    | extra_port          | 0     |
    | large_files_support | ON    |
    | port                | 3308  |
    | report_port         | 3308  |
    +---------------------+-------+
    4 rows in set (0.00 sec)
    
    

    多实例搭建成功!

    ​ 8)使用这条命令来停止实例

    [root@centos7 ~]# /mysqldb/3306/bin/mysqld stop
    

    ​ 9)最后一步:给root用户加个密码把~

    [root@centos7 ~]# mysql -S /mysqldb/3307/socket/mysql.sock 
    Server version: 10.2.15-MariaDB-log Source distribution
    
    MariaDB [(none)]> update mysql.user set password=PASSWORD("your_password") where user='root';
    Query OK, 4 rows affected (0.00 sec)
    MariaDB [(none)]> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    MariaDB [(none)]> select user,host,password from mysql.user;
    +------+-----------+-------------------------------------------+
    | user | host      | password                                  |
    +------+-----------+-------------------------------------------+
    | root | localhost | *9E72259BA9214F692A85B240647C4D95B0F2E08B |
    | root | centos7   | *9E72259BA9214F692A85B240647C4D95B0F2E08B |
    | root | 127.0.0.1 | *9E72259BA9214F692A85B240647C4D95B0F2E08B |
    | root | ::1       | *9E72259BA9214F692A85B240647C4D95B0F2E08B |
    |      | localhost |                                           |
    |      | centos7   |                                           |
    +------+-----------+-------------------------------------------+
    6 rows in set (0.00 sec)
    
    [root@centos7 ~]# mysql -S /mysqldb/3307/socket/mysql.sock -uroot -p'your_password' #指定密码,再次登录OK~
    
    

    最后将你的密码加入bin/mysqld脚本文件中,防止服务无法启动

    到此这篇关于MySQL系列之二 多实例配置的文章就介绍到这了,更多相关MySQL 多实例配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • MySQL数据库入门之多实例配置方法详解
    • MySQL多实例配置方案
    • mysql使用mysqld_multi部署单机多实例的方法教程
    • 快速实现MySQL的部署以及一机多实例部署
    • 基于mysql多实例安装的深入解析
    上一篇:MySQL系列之十三 MySQL的复制
    下一篇:MySQL系列之一 MariaDB-server安装
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MySQL系列之二 多实例配置 MySQL,系列,之二,多,实例,