zoukankan      html  css  js  c++  java
  • MySQL多实例配置(一)

        MySQL数据库的集中化运维,能够通过在一台MySQL数据库服务器上,部署多个MySQL实例。该功能是通过mysqld_multi来实现。mysqld_multi用于管理多个mysqld的服务进程,这些mysqld服务进程程序能够用不同的socket或是监听于不同的端口,同一时候将数据文件分布到不同的磁盘以分散IO。mysqld_multi提供简单的命令用于启动,关闭和报告所管理的服务器的状态。从而降低生产环境的维护成本,方便兴许的迁移和清理等工作,借助多实例绑定的方式提高服务器的总体资源利用率。对于多实例的配置有2种方式,一种是在my.cnf为全部实例提供配置,一种是使用每个实例一个配置文件。本文主要描写叙述第一种方式。
       另外一种多实例配置方式请參考:MySQL多实例配置(二)
       有关MySQL单实例的安装请參考:Linux 下MySQL源代码安装完整版
      

    1、各数据库多实例的差异
      MSSQL
          MSSQL中的实例指的是一个SQL server服务器上仅有一个缺省实例。缺省实例名即为机器名ServerName(或IP)。


          假设在同一台机器上再安装SQL server,我们能够对实例命名如ServerName/InstanceName。
          即一台SQL server服务器上能够存在多个不同的实例。

    一个实例下能够存在多个不同的数据库。


          对于不同实例下的数据库的訪问,使用ServerName/InstanceName:PortNo就可以实现訪问,缺省实例为ServerName:PortNo。
          对不同的实例配置IP地址,相关的訪问协议。端口等等。


          实例的可訪问性须要启动该实例相应的相关服务。此处须要注意的是实例名和实例的服务名并非同样的。
          缺省的实例的服务名为MSSQLSERVER,而命名实例的服务名为MSSQL$INSTANCE_NAME。
      
      Oracle 
          一个Oracle Server由一个Oracle实例和一个Oracle数据库组成。

    即:Oracle Server = Oracle Instance + Oracle Database
          在Oracle的实例主要是由SGA,PGA以及一堆的后台进程来组成,此称之为实例。
          一系列物理文件的集合包含控制文件、数据文件、联机日志文件、參数文件、密码文件等称之为数据库。
          一个实例仅仅能訪问一个数据库。一个数据库能够被多个实例訪问。
        
      MySQL
          MySQL实例的概念与MSSQL差点儿相同。一个MySQL实例下能够存在或訪问N个数据库。
          不同的实例间能够用不同的端口号来区分。各个实例的数据能够使用不同的磁盘文件夹。
          MySQL多实例通过mysqld_multi工具来进行管理。

     

    2、现有的环境
      mysql安装路径: /u01/app/mysql
      mysql数据路径: /u01/app/mysqldata/data3306
      mysql端口号: 3306
      mysql  版本号:5.6.12 Source distribution
      OS     环境:SUSE Linux Enterprise Server 11 SP3  (x86_64)
      

    3、初始化实例
      #为新实例创建数据文件夹并赋权
      suse11:~ # mkdir -p /u01/app/mysqldata/data3406  
      suse11:~ # mkdir -p /u01/app/mysqldata/data3506
      suse11:~ # chown mysql:mysql -R /u01/app/mysqldata/data3406
      suse11:~ # chown mysql:mysql -R /u01/app/mysqldata/data3506
      
      #初始化实例
      suse11:~ # cd /u01/app/mysql
      suse11:/u01/app/mysql # ./scripts/mysql_install_db --user=mysql --ldata=/u01/app/mysqldata/data3406/
      suse11:/u01/app/mysql # ./scripts/mysql_install_db --user=mysql --ldata=/u01/app/mysqldata/data3506/
      # Author : Leshami
      # Blog   :
    http://blog.csdn.net/leshami

     

    4、改动配置文件
      suse11:~ # more /etc/my.cnf        #本配置文件里仅提供了多实例的基本參数,生产环境依据情形自行加入
      [mysqld_multi]
      mysqld = /u01/app/mysql/bin/mysqld_safe
      mysqladmin = /u01/app/mysql/bin/mysqladmin
      user = admin       #此帐户用于多实例关闭时使用。须要在每个实例上创建并授权
      password = xxx     #使用统一的密码便于管理
      
      [mysqld3306]
      socket = /tmp/mysql3306.sock
      port = 3306
      pid-file = /u01/app/mysqldata/data3306/mysql3306.pid
      datadir = /u01/app/mysqldata/data3306
      basedir = /u01/app/mysql
      user = mysql
      server-id=3306
      
      [mysqld3406]
      socket = /tmp/mysql3406.sock
      port = 3406
      pid-file = /u01/app/mysqldata/data3406/mysql3406.pid
      datadir = /u01/app/mysqldata/data3406
      basedir = /u01/app/mysql
      user = mysql
      server-id=3406
      
      [mysqld3506]
      socket = /tmp/mysql3506.sock
      port = 3506
      pid-file = /u01/app/mysqldata/data3506/mysql3506.pid
      datadir = /u01/app/mysqldata/data3506
      basedir = /u01/app/mysql
      user = mysql
      server-id=3506

     

    5、启动关闭多实例
      suse11:~ # mysqld_multi report
      Reporting MySQL servers
      MySQL server from group: mysqld3306 is not running
      MySQL server from group: mysqld3406 is not running
      MySQL server from group: mysqld3506 is not running
      
      suse11:~ # mysqld_multi start 3306
      suse11:~ # mysqld_multi start 3406,3506     #能够同一时候启动多个实例
      suse11:~ # netstat -ntlp  | grep mysql
      tcp        0      0 :::3306                 :::*                    LISTEN      14786/mysqld       
      tcp        0      0 :::3406                 :::*                    LISTEN      15103/mysqld       
      tcp        0      0 :::3506                 :::*                    LISTEN      15371/mysqld
      
      suse11:/tmp # ls *.sock
      mysql3306.sock  mysql3406.sock  mysql3506.sock
      
      #为新实例改动密码及创建账户
      suse11:/tmp # mysql -uroot -pxxx -S ./mysql3306.sock  #3306已经有初始密码
      
    root@localhost[(none)]> grant shutdown on *.* to 'admin'@'localhost' identified by 'xxx' with grant option;
      
      suse11:/tmp # mysql -uroot -p -S ./mysql3406.sock
      Enter password:  #此时密码为空
      
    root@localhost[(none)]> set password for 'root'@'localhost'=password('xxx');
      
      
    root@localhost[(none)]> grant shutdown on *.* to 'admin'@'localhost' identified by 'xxx' with grant option;
      
      suse11:/tmp # mysql -uroot -p -S ./mysql3506.sock
      Enter password:  #此时密码为空
      
    root@localhost[(none)]> set password for 'root'@'localhost'=password('xxx');
      
      
    root@localhost[(none)]> grant shutdown on *.* to 'admin'@'localhost' identified by 'xxx' with grant option;

      #使用TCP方式登录測试
      suse11:/tmp # mysql -uroot -pxxx -P3506
      
    root@localhost[(none)]>
      
      #检查多实例的状态
      suse11:/tmp # mysqld_multi report
      Reporting MySQL servers
      MySQL server from group: mysqld3306 is running
      MySQL server from group: mysqld3406 is running
      MySQL server from group: mysqld3506 is running

      #停止多实例服务器
      suse11:~ # mysqld_multi stop 3306
      suse11:~ # mysqld_multi report 3306
      Reporting MySQL servers
      MySQL server from group: mysqld3306 is not running
      suse11:~ # mysqld_multi stop 3406
      suse11:~ # mysqld_multi stop 3506

      #多实例服务器的日志
      suse11:~ # tail /u01/app/mysql/share/mysqld_multi.log
      Stopping MySQL servers
      
      Warning: Using a password on the command line interface can be insecure.
      141017 23:40:09 mysqld_safe mysqld from pid file /u01/app/mysqldata/data3406/mysql3406.pid ended
      mysqld_multi log file version 2.16; run: Fri Oct 17 23:40:09 2014
      
      Stopping MySQL servers
      
      Warning: Using a password on the command line interface can be insecure.
      141017 23:40:11 mysqld_safe mysqld from pid file /u01/app/mysqldata/data3506/mysql3506.pid ended
      
      #一次启动多个实例
      suse11:~ # mysqld_multi start 3306-3506
      suse11:~ # mysqld_multi report
      Reporting MySQL servers
      MySQL server from group: mysqld3306 is running
      MySQL server from group: mysqld3406 is running
      MySQL server from group: mysqld3506 is running

     

    6、配置多实例的自启动
      # echo "/u01/app/mysql/bin/mysqld_multi start 3306-3506" >>/etc/init.d/boot.local

  • 相关阅读:
    ruby 中 raise 抛出异常
    ruby中attr_accessor方法的理解
    Redis实现分布式缓存
    应用服务器集群概念
    反向代理和正向代理区别
    如何限制同一用户同时登录多台设备?
    Docker 初始
    Java 的反射机制你了解多少?
    JWT 实战
    判断 uniapp 项目运行到 什么机型
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6823300.html
Copyright © 2011-2022 走看看