MySQL單機多例項配置

kumu_linux發表於2012-10-27

===========================================================================摘抄自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] ...]

startstopreport表示你想要執行的操作。你可以在單個伺服器或多個伺服器上執行指定的操作,取決於選項名後面的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多例項的效能調優較大的聯絡,筆者會對這方面做一個詳細的測試


相關文章