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

时间: 2024-12-02 08:31:43

MySQL多实例配置(一)的相关文章

MySQL多实例配置(二)

    MySQL数据库的集中化运维,可以通过在一台MySQL数据库服务器上,部署多个MySQL实例.该功能是通过mysqld_multi来实现.mysqld_multi用于管理多个mysqld的服务进程,这些mysqld服务进程程序可以用不同的socket或是监听于不同的端口,同时将数据文件分布到不同的磁盘以分散IO.mysqld_multi提供简单的命令用于启动,关闭和报告所管理的服务器的状态.从而减少生产环境的维护成本,方便后续的迁移和清理等工作,借助多实例绑定的方式提高服务器的整体资源利

MYSQL多实例配置与使用教程

在实际的开发过程中,可能会需要在一台服务器上部署多个MYSQL实例,那建议使用MYSQL官方的解决方案 mysqld_multi  1.修改my.cnf   如一个定义两个实例的参考配置:  代码如下 复制代码 [mysqld_multi] mysqld = /usr/local/mysql/bin/mysqld_safe mysqladmin = /usr/local/mysql/bin/mysqladmin user = your_user password = your_password

Centos下的MySQL多实例安装配置

系统环境:centos 6.2 64位 内核版本: 2.6.32-220.el6.x86_64 mysql版本:5.1.62 一,MySQL多实例介绍及MySQL多实例的特点 1.什么是MySQL多实例? MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307,3308),运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务. 2.MySQL多实例的特点有以下几点: 1).有效利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源

使用mysqld_multi实现单系统中配置多个MySQL服务器实例_Mysql

本文讲利用MySQL源码安装MySQL并用mysqld_multi配置多实例. 1.下载MySQL源码安装版本 到MySQL官网查找到相应版本下载,本文下载的是5.1版本 复制代码 代码如下: wget -c ftp://ftp.mirrorservice.org/sites/ftp.mysql.com/Downloads/MySQL-5.1/mysql-5.1.60.tar.gz  2.解压安装 复制代码 代码如下: tar -zxv -f mysql-5.1.60.tar.gz    ./c

Mysql 多实例启动配置详解

当开发与生产环境在同一台机器上,或需要在一台机器上部署多套测试环境时,往往需要同时起多个mysqld进程,最近帮测试搭环境的时候就碰到了这样的问题. 还是从安装mysql开始,下载tarball安装, 安装mysql  代码如下 复制代码 groupadd mysql useradd -g mysql mysql cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql5.5.27/  -DMYSQL_DATADIR=/data/mysql  -DWITH_

Centos6.3下单系统多mysql实例配置

注:本文档做了两个MYSQL实例,多个实例方法以此类推 LINUX操作系统:centOS6.3 64bit(安装了系统默认开发包) 实例一: MYSQL版本:mysql-5.0.56 PORT:3306 系统目录:/usr/local/mysql3306 实例二: MYSQL版本:mysql-5.1.72 PORT:3307 系统目录:/usr/local/mysql3307 一.安装开发包(使用默认CENTOS更新源): # yum -y install wget gcc-c++ ncurse

Centos中安装多个mysql数据的配置实例_Mysql

注:本文档做了两个MYSQL实例,多个实例方法以此类推 LINUX操作系统:centOS6.3 64bit(安装了系统默认开发包)数据库一:MYSQL版本:mysql-5.0.56PORT:3306系统目录:/usr/local/mysql3306数据库二:MYSQL版本:mysql-5.1.72PORT:3307系统目录:/usr/local/mysql3307 一.安装开发包(使用默认CENTOS更新源): 复制代码 代码如下: # yum -y install wget gcc-c++ n

mysqld_multi配置MySQL多实例关闭不了

在启用MySQL多实例中,很多环境会选择使用mysqld_multi管理多实例,但不幸的是从MySQL 5.6 后, mysqld_mutli不能把MySQL关掉了. 对于这个问题的处理办法,首先确认: mysqladmin -h127.0.0.1 -P3307 -umdev -p shutdown or mysqladmin -S /tmp/mysql3307.sock -umdev -p shutdown 工作没问题. 创建用户: create user 'mdev'@'localhost'

php使用PDO操作MySQL数据库实例

 这篇文章主要介绍了php使用PDO操作MySQL数据库,实例分析了PDO的开启与针对MySQL数据库的增删改查等基本操作方法,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php使用PDO操作MySQL数据库的方法.分享给大家供大家参考.具体分析如下: PDO是mysql数据库操作的一个公用类,我们不需要进行自定类就可以直接使用pdo来操作数据库,但是在php默认配置中pdo是未开启所以我们必须先在php.ini中开启它才可以使用,这里来详细介绍一下. PDO扩展为PHP访