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 Instance,究竟怎么做呢?
 首先要明晰几个原理, 简称为mysqld读取my.cnf的顺序:
 第一搜,首先读取/etc/my.cnf,多实例这个配置文件不会存在。:-(
 第二搜,$datadir/my.cnf,在data目录下寻找此配置文件。
 第三搜,defaultfile=/path/my.cnf 通常写在命令行上,mysqld_safe defaultfile=/tmp/my.cnf &等执行。
 第四搜,~/my.cnf 当前用户下的配置文件。
mysqld多进程运行的必要条件,就是pid文件,datadir,socket,port是独立分开的。
 | Variable_name | Value |
 | datadir | /home/mysql/ |
 | Variable_name | Value |
 | socket | /home/mysql/mysql.sock |
 | Variable_name | Value |
 | pid_file | /home/mysql/mysql.pid |
 | Variable_name | Value |
 | port | 3306 |单一版本实现多实例
 #pwd
 /usr/local/
 #touch my_multi.cnf
 #cat my_multi.cnf
 [mysqld_multi]
 mysqld = /usr/bin/mysqld_safe
 mysqladmin = /usr/bin/mysqladmin
 user = root[mysqld1]
 socket = /tmp/mysql_3301.sock
 port = 3301
 pid-file = /usr/local/mysql_3301/data/mysql_3301.pid
 datadir = /usr/local/mysql_3301/data/
 log = /usr/local/mysql_3301/data/mysql_3301.log
 user = mysql[mysqld2]
 socket = /tmp/mysql_3302.sock
 port = 3302
 pid-file = /usr/local/mysql_3302/data/mysql_3302.pid
 datadir = /usr/local/mysql_3302/data/
 log = /usr/local/mysql_3302/data/mysql_3302.log
 user = mysql启动mysqld 的两个实例
/usr/bin/mysqld_multi –config-file=./my_multi.cnf start 1,2Starting mysqld daemon with databases from /usr/local/mysql_3301/data/
 Starting mysqld daemon with databases from /usr/local/mysql_3302/data/查看3301,3302端口是否被监听
 # netstat -lt |grep 33
 tcp 0 0 *:3301 *:* LISTEN
 tcp 0 0 *:3302 *:* LISTEN测试mysql是否可以连通
#pwd
 /usr/local/
通过/tmp/mysql_3301.sock连接3001端口的mysqld
 # bin/mysql -u root -S /tmp/mysql_3301.sock -e “SELECT @@VERSION;”
停止3001端口的mysqld
 # /usr/bin/mysqld_multi –config-file=./my_multi.cnf stop 1
 STOPPING server from pid file /usr/local/mysql_3301/data/mysql_3301.pid
 091010 11:56:04 mysqld ended
再次连接,系统会提示错误
 # bin/mysql -u root -S /tmp/mysql_3301.sock -e “SELECT @@VERSION;”
 ERROR 2002 (HY000):
 Can’t connect to local MySQL server through socket ‘/tmp/mysql_3301.sock’ (2)
相同的步骤测试3002端口的mysqld,输出与上面相同。
 # /usr/bin/mysql -u root -S /tmp/mysql_3302.sock -e “SELECT @@VERSION;”
 # /usr/bin/mysqld_multi –config-file=./my_multi.cnf stop 2
 # /usr/bin/mysql -u root -S /tmp/mysql_3302.sock -e “SELECT @@VERSION;”补充上两句:
 [Nova@imdba.cn mysql]# cp ../mysql-5.0.67/support-files/my-large.cnf /etc/my.cnf
 [Nova@imdba.cn mysql]# cp ../mysql-5.0.67/support-files/mysql.server /etc/rc.d/init.d/mysqld
 [Nova@imdba.cn mysql]# chkconfig –add mysql
 [Nova@imdba.cn mysql]# chkconfig –level mysql 345 on
 [Nova@imdba.cn mysql]# chkconfig –list mysql