一臺服務器上同時運行多個MySQL

 

  1. 在一些情況下,我們會在一臺服務器上安裝多個MySQL,同時對外提供應用服務。這樣我們可以更加充分利用現有的資源,控制企業成本。比如,一臺SUN T5120機器,8核64個線程,這麼充足的資源事實上MySQL並不能充分利用,我們都知道Oracle對多線程的利用要遠遠高於MySQL(這裏我們多少也可以理解一點爲什麼oracle和sun結合了),儘管在5.4以後MySQL對線程的利用上有了很大改善,將線程的最優利用數從以前的4到8提升到了現在的16個。如果你就安裝一個MySQL,那麼多數資源就白白浪費了,同時也不能達到理想的狀態,那麼,我們完全可以在上面同時安裝多個MySQL讓它爲不同的應用提供服務,同一臺服務器上管理起來也相對比較方便些。下面我們就來看看如何實現,這裏我只介紹兩臺的安裝,再多也是一樣的方法。 
  2.  
  3. 實驗環境:一臺普通PC,CentOS 5.2,mysql-5.1.32-linux-i686-glibc23.tar.gz 
  4.  
  5. 實驗說明:MySQL 採用二進制包安裝。我們將在Linux系統下安裝兩個MySQL數據庫,這裏指的是MySQL這個數據庫軟件本身,而不是它裏面的應用數據庫,我們很多時候見到的都是一個MySQL下面創建了多個數據庫,也就是show databases的時候你看到的,我們要注意這些差別。 
  6.  
  7. 具體操作: 
  8.  
  9. 安裝MySQL。 
  10.  
  11. MySQL1 
  12.  
  13. # groupadd mysql 
  14. # useradd -g mysql mysql 
  15. # tar -xzf /opt/software/mysql-5.1.32-linux-i686-glibc23.tar.gz -C /opt 
  16. # mv mysql-5.1.32-linux-i686-glibc23 mysql1 
  17. # cd /opt/mysql1 
  18. # ./scripts/mysql_install_db –user=mysql 
  19. # chown -R root.mysql . 
  20. # chown -R mysql.mysql data 
  21.  
  22. MySQL2 
  23.  
  24. # groupadd mysql 
  25. # useradd -g mysql mysql 
  26. # tar -xzf /opt/software/mysql-5.1.32-linux-i686-glibc23.tar.gz -C /opt 
  27. # mv mysql-5.1.32-linux-i686-glibc23 mysql2 
  28. # cd /opt/mysql2 
  29. # ./scripts/mysql_install_db –user=mysql 
  30. # chown -R root.mysql . 
  31. # chown -R mysql.mysql data 
  32.  
  33. 兩個MySQL數據庫已經安裝完成,進入data目錄下你會看到MySQL已經好默認安裝好了3個數據庫。接下來我們要做的是啓動數據庫前的一些準備工作,既然我要在同一臺服務器上安裝兩個MySQL,那麼如何區分它們是不同的個體呢,這就需要我們作進一步細化,不同的MYSQL_HOME,不同的 PORT,不同的SOCKET,我們通過這些關鍵值來對它們進行區別。 
  34.  
  35. MySQL1: 
  36.  
  37. # cp /opt/mysql1/support-files/my-medium.cnf /opt/mysql1/my.cnf 
  38. # vi /opt/mysql1/my.cnf 
  39. [client] 
  40. port = 3306 
  41. socket = /opt/mysql1/data/mysql.sock 
  42.  
  43. [mysqld] 
  44. port = 3306 
  45. socket = /opt/mysql1/data/mysql.sock 
  46.  
  47. MySQL2: 
  48.  
  49. # cp /opt/mysql2/support-files/my-medium.cnf /opt/mysql2/my.cnf 
  50. # vi /opt/mysql2/my.cnf 
  51. [client] 
  52. port = 3307 
  53. socket = /opt/mysql2/data/mysql.sock 
  54.  
  55. [mysqld] 
  56. port = 3307 
  57. socket = /opt/mysql2/data/mysql.sock 
  58.  
  59. 準備就緒,開始啓動。 
  60.  
  61. MySQL1: 
  62.  
  63. # export MYSQL_HOME=/opt/mysql1 
  64. # ./bin/mysqld_safe –defaults-file=/opt/mysql1/my.cnf & 
  65.  
  66. MySQL2: 
  67.  
  68. # export MYSQL_HOME=/opt/mysql2 
  69. # ./bin/mysqld_safe –defaults-file=/opt/mysql2/my.cnf & 
  70.  
  71. 檢查是否正常,程序是否已經運行,端口是否打開。 
  72.  
  73. # ps -ef |grep mysql 
  74.  
  75. # netstat -an | grep ‘3306 | 3307′ 
  76.  
  77. 連接數據庫。 
  78.  
  79. [root@node1 mysql1]# ./bin/mysql –protocol=tcp -P3306 -uroot -e ’show databases’ 
  80. +——————–+ 
  81. | Database | 
  82. +——————–+ 
  83. | information_schema | 
  84. | a | 
  85. | mysql | 
  86. | test | 
  87. +——————–+ 
  88.  
  89. [root@node1 mysql2]# ./bin/mysql –protocol=tcp -P3307 -uroot -e ’show databases’ 
  90. +——————–+ 
  91. | Database | 
  92. +——————–+ 
  93. | information_schema | 
  94. | mysql | 
  95. | test | 
  96. +——————–+ 
  97.  
  98. Note: 使用mysql工具連接數據庫,不特別指定protocol選項的話,默認是socket方式連接,這也就是通常我們連接的時候會爲什麼有時會遇到 mysql.sock找不到,客戶端會去服務器找到相應的socket文件,其實,我們可以指定–protocol=tcp來避免這樣的連接問題。 protocol選項有4種方式:socket、tcp、pipe和memory,我在MySQL安全中也提到過,如果通過unix socket連接這樣可以減少安全問題。 
  99.  
  100. 一個MySQL下面可以創建多個不同應用的數據庫,我們只要開啓MySQL數據庫服務,那麼我們通過use database_name便可以很方便的操作各個數據庫。 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章