標籤:down 相關 acl basedir host 方便 linux grep not
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已經有初始密碼
[email protected][(none)]> grant shutdown on *.* to ‘admin‘@‘localhost‘ identified by ‘xxx‘ with grant option;
suse11:/tmp # mysql -uroot -p -S ./mysql3406.sock
Enter password: #此時密碼為空白
[email protected][(none)]> set password for ‘root‘@‘localhost‘=password(‘xxx‘);
[email protected][(none)]> grant shutdown on *.* to ‘admin‘@‘localhost‘ identified by ‘xxx‘ with grant option;
suse11:/tmp # mysql -uroot -p -S ./mysql3506.sock
Enter password: #此時密碼為空白
[email protected][(none)]> set password for ‘root‘@‘localhost‘=password(‘xxx‘);
[email protected][(none)]> grant shutdown on *.* to ‘admin‘@‘localhost‘ identified by ‘xxx‘ with grant option;
#使用TCP方式登入測試
suse11:/tmp # mysql -uroot -pxxx -P3506
[email protected][(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
MySQL多執行個體配置(一)