標籤:database dba sql mysql instance
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/data3606
suse11:~ # mkdir -p /u01/app/mysqldata/data3706
suse11:~ # chown mysql:mysql -R /u01/app/mysqldata/data3606
suse11:~ # chown mysql:mysql -R /u01/app/mysqldata/data3706
#初始化執行個體
suse11:~ # cd /u01/app/mysql
suse11:/u01/app/mysql # ./scripts/mysql_install_db --user=mysql --ldata=/u01/app/mysqldata/data3606/
suse11:/u01/app/mysql # ./scripts/mysql_install_db --user=mysql --ldata=/u01/app/mysqldata/data3706/
# Author : Leshami
# Blog : http://blog.csdn.net/leshami
4、配置各執行個體的my.cnf檔案
# vi /u01/app/mysqldata/data3606/my3606.cnf
[mysqld]
socket = /tmp/mysql3606.sock
port = 3606
pid-file = /u01/app/mysqldata/data3606/mysql3606.pid
datadir = /u01/app/mysqldata/data3606
basedir = /u01/app/mysql
user = mysql
server-id=3606
[client]
port = 3606
socket = /tmp/mysql3606.sock
[mysql]
no-auto-rehash
socket = /tmp/mysql3606.sock
prompt=\\[email protected]\\h[\\d]> \\
# vi /u01/app/mysqldata/data3706/my3706.cnf
[mysqld]
socket = /tmp/mysql3706.sock
port = 3706
pid-file = /u01/app/mysqldata/data3706/mysql3706.pid
datadir = /u01/app/mysqldata/data3706
basedir = /u01/app/mysql
user = mysql
server-id=3706
[client]
port = 3706
socket = /tmp/mysql3706.sock
[mysql]
no-auto-rehash
socket = /tmp/mysql3706.sock
prompt=\\[email protected]\\h[\\d]> \\
suse11:~ # chown -R mysql:mysql /u01/app/mysqldata/data3606/my3606.cnf
suse11:~ # chown -R mysql:mysql /u01/app/mysqldata/data3706/my3706.cnf
5、啟動關閉多執行個體
suse11:~ # mysqld_safe --defaults-file=/u01/app/mysqldata/data3606/my3606.cnf &
suse11:~ # mysqld_safe --defaults-file=/u01/app/mysqldata/data3706/my3706.cnf &
suse11:~ # netstat -nltp|grep mysql
tcp 0 0 :::3606 :::* LISTEN 64277/mysqld
tcp 0 0 :::3706 :::* LISTEN 64597/mysqld
suse11:~ # mysqladmin -uroot password ‘xxx‘ -S /tmp/mysql3606.sock
suse11:~ # mysqladmin -uroot password ‘xxx‘ -S /tmp/mysql3706.sock
#下面使用通訊端方式串連到執行個體
suse11:~ # mysql -uroot -pxxx -S /tmp/mysql3606.sock
[email protected][(none)]>
suse11:~ # mysql -uroot -pxxx -S /tmp/mysql3706.sock
[email protected][(none)]>
#下面使用TCP方式串連到執行個體
suse11:~ # mysql -uroot -pxxx -P3606 --protocol=tcp
[email protected][(none)]> exit
suse11:~ # mysql -uroot -pxxx -P3706 --protocol=tcp
[email protected][(none)]>
#關閉mysql執行個體
suse11:~ # mysqladmin -uroot -pxxx -S /tmp/mysql3606.sock shutdown
suse11:~ # mysqladmin -uroot -pxxx -S /tmp/mysql3706.sock shutdown
MySQL多執行個體配置(二)