===========================================================================摘抄自hellodba
MySQL單機多執行個體方案,是指在一台物理的PC伺服器上運行多個MySQL資料庫執行個體,為什麼要這樣做?這樣做的好處是什嗎?
1.儲存技術飛速發展,IO不再是瓶頸
普通PC伺服器的CPU與IO資源不均衡,因為磁碟的IO能力非常有限,為了滿足應用的需要,往往需要配置大量的伺服器,這樣就造成CPU資源的大量浪費。但是,Flash儲存技術的出現改變了這一切,單機的IO能力不再是瓶頸,可以在單機運行多個MySQL執行個體提升CPU利用率。
2.MySQL對多核CPU利用率低
MySQL對多核CPU的利用率不高,一直是個問題,5.1版本以前的MySQL,當CPU超過4個核時,效能無法線性擴充。雖然MySQL後續版本一直在改進這個問題,包括Innodb plugin和Percona XtraDB都對多核CPU的利用率改進了很多,但是依然無法實現效能隨著CPU core的增加而提升。我們現在常用的雙路至強伺服器,單顆CPU有4-8個core,在作業系統上可以看到16-32 CPU(每個core有兩個線程),四路伺服器可以達到64 core甚至更多,所以提升MySQL對於多核CPU的利用率是提升效能的重要手段。是Percona的一份測試資料:
===========================================================================摘抄自hellodba
mysqld_multi可以管理多個幀聽不同Unix通訊端檔案和TCP/IP連接埠的串連的mysqld進程。它可以啟動或停止伺服器,或報告它們的目前狀態。
要想調用mysqld_multi,使用下面的文法:
shell> mysqld_multi [options] {start|stop|report} [GNR[,GNR] ...]
start、stop和report表示你想要執行的操作。你可以在單個伺服器或多個伺服器上執行指定的操作,取決於選項名後面的GNR列。如果沒有該列,mysqld_multi為選項檔案中的所有伺服器執行該操作。
具體配置如下:
# pwd
/usr/local/mysql/etc/
# cat multi.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin =/usr/local/mysql/bin/mysqladmin
user = multi_admin
password = 123123 #確保之後賦權的密碼是這裡的密碼,否則無法關閉執行個體
[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /var/run/mysqld/mysql.pid2
datadir = /data2
[mysqld3]
socket = /tmp/mysql.sock3
port = 3308
pid-file = /var/run/mysqld/mysql.pid3
datadir = /data3
[mysqld4]
socket = /tmp/mysql.sock4
port = 3309
pid-file = /var/run/mysqld/mysql.pid4
datadir = /data4
# mkdir /data2 /data3 /data4
# chown myql:mysql -R /data2/data3 /data4
# cd /usr/local/mysql
# ./scripts/mysql_install_db --user=mysql --datadir=/data2
# ./scripts/mysql_install_db --user=mysql --datadir=/data3
# ./scripts/mysql_install_db --user=mysql --datadir=/data4
# /usr/local/mysql/bin/mysqld_multi \
--defaults-file=/usr/local/mysql/etc/multi.cnfstart 2-4 //開啟2到4的執行個體
//# /usr/local/mysql/bin/mysqld_multi \
--defaults-file=/usr/local/mysql/etc/multi.cnfstart 2,4 開啟2和4兩個執行個體
# netstat -tulnp | grep mysql
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 15080/mysqld
tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 15088/mysqld
tcp 0 0 0.0.0.0:3309 0.0.0.0:* LISTEN 15097/mysqld
# mysql -u root -S /tmp/mysql.sock2
Welcome to the MySQLmonitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version:5.5.8-debug-log Source distribution
Copyright (c) 2000, 2010,Oracle and/or its affiliates. All rights reserved.
This software comes withABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modifyand redistribute it under the GPL v2 license
Type 'help;' or '\h' forhelp. Type '\c' to clear the current input statement.
mysql> grant shutdown on *.* to multi_admin@'localhost' identified by'123123';
Query OK, 0 rows affected(0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected(0.01 sec)
mysql> quit
Bye
#
之後的執行個體依次串連執行命令賦權即可
mysql> grant shutdown on *.* to multi_admin@'localhost' identified by'123123';
mysql> flush privileges;
# /usr/local/mysql/bin/mysqld_multi \
--defaults-file=/usr/local/mysql/etc/multi.cnfstop 2-4
# netstat -tulnp | grep mysql
#
另外NUMA對MySQL多執行個體的效能調優較大的聯絡,筆者會對這方面做一個詳細的測試