MySQL多實例安裝


 
 

 

MySQL數據庫(一)

 

作者:Jack

歸檔:學習筆記

2017/6/19

 



 

MySQl數據庫(一)... 3

1章概述:... 4

1.1 MySQL介紹:... 4

1.2 MariaDB數據庫的誕生背景介紹... 4

1.3 MySQL多實例介紹... 5

1.3.1 什麼是MySQL多實例... 5

1.3.2 MySQL多實例的作用與問題... 6

1.4 MySQL多實例的生產應用場景... 7

2章關係型數據庫與非關係型數據庫... 8

2.1 關係型數據庫... 8

2.1.1 關係型數據庫的優點:... 9

2.1.2 關係型數據庫瓶頸... 9

2.1.3 對網站來說,關係型數據庫的很多特性不再需要了:... 10

2.2 NoSQL. 10

2.2.1 非關係型數據庫分類... 12

2.3 關係型數據庫  V.S.  非關係型數據庫... 12

3 MySQL單實例安裝:... 13

3.1 安裝MySQL需要的依賴包和編譯軟件... 13

3.2 採用編譯方式安裝MySQL. 15

3.3 初始化及配置... 16

3.4 修改屬主屬組及執行權限:... 16

3.5 複製執行腳本並設置開機自啓動:... 16

3.6 開啓mysql服務... 16

3.7 加入環境變量:... 16

3.8 使用mysql命令進入數據庫... 16

3.9 排錯:... 17

3.10 設置密碼:17

3.11 清理用戶及無用數據庫(基本優化)17

4 MySQL多實例常見的配置方案... 17

4.1 單一配置文件、單一啓動程序的多實例部署方案... 17

4.2 多配置文件、多啓動程序的部署方案... 18

5章安裝並配置多實例MySQL數據庫... 19

5.1 安裝MySQL多實例... 19

5.1.1 安裝MySQL需要的依賴包和編譯軟件... 19

5.1.2 採用編譯方式安裝MySQL. 21

5.1.3 創建MySQL多實例的數據文件目錄... 22

5.1.4 配置MySQL多實例的配置文件... 23

5.1.5 配置MySQL多實例的文件權限... 32

5.1.6 MySQL相關命令加入全局路徑的配置... 32

5.1.7 初始化MySQL多實例的數據庫文件... 33

5.1.8 初始化數據庫的原理及結果說明... 33

5.1.9 啓動MySQL多實例數據庫... 37

6章現場作業:請增加一個3308實例... 37

6.1 創建3308data目錄:... 37

6.2 複製配置文件及啓動文件:... 37

6.3 修改配置文件中的目錄地址及id. 38

6.4 修改屬主屬組和執行權限... 42

6.5 初始化數據庫... 42

6.6 啓動3308MsSQL程序... 42

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MySQl數據庫(一)

第1章 概述:

1.1 MySQL介紹:

以前已經介紹過,MySQL屬於傳統關係型數據庫產品,它開放式的架構使得用戶選擇性很強,同時社區開發與維護人數衆多。其功能穩定,性能卓越,且在遵守GPL協議的前提下,可以免費使用與修改,也爲MySQL的推廣與使用帶來了更多的利好。在MySQL成長與發展過程中,支持的功能逐漸增多,性能也不斷提高,對平臺的支持也越來越多。

MySQL是一種關係型數據庫管理系統,關係型數據庫的特點是將數據保存在不同的表中,再將這些表放入不同的數據庫中,而不是將所有數據統一放在一個大倉庫裏,這樣的設計增加了MySQL的讀取速度,而且靈活性和可管理性也得到了很大提高。訪問及管理MySQL數據庫的最常用標準化語言爲SQL結構化查詢語言。

1.2 MariaDB數據庫的誕生背景介紹

自甲骨文公司收購MySQL後,其在商業數據庫與開源數據庫領域市場的佔有份額都躍居第一,這樣的格局引起了業內很多的人士的擔憂,因爲商業數據庫的老大有可能將MySQL閉源。爲了避免OracleMySQL閉源,而無開源的類MySQL數據庫可用,MySQL社區採用分支的方式來避開這個風險。MariaDB數據庫就這樣誕生了,MariaDB是一個向後兼容,可能在以後替代MySQL的數據庫產品,其官方地址爲https://mariadb.org/。不過,這裏還是建議大家選擇更穩定、使用更廣泛的MySQL數據庫,可以先測試MariaDB數據庫,等使用的人員更多一些,社區更活躍後再考慮使用爲好。

1.3 MySQL多實例介紹

在以前,已經針對MySQL數據庫進行了介紹,並說明了爲什麼要選擇MySQL數據庫,以及MySQL數據庫在Linux系統下的多種安裝方式,同時講解了MySQL的二進制方式單實例安裝、基礎優化等內容,今天將爲大家講解更爲實用的MySQL多實例安裝、主從複製集羣等重要應用實踐。

1.3.1 什麼是MySQL多實例

簡單地說,MySQL多實例就是在一臺服務器上同時開啓多個不同的服務器端口(如:33063307),同時運行多個MySQL服務進程,這些服務進程通過不同的socket監聽不同的服務器端口來提供服務。

這些MySQL多實例共用一套MySQL安裝程序,使用不同的my.cnf(也可以相同)配置文件、啓動程序(也可以相同)和數據文件。在提供服務時,多實例MySQL在邏輯上看起來是各自獨立的,它們根據配置文件的對應設定值,獲得服務器相應數量的硬件資源。

打個比方吧,MySQL多實例就相當於房子的多個臥室,每個實例可以看作一間臥室,整個服務器就是一套房子,服務器的硬件資源(CPUMemDisk)、軟件資源(Centos操作系統)可以看作房子的衛生間、廚房、客廳,是房子的公用資源。若你是北漂的小夥伴,與朋友一起租房,相信對此能更好地理解。大家蝸居在一起,在自己的臥室休息,出來活動時肯定是要共用上述公共資源的。這樣該明白MySQL多實例了吧。

其實很多網絡服務都是可以配置多實例的,例如NginxApacheHaproxyRedisMemcahe等。這在門戶網站使用得很廣泛。

1.3.2 MySQL多實例的作用與問題

MySQL多實例的作用,具體如下。

  • 有效利用服務器資源

當單個服務器資源有剩餘時,可以充分利用剩餘的資源提供更多的服務,且可以實現資源的邏輯隔離。

  • 節約服務器資源

當公司資金緊張,但是數據庫又需要各自盡量獨立地提供服務,而且,需要主從複製等技術時,多實例就再好不過了。

wKioL1lHttjjVr_ZAAFqUCHl_ng421.jpg-wh_50

MySQL多實例有它的好處,但也有其弊端,比如,會存在資源互相搶佔的問題。

當某個數據庫實例併發很高或有SQL慢查詢時,整個實例會消耗大量的系統CPU、磁盤I/O等資源,導致服務器上的其他數據庫實例提供服務的質量一起下降。這就相當於大家住在一個房子的不同臥室一樣,早晨起來上班,都要刷牙、洗臉等,這樣衛生間就會長期佔用,其他人要等待一樣。不同實例獲取的資源是相對獨立的,無法像虛擬化一樣完全隔離。

1.4 MySQL多實例的生產應用場景

  • 資金緊張型公司的選擇:

若公司資金緊張,公司業務訪問量不太大,但又希望不同業務的數據庫服務各自盡量獨立地提供服務而互相不受影響,同時,還需要主從複製等技術提供備份或讀寫分離服務,那麼,多實例就再好不過了。例如:可以通過3臺服務器部署9~15個實例,交叉做主從複製、數據備份及讀寫分離,這樣就可達到9~15臺服務器每個只裝一個數據庫纔有的效果。這裏要強調的是,所謂的儘量獨立是相對的。

  • 併發訪問不是特別大的業務

當公司業務訪問量不太大的時候,服務器的資源基本上都浪費了,這時就很適合多實例的應用,如果對SQL語句的優化做得比較好,MySQL多實例會是一個很值得使用的技術,即使併發很大,合理分配好系統資源,搭配好服務,也不會有太大問題。

  • 門戶網站應用MySQL多實例場景     

門戶網站通常都會使用多實例,因爲配置硬件好的服務器,可節省IDC機櫃空間,同時,跑多實例也會減少硬件資源跑不滿的浪費。比如,百度公司的很多數據庫都是多實例,不過,一般是從庫多實例,例如某部門中使用的IBM服務器爲48CPU,內存96GB,一臺服務器跑3~4個實例;此外,新浪網使用的也是多實例,內存48GB左右。

說明:

據老男孩調查,新浪網的數據庫單機1~4個數據庫實例的居多,其中又數1~2個的最多,因爲大業務佔用的機器比較多。服務器是DELL R510的居多,CPU是E5210,48GB內存,磁盤12×300G SAS,做RAID10,此爲門戶網站的服務器配置參考,希望能給讀者購買服務器及部署實例一點數據幫助。

另外,新浪網站安裝數據庫時,一般採用編譯安裝的方式,並且會在優化之後做成rpm包,以便統一使用。

第2章 關係型數據庫與非關係型數據庫

2.1 關係型數據庫

    關係型數據庫,是指採用了關係模型來組織數據的數據庫。

    關係模型是在1970年由IBM的研究員E.F.Codd博士首先提出的,在之後的幾十年中,關係模型的概念得到了充分的發展並逐漸成爲主流數據庫結構的主流模型。

    簡單來說,關係模型指的就是二維表格模型,而一個關係型數據庫就是由二維表及其之間的聯繫所組成的一個數據組織。

關係模型中常用的概念:

    關係:可以理解爲一張二維表,每個關係都具有一個關係名,就是通常說的表名

    元組:可以理解爲二維表中的一行,在數據庫中經常被稱爲記錄

    屬性:可以理解爲二維表中的一列,在數據庫中經常被稱爲字段

    域:屬性的取值範圍,也就是數據庫中某一列的取值限制

    關鍵字:一組可以唯一標識元組的屬性,數據庫中常稱爲主鍵,由一個或多個列組成

    關係模式:指對關係的描述。其格式爲:關係名(屬性1,屬性2 ... ... ,屬性N),在數據庫中成爲表結構

2.1.1 關係型數據庫的優點:

  • 容易理解:二維表結構是非常貼近邏輯世界的一個概念,關係模型相對網狀、層次等其他模型來說更容易理解

  • 使用方便:通用的SQL語言使得操作關係型數據庫非常方便

  • 易於維護:豐富的完整性(實體完整性、參照完整性和用戶定義的完整性)大大減低了數據冗餘和數據不一致的概率

  1).高併發讀寫需求

    網站的用戶併發性非常高,往往達到每秒上萬次讀寫請求,對於傳統關係型數據庫來說,硬盤I/O是一個很大的瓶頸

  2).海量數據的高效率讀寫

    網站每天產生的數據量是巨大的,對於關係型數據庫來說,在一張包含海量數據的表中查詢,效率是非常低的

  3).高擴展性和可用性

    在基於web的結構當中,數據庫是最難進行橫向擴展的,當一個應用系統的用戶量和訪問量與日俱增的時候,數據庫卻沒有辦法像web serverapp server那樣簡單的通過添加更多的硬件和服務節點來擴展性能和負載能力。對於很多需要提供24小時不間斷服務的網站來說,對數據庫系統進行升級和擴展是非常痛苦的事情,往往需要停機維護和數據遷移。

2.1.3 對網站來說,關係型數據庫的很多特性不再需要了:

  事務一致性: 關係型數據庫在對事物一致性的維護中有很大的開銷,而現在很多web2.0系統對事物的讀寫一致性都不高

  讀寫實時性: 對關係數據庫來說,插入一條數據之後立刻查詢,是肯定可以讀出這條數據的,但是對於很多web應用來說,並不要求這麼高的實時性,比如發一條消息之後,過幾秒乃至十幾秒之後纔看到這條動態是完全可以接受的

  複雜SQL,特別是多表關聯查詢: 任何大數據量的web系統,都非常忌諱多個大表的關聯查詢,以及複雜的數據分析類型的複雜SQL報表查詢,特別是SNS類型的網站(SNS,專指社交網絡服務,包括了社交軟件和社交網站。),從需求以及產品階級角度,就避免了這種情況的產生。往往更多的只是單表的主鍵查詢,以及單表的簡單條件分頁查詢,SQL的功能極大的弱化了

    在關係型數據庫中,導致性能欠佳的最主要原因是多表的關聯查詢,以及複雜的數據分析類型的複雜SQL報表查詢。爲了保證數據庫的ACID特性,我們必須儘量按照其要求的範式進行設計,關係型數據庫中的表都是存儲一個格式化的數據結構。每個元組字段的組成都是一樣,即使不是每個元組都需要所有的字段,但數據庫會爲每個元組分配所有的字段,這樣的結構可以便於標語表之間進行鏈接等操作,但從另一個角度來說它也是關係型數據庫性能瓶頸的一個因素。

2.2 NoSQL

   NoSQL一詞首先是CarloStrozzi1998年提出來的,指的是他開發的一個沒有SQL功能,輕量級的,開源的關係型數據庫。這個定義跟我們現在對NoSQL的定義有很大的區別,它確確實實字如其名,指的就是“沒有SQL”的數據庫。但是NoSQL的發展慢慢偏離了初衷,我們要的不是“no sql”,而是“no relational”,也就是我們現在常說的非關係型數據庫了。

   2009年初,JohanOskarsson舉辦了一場關於開源分佈式數據庫的討論,Eric Evans在這次討論中再次提出了NoSQL一詞,用於指代那些非關係型的,分佈式的,且一般不保證遵循ACID原則的數據存儲系統。EricEvans使用NoSQL這個詞,並不是因爲字面上的“沒有SQL”的意思,他只是覺得很多經典的關係型數據庫名字都叫“**SQL,所以爲了表示跟這些關係型數據庫在定位上的截然不同,就是用了“NoSQL“一詞。

注:

數據庫事務必須具備ACID特性,ACIDAtomic原子性,Consistency一致性,Isolation隔離性,Durability持久性。

    非關係型數據庫提出另一種理念,例如,以鍵值對存儲,且結構不固定,每一個元組可以有不一樣的字段,每個元組可以根據需要增加一些自己的鍵值對,這樣就不會侷限於固定的結構,可以減少一些時間和空間的開銷。使用這種方式,用戶可以根據需要去添加自己需要的字段,這樣,爲了獲取用戶的不同信息,不需要像關係型數據庫中,要對多表進行關聯查詢。僅需要根據id取出相應的value就可以完成查詢。但非關係型數據庫由於很少的約束,他也不能夠提供像SQL所提供的where這種對於字段屬性值情況的查詢。並且難以體現設計的完整性。他只適合存儲一些較爲簡單的數據,對於需要進行較複雜查詢的數據,SQL數據庫顯的更爲合適。

 

2.2.1 非關係型數據庫分類

    由於非關係型數據庫本身天然的多樣性,以及出現的時間較短,因此,不想關係型數據庫,有幾種數據庫能夠一統江山,非關係型數據庫非常多,並且大部分都是開源的。

    這些數據庫中,其實實現大部分都比較簡單,除了一些共性外,很大一部分都是針對某些特定的應用需求出現的,因此,對於該類應用,具有極高的性能。依據結構化方法以及應用場合的不同,主要分爲以下幾類:

  • 面向高性能併發讀寫的key-value數據庫:key-value數據庫的主要特點即使具有極高的併發讀寫性能,Redis,Tokyo Cabinet,Flare就是這類的代表

  • 面向海量數據訪問的面向文檔數據庫:這類數據庫的特點是,可以在海量的數據中快速的查詢數據,典型代表爲MongoDB以及CouchDB

  • 面向可擴展性的分佈式數據庫:這類數據庫想解決的問題就是傳統數據庫存在可擴展性上的缺陷,這類數據庫可以適應數據量的增加以及數據結構的變化

  • 非關係型數據庫

    關係型數據庫的最大特點就是事務的一致性:傳統的關係型數據庫讀寫操作都是事務的,具有ACID的特點,這個特性使得關係型數據庫可以用於幾乎所有對一致性有要求的系統中,如典型的銀行系統。

    但是,在網頁應用中,尤其是SNS應用中,一致性卻不是顯得那麼重要,用戶A看到的內容和用戶B看到同一用戶C內容更新不一致是可以容忍的,或者說,兩個人看到同一好友的數據更新的時間差那麼幾秒是可以容忍的,因此,關係型數據庫的最大特點在這裏已經無用武之地,起碼不是那麼重要了。

    相反地,關係型數據庫爲了維護一致性所付出的巨大代價就是其讀寫性能比較差,而像微博、facebook這類SNS的應用,對併發讀寫能力要求極高,關係型數據庫已經無法應付(在讀方面,傳統上爲了克服關係型數據庫缺陷,提高性能,都是增加一級memcache來靜態化網頁,而在SNS中,變化太快,memchache已經無能爲力了),因此,必須用新的一種數據結構存儲來代替關係數據庫。

    關係數據庫的另一個特點就是其具有固定的表結構,因此,其擴展性極差,而在SNS中,系統的升級,功能的增加,往往意味着數據結構巨大變動,這一點關係型數據庫也難以應付,需要新的結構化數據存儲。

    於是,非關係型數據庫應運而生,由於不可能用一種數據結構化存儲應付所有的新的需求,因此,非關係型數據庫嚴格上不是一種數據庫,應該是一種數據結構化存儲方法的集合。

必須強調的是,數據的持久存儲,尤其是海量數據的持久存儲,還是需要一種關係數據庫這員老將。

第3章 MySQL單實例安裝:

3.1 安裝MySQL需要的依賴包和編譯軟件

1)安裝MySQL需要的依賴包

安裝MySQL之前,最好先安裝MySQL需要的依賴包,不然後面會出現很多報錯信息,到那時還得再回來安裝MySQL的依賴包。安裝命令如下:

[root@Jack ~]# yum install ncurses-devellibaio-devel -y

[root@Jack ~]# rpm -qa ncurses-devel libaio-devel

libaio-devel-0.3.107-10.el6.x86_64

ncurses-devel-5.7-4.20090207.el6.x86_64

提示:

安裝後檢查,如果出現兩行信息表示安裝成功。

2)安裝編譯MySQL需要的軟件

利用yum來下載MySQL需要的編譯軟件cmake

[root@Jack tools]# yum -y install cmake

[root@Jack tools]# rpm -qa cmake

cmake-2.8.12.2-4.el6.x86_64

3)設置用戶

[root@Jack tools]# useradd -s /sbin/nologin -M mysql

[root@Jack tools]# id mysql

uid=500(mysql) gid=500(mysql) groups=500(mysql)

4)下載軟件

解壓的軟件需要提前下載好,或者可以在網上下載。在網上下載的話可以執行如下命令:

cd /root/oldboy/tools/

wget -q http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.34.tar.gz

ls -l mysql-5.6.34.tar.gz

  在這裏我是已經提前下好了,所以可以直接開始解壓安裝MySql了:

MySQL軟件包的下載地址爲:http://dev.mysql.com/downloads/mysql/(如果地址變更無法下載,可以去官方下載或通過老男孩提供的雲空間下載)。可以把軟件下載到客戶端計算機本地後使用rz等工具傳到Linux裏,或者找到網絡下載地址後直接在Linux裏使用wget下載。

提示:

本例以MySQL編譯的方式來講解,前面章節已經帶領大家使用二進制方式安裝過了。在生產場景中,二進制和源碼包兩種安裝方法都是可以用的,其應用場景一般沒什麼差別。不同之處在於,二進制的安裝包較大,名字和源碼包也有些區別,二進制安裝過程比源碼更快。

MySQL源碼包和二進制安裝包的名稱見表:

MySQL軟件

軟件名

MySQL源碼安裝包

mysql-5.6.34.tar.gz(本章選擇的安裝包)

MySQL二進制安裝包

mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz

3.2 採用編譯方式安裝MySQL

配置及編譯安裝的步驟如下:

[root@Jack tools]# tar xf mysql-5.6.34.tar.gz

[root@Jack tools]# cd mysql-5.6.34

cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.34 \

-DMYSQL_DATADIR=/application/mysql-5.6.34/data \

-DMYSQL_UNIX_ADDR=/application/mysql-5.6.34/tmp/mysql.sock \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DWITH_EXTRA_CHARSETS=all \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_FEDERATED_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \

-DWITH_ZLIB=bundled \

-DWITH_SSL=bundled \

-DENABLED_LOCAL_INFILE=1 \

-DWITH_EMBEDDED_SERVER=1 \

-DENABLE_DOWNLOADS=1 \

-DWITH_DEBUG=0

[root@Jack mysql-5.6.34]# make

[root@Jack mysql-5.6.34]# make install

設置軟連接:

[root@Jack mysql-5.6.34]# ln -s/application/mysql-5.6.34/ /application/mysql

3.3 初始化及配置

cd /application/mysql/scripts

cp support-files/my*.cnf /etc/my.cnf

/application/mysql/scripts/mysql_install_db--basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql

3.4 修改屬主屬組及執行權限:

chown -R mysql.mysql /application/mysql/

chmod 700 /etc/init.d/mysqld

3.5 複製執行腳本並設置開機自啓動:

cp support-files/mysql.server /etc/init.d/mysqld

chkconfig mysqld on

chkconfig --list mysqld

3.6 開啓mysql服務

/etc/init.d/mysqld start

netstat -lntup|grep 330

3.7 加入環境變量:

echo 'PATH=/application/mysql/bin/:$PATH' >>/etc/profile

tail -1 /etc/profile

source /etc/profile

echo $PATH

3.8 使用mysql命令進入數據庫

mysql

3.9 排錯:

tail -100 /application/mysql/data/db02.err

3.10 設置密碼:

mysqladmin -u root password 'oldboy123'

mysql -uroot -poldboy123

3.11 清理用戶及無用數據庫(基本優化)

select user,host from mysql.user;

drop user ''@'db02';

drop user ''@'localhost';

drop user 'root'@'db02';

drop user 'root'@'::1';

select user,host from mysql.user;

drop database test;

show databases;

##################

第4章 MySQL多實例常見的配置方案

4.1 單一配置文件、單一啓動程序的多實例部署方案

下面是MySQL官方文檔提到的單一配置文件、單一啓動程序多實例部署方案,不推薦此方案,這裏僅作爲知識點提及,後文不再涉及此方案的說明。my.cnf配置文件示例(MySQL手冊裏提到的方法)如下:

[mysqld_multi]

mysqld     =/usr/bin/mysqld_safe

mysqladmin = /usr/bin/mysqladmin

user       = mysql

[mysqld1]

socket     =/var/lib/mysql/mysql.sock

port       = 3306

pid-file   =/var/lib/mysql/mysql.pid

datadir    = /var/lib/mysql/

user       = mysql

[mysqld2]

socket     =/mnt/data/db1/mysql.sock

port       = 3302

pid-file   =/mnt/data/db1/mysql.pid

datadir    = /mnt/data/db1/

user       = mysql

skip-name-resolve

server-id=10

default-storage-engine=innodb

innodb_buffer_pool_size=512M

innodb_additional_mem_pool=10M

default_character_set=utf8

character_set_server=utf8

#read-only

relay-log-space-limit=3G

expire_logs_day=20

啓動程序的命令如下:

mysqld_multi --config-file=/data/mysql/my_multi.cnf start 1

該方案的缺點是耦合度太高,一個配置文件,不好管理。工作開發和運維的統一原則爲降低耦合度。

4.2 多配置文件、多啓動程序的部署方案

多配置文件、多啓動程序部署方案,是本文主要講解的方案,也是我常用並極力推薦的多實例方案。下面來看配置示例。

以下是我已部署好的MySQL雙實例的目錄信息及文件註釋說明:

[root@Jack /]# tree -L 2 /data

/data

├── 3306

│   ├── my.cnf  ###實際配置文件

│   ├── mysql  ###實際啓動文件

├── 3307

│   ├── my.cnf   ###實際配置文件

│   ├── mysql   ###實際啓動文件

2 directories,4 files

提示:

這裏的配置文件my.cnf、啓動程序mysql都是獨立的文件,數據文件data目錄也是獨立的。

多實例MySQL數據庫的安裝和前文講解的單實例沒有任何區別,因此,如果有前文單實例的安裝環境,那麼可以直接略過下節安裝的內容。

第5章 安裝並配置多實例MySQL數據庫

5.1 安裝MySQL多實例

5.1.1 安裝MySQL需要的依賴包和編譯軟件

1)安裝MySQL需要的依賴包

安裝MySQL之前,最好先安裝MySQL需要的依賴包,不然後面會出現很多報錯信息,到那時還得再回來安裝MySQL的依賴包。安裝命令如下:

[root@Jack ~]# yum install ncurses-devellibaio-devel -y

[root@Jack ~]# rpm -qa ncurses-devel libaio-devel

libaio-devel-0.3.107-10.el6.x86_64

ncurses-devel-5.7-4.20090207.el6.x86_64

提示:

安裝後檢查,如果出現兩行信息表示安裝成功。

2)安裝編譯MySQL需要的軟件

利用yum來下載MySQL需要的編譯軟件cmake

[root@Jack tools]# yum -y install cmake

[root@Jack tools]# rpm -qa cmake

cmake-2.8.12.2-4.el6.x86_64

3)設置用戶

[root@Jack tools]# useradd -s /sbin/nologin -M mysql

[root@Jack tools]# id mysql

uid=500(mysql) gid=500(mysql) groups=500(mysql)

4)下載軟件

解壓的軟件需要提前下載好,或者可以在網上下載。在網上下載的話可以執行如下命令:

cd /root/oldboy/tools/

wget -q http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.34.tar.gz

ls -l mysql-5.6.34.tar.gz

  在這裏我是已經提前下好了,所以可以直接開始解壓安裝MySql了:

MySQL軟件包的下載地址爲:http://dev.mysql.com/downloads/mysql/(如果地址變更無法下載,可以去官方下載或通過老男孩提供的雲空間下載)。可以把軟件下載到客戶端計算機本地後使用rz等工具傳到Linux裏,或者找到網絡下載地址後直接在Linux裏使用wget下載。

提示:

本例以MySQL編譯的方式來講解,前面章節已經帶領大家使用二進制方式安裝過了。在生產場景中,二進制和源碼包兩種安裝方法都是可以用的,其應用場景一般沒什麼差別。不同之處在於,二進制的安裝包較大,名字和源碼包也有些區別,二進制安裝過程比源碼更快。

MySQL源碼包和二進制安裝包的名稱見表:

MySQL軟件

軟件名

MySQL源碼安裝包

mysql-5.6.34.tar.gz(本章選擇的安裝包)

MySQL二進制安裝包

mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz

5.1.2 採用編譯方式安裝MySQL

配置及編譯安裝的步驟如下:

[root@Jack tools]# tar xf mysql-5.6.34.tar.gz

[root@Jack tools]# cd mysql-5.6.34

cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.34 \

-DMYSQL_DATADIR=/application/mysql-5.6.34/data \

-DMYSQL_UNIX_ADDR=/application/mysql-5.6.34/tmp/mysql.sock \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DWITH_EXTRA_CHARSETS=all \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_FEDERATED_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \

-DWITH_ZLIB=bundled \

-DWITH_SSL=bundled \

-DENABLED_LOCAL_INFILE=1 \

-DWITH_EMBEDDED_SERVER=1 \

-DENABLE_DOWNLOADS=1 \

-DWITH_DEBUG=0

[root@Jack mysql-5.6.34]# make

[root@Jack mysql-5.6.34]# make install

設置軟連接:

[root@Jack mysql-5.6.34]# ln -s/application/mysql-5.6.34/ /application/mysql

補充:

如果系統裏有我們曾經講解過的單實例安裝的數據庫文件和啓動程序,最好停掉或刪除,以免產生衝突

/etc/init.d/mysqld stop

chkconfig mysqld off

5.1.3 創建MySQL多實例的數據文件目錄

在企業中,通常以/data目錄作爲MySQL多實例總的根目錄,然後規劃不同的數字(即MySQL實例端口號)作爲/data下面的二級目錄,不同的二級目錄對應的數字就作爲MySQL實例的端口號,以區別不同的實例,數字對應的二級目錄下包含MySQL的數據文件、配置文件及啓動文件等。

下面以配置33063307兩個實例爲例進行講解。創建MySQL多實例的目錄如下:

 [root@Jack mysql]# cd /

[root@Jack /]# rz -E

rz waiting to receive.

[root@Jack /]# unzip data.zip

Archive:  data.zip

   creating: data/

   creating: data/3306/

  inflating:data/3306/my.cnf       

  inflating:data/3306/mysql        

   creating: data/3307/

  inflating:data/3307/my.cnf       

  inflating:data/3307/mysql    

[root@Jack /]# tree /data

/data

├── 3306

│   ├── my.cnf

│   └── mysql

└── 3307

    ├── my.cnf

    └── mysql

創建多實例目錄:

[root@Jack /]# mkdir /data/{3306,3307}/data -p
[root@Jack /]# ll /data/
total 8
drwxr-xr-x 3 root root 4096 Jun 19 17:11 3306
drwxr-xr-x 3 root root 4096 Jun 19 17:11 3307

  修改屬主屬組和執行權限:

[root@Jack /]# chown -R mysql.mysql /data/
[root@Jack /]# ll -d /data
drwxr-xr-x 4 mysql mysql 4096 Apr 26 16:24 /data

[root@Jack /]# find /data -name mysql

/data/3306/mysql

/data/3307/mysql

[root@Jack /]# find /data -name mysql |xargs chmod700

[root@Jack /]# find /data -name mysql |xargs  ls -l

-rwx------ 1 mysql mysql 1345 Apr 26 16:22 /data/3306/mysql

-rwx------ 1 mysql mysql 1345 Apr 26 16:25 /data/3307/mysql

5.1.4 配置MySQL多實例的配置文件

通過vim命令添加配置文件內容,命令如下:

(一)3306my.cnf配置文件

[root@Jack ~]# cd /data/3306/

[root@Jack 3306]# vim my.cnf

[client]

port            = 3306

socket          =/data/3306/mysql.sock

 

[mysql]

no-auto-rehash

 

[mysqld]

user    = mysql

port    = 3306

socket  =/data/3306/mysql.sock

basedir = /application/mysql

datadir = /data/3306/data

open_files_limit    = 1024

back_log = 600

max_connections = 800

max_connect_errors = 3000

table_open_cache = 614

external-locking = FALSE

max_allowed_packet =8M

sort_buffer_size = 1M

join_buffer_size = 1M

thread_cache_size = 100

thread_concurrency = 2

query_cache_size = 2M

query_cache_limit = 1M

query_cache_min_res_unit = 2k

#default_table_type = InnoDB

thread_stack = 192K

#transaction_isolation = READ-COMMITTED

tmp_table_size = 2M

max_heap_table_size = 2M

#long_query_time = 1

#log_long_format

#log-error = /data/3306/error.log

#log-slow-queries = /data/3306/slow.log

pid-file = /data/3306/mysql.pid

#log-bin = /data/3306/mysql-bin

relay-log = /data/3306/relay-bin

relay-log-info-file = /data/3306/relay-log.info

binlog_cache_size = 1M

max_binlog_cache_size = 1M

max_binlog_size = 2M

expire_logs_days = 7

key_buffer_size = 16M

read_buffer_size = 1M

read_rnd_buffer_size = 1M

bulk_insert_buffer_size = 1M

lower_case_table_names = 1

skip-name-resolve

slave-skip-errors = 1032,1062

replicate-ignore-db=mysql

server-id = 6

innodb_additional_mem_pool_size = 4M

innodb_buffer_pool_size = 32M

innodb_data_file_path = ibdata1:128M:autoextend

innodb_file_io_threads = 4

innodb_thread_concurrency = 8

innodb_flush_log_at_trx_commit = 2

innodb_log_buffer_size = 2M

innodb_log_file_size = 4M

innodb_log_files_in_group = 3

innodb_max_dirty_pages_pct = 90

innodb_lock_wait_timeout = 120

innodb_file_per_table = 0

[mysqldump]

quick

max_allowed_packet = 2M

 

[mysqld_safe]

log-error=/data/3306/oldboy_3306.err

pid-file=/data/3306/mysqld.pid

(二)3306啓動文件

[root@Jack 3306]# vim mysql

#!/bin/sh

################################################

#this scripts is created by oldboy at 2017-03-09

#oldboy QQ:31333741

#site:http://www.oldboyedu.com

#blog:http://oldboy.blog.51cto.com

#oldboy trainning QQ group: 208160987 226199307  44246017

################################################

#init

port=3306

mysql_user="root"

CmdPath="/application/mysql/bin"

mysql_sock="/data/${port}/mysql.sock"

mysqld_pid_file_path=/data/${port}/${port}.pid

start(){

    if [ ! -e"$mysql_sock" ];then

       printf "Starting MySQL...\n"

        /bin/sh${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf--pid-file=$mysqld_pid_file_path 2>&1 > /dev/null &

        sleep 3

    else

        printf "MySQL isrunning...\n"

        exit 1

    fi

}

stop(){

    if [ ! -e"$mysql_sock" ];then

        printf "MySQL isstopped...\n"

        exit 1

    else

        printf "StopingMySQL...\n"

        mysqld_pid=`cat"$mysqld_pid_file_path"`

         if (kill -0$mysqld_pid 2>/dev/null)

           then

             kill $mysqld_pid

             sleep 2

         fi

    fi

}

 

restart(){

    printf "RestartingMySQL...\n"

    stop

    sleep 2

    start

}

 

case "$1" in

    start)

        start

    ;;

    stop)

        stop

    ;;

    restart)

        restart

    ;;

    *)

        printf "Usage:/data/${port}/mysql {start|stop|restart}\n"

esac

(三)3307配置文件(跟3306一樣,不過文件中的目錄地址要改)

[root@Jack 3306]# cd /data/3307

[root@Jack 3307]# vim my.cnf

 [client]

port            = 3307

socket          =/data/3307/mysql.sock

 

[mysql]

no-auto-rehash

 

[mysqld]

user    = mysql

port    = 3307

socket  =/data/3307/mysql.sock

basedir = /application/mysql

datadir = /data/3307/data

open_files_limit    = 1024

back_log = 600

max_connections = 800

max_connect_errors = 3000

table_open_cache = 614

external-locking = FALSE

max_allowed_packet =8M

sort_buffer_size = 1M

join_buffer_size = 1M

thread_cache_size = 100

thread_concurrency = 2

query_cache_size = 2M

query_cache_limit = 1M

query_cache_min_res_unit = 2k

#default_table_type = InnoDB

thread_stack = 192K

#transaction_isolation = READ-COMMITTED

tmp_table_size = 2M

max_heap_table_size = 2M

#long_query_time = 1

#log_long_format

#log-error = /data/3307/error.log

#log-slow-queries = /data/3307/slow.log

pid-file = /data/3307/mysql.pid

#log-bin = /data/3307/mysql-bin

relay-log = /data/3307/relay-bin

relay-log-info-file = /data/3307/relay-log.info

binlog_cache_size = 1M

max_binlog_cache_size = 1M

max_binlog_size = 2M

expire_logs_days = 7

key_buffer_size = 16M

read_buffer_size = 1M

read_rnd_buffer_size = 1M

bulk_insert_buffer_size = 1M

lower_case_table_names = 1

skip-name-resolve

slave-skip-errors = 1032,1062

replicate-ignore-db=mysql

server-id = 7

innodb_additional_mem_pool_size = 4M

innodb_buffer_pool_size = 32M

innodb_data_file_path = ibdata1:128M:autoextend

innodb_file_io_threads = 4

innodb_thread_concurrency = 8

innodb_flush_log_at_trx_commit = 2

innodb_log_buffer_size = 2M

innodb_log_file_size = 4M

innodb_log_files_in_group = 3

innodb_max_dirty_pages_pct = 90

innodb_lock_wait_timeout = 120

innodb_file_per_table = 0

[mysqldump]

quick

max_allowed_packet = 2M

 

[mysqld_safe]

log-error=/data/3307/oldboy_3307.err

pid-file=/data/3307/mysqld.pid

(四)3307啓動文件

[root@Jack 3307]# vim mysql

#!/bin/sh

################################################

#this scripts is created by oldboy at 2017-03-09

#oldboy QQ:31333741

#site:http://www.oldboyedu.com

#blog:http://oldboy.blog.51cto.com

#oldboy trainning QQ group: 208160987 226199307  44246017

################################################

#init

port=3307

mysql_user="root"

CmdPath="/application/mysql/bin"

mysql_sock="/data/${port}/mysql.sock"

mysqld_pid_file_path=/data/${port}/${port}.pid

start(){

    if [ ! -e"$mysql_sock" ];then

       printf "Starting MySQL...\n"

        /bin/sh${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf--pid-file=$mysqld_pid_file_path 2>&1 > /dev/null &

        sleep 3

    else

        printf "MySQL isrunning...\n"

        exit 1

    fi

}

stop(){

    if [ ! -e"$mysql_sock" ];then

        printf "MySQL isstopped...\n"

        exit 1

    else

        printf "StopingMySQL...\n"

        mysqld_pid=`cat"$mysqld_pid_file_path"`

         if (kill -0$mysqld_pid 2>/dev/null)

           then

             kill $mysqld_pid

             sleep 2

         fi

    fi

}

 

restart(){

    printf "RestartingMySQL...\n"

    stop

    sleep 2

    start

}

 

case "$1" in

    start)

        start

    ;;

    stop)

        stop

    ;;

    restart)

        restart

    ;;

    *)

        printf "Usage:/data/${port}/mysql {start|stop|restart}\n"

esac

不同的實例需要添加的my.cnf配置文件和啓動文件內容會有區別,其中的配置由官方的配置模板修改而來。當然,在實際工作中,我們是拿早已配置好的模板來進行修改的,可以通過rz等方式上傳配置文件模板my.cnf配置文件和啓動文件到相關目錄下。

[root@Jack 3307]# tree /data

/data

├── 3306

│   ├── my.cnf

│   └── mysql

└── 3307

    ├── my.cnf

    └── mysql

5.1.5 配置MySQL多實例的文件權限

(一)通過下面的命令,授權mysql用戶和組管理整個多實例的根目錄/data

[root@Jack 3307]# chown -R mysql.mysql /data

[root@Jack 3307]# ll -d /data

drwxr-xr-x 4 mysql mysql 4096 Apr 26 16:24 /data

(二)通過下面的命令,授權MySQL多實例所有啓動文件的mysql可執行,設置700權限最佳,注意不要用755權限,因爲啓動文件裏有數據庫管理員密碼,會被讀取到。

[root@Jack 3307]# find /data -name mysql

/data/3306/mysql

/data/3307/mysql

[root@Jack 3307]# find /data -name mysql |xargs chmod 700

[root@Jack 3307]# find /data -name mysql |xargs ls -l

-rwx------ 1 mysql mysql 1345 Apr 26 16:22 /data/3306/mysql

-rwx------ 1 mysql mysql 1345 Apr 26 16:25 /data/3307/mysql

5.1.6 MySQL相關命令加入全局路徑的配置

5.1.6.1配置全局路徑意義

如果不爲MySQL的命令配置全局路徑,就無法直接在命令行輸入mysql這樣的命令,只能用全路徑命令(/application/mysql/bin/mysql),這種帶着路徑輸入命令的方式很麻煩。

5.1.6.2配置MySQL全局路徑的方法

[root@Jack 3307]# echo 'export PATH=/application/mysql/bin:$PATH'>>/etc/profile
[root@Jack 3307]# source  /etc/profile
[root@Jack 3307]# ls /application/mysql/bin/mysql
/application/mysql/bin/mysql

提示:

更簡單的設置方法

用下面命令做軟鏈接:

ln-s/application/mysql/bin/*/usr/local/sbin/

或者把mysql命令所在路徑鏈接到全局路徑/usr/local/sbin/的下面。

5.1.7 初始化MySQL多實例的數據庫文件

上述步驟全都配置完畢後,就可以初始化數據庫文件了,這個步驟其實也可以在編譯安裝MySQL之後就操作,只不過放到這裏更合理一些。

1)初始化MySQL數據庫

初始化命令如下:

[root@Jack scripts]# ./mysql_install_db  --defaults-file=/data/3306/my.cnf--basedir=/application/mysql/ --datadir=/data/3306/data --user=mysql

[root@Jack scripts]# ./mysql_install_db  --defaults-file=/data/3307/my.cnf--basedir=/application/mysql/ --datadir=/data/3307/data --user=mysql

5.1.8 初始化數據庫的原理及結果說明

[root@Jack scripts]# tree /data

/data

├── 3306

│   ├── data

│   │   ├── ibdata1

│   │   ├── ib_logfile0

│   │   ├── ib_logfile1

│   │   ├── ib_logfile2

│   │   ├── mysql

│   │   │   ├── columns_priv.frm

│   │   │   ├── columns_priv.MYD

│   │   │   ├── columns_priv.MYI

│   │   │   ├── db.frm

│   │   │   ├── db.MYD

│   │   │   ├── db.MYI

│   │   │   ├── event.frm

│   │   │   ├── event.MYD

│   │   │   ├── event.MYI

│   │   │   ├── func.frm

│   │   │   ├── func.MYD

│   │   │   ├── func.MYI

│   │   │   ├── general_log.CSM

│   │   │   ├── general_log.CSV

│   │   │   ├── general_log.frm

│   │   │   ├── help_category.frm

│   │   │   ├── help_category.MYD

│   │   │   ├── help_category.MYI

│   │   │   ├── help_keyword.frm

│   │   │   ├── help_keyword.MYD

│   │   │   ├── help_keyword.MYI

│   │   │   ├── help_relation.frm

│   │   │   ├── help_relation.MYD

│   │   │   ├── help_relation.MYI

│   │   │   ├── help_topic.frm

│   │   │   ├── help_topic.MYD

│   │   │   ├── help_topic.MYI

│   │   │   ├── innodb_index_stats.frm

│   │   │   ├── innodb_table_stats.frm

│   │   │   ├── ndb_binlog_index.frm

│   │   │   ├── ndb_binlog_index.MYD

│   │   │   ├── ndb_binlog_index.MYI

│   │   │   ├── plugin.frm

│   │   │   ├── plugin.MYD

│   │   │   ├── plugin.MYI

│   │   │   ├── proc.frm

│   │   │   ├── proc.MYD

│   │   │   ├── proc.MYI

│   │   │   ├── procs_priv.frm

│   │   │   ├── procs_priv.MYD

│   │   │   ├── procs_priv.MYI

│   │   │   ├── proxies_priv.frm

│   │   │   ├── proxies_priv.MYD

│   │   │   ├── proxies_priv.MYI

│   │   │   ├── servers.frm

│   │   │   ├── servers.MYD

│   │   │   ├── servers.MYI

│   │   │   ├── slave_master_info.frm

│   │   │   ├── slave_relay_log_info.frm

│   │   │   ├── slave_worker_info.frm

│   │   │   ├── slow_log.CSM

│   │   │   ├── slow_log.CSV

│   │   │   ├── slow_log.frm

│   │   │   ├── tables_priv.frm

│   │   │   ├── tables_priv.MYD

│   │   │   ├── tables_priv.MYI

│   │   │   ├── time_zone.frm

│   │   │   ├── time_zone_leap_second.frm

│   │   │   ├── time_zone_leap_second.MYD

│   │   │   ├── time_zone_leap_second.MYI

│   │   │   ├── time_zone.MYD

│   │   │   ├── time_zone.MYI

│   │   │   ├── time_zone_name.frm

│   │   │   ├── time_zone_name.MYD

│   │   │   ├── time_zone_name.MYI

│   │   │   ├── time_zone_transition.frm

│   │   │   ├── time_zone_transition.MYD

│   │   │   ├── time_zone_transition.MYI

│   │   │   ├──time_zone_transition_type.frm

│   │   │   ├── time_zone_transition_type.MYD

│   │   │   ├──time_zone_transition_type.MYI

│   │   │   ├── user.frm

│   │   │   ├── user.MYD

│   │   │   └── user.MYI

│   │   ├── performance_schema

│   │   │   ├── accounts.frm

│   │  ………………

│   │   └── test

│   ├── my.cnf

│   └── mysql

└── 3307

    ├── data

    │  ├── ibdata1

    │  ├── ib_logfile0

    │  ├── ib_logfile1

    │  ├── ib_logfile2

    │  ├── mysql

    │  │   ├──columns_priv.frm

    │  │   ├──columns_priv.MYD

    │  │   ├──columns_priv.MYI

    │  │   ├── db.frm

    │  │   ├── db.MYD

    │  │   ├── db.MYI

    │  │   ├── event.frm

    │  │   ├── event.MYD

    │  │   ├── event.MYI

    │  │   ├── func.frm

    │  │   ├── func.MYD

    │  │   ├── func.MYI

    │  │   ├──general_log.CSM

    │   │   ├── general_log.CSV

………….

    │  └── test

    ├── my.cnf

└── mysql

10 directories, 266 files

5.1.9 啓動MySQL多實例數據庫

下面來看看啓動MySQL多實例的命令。

第一個實例3306的啓動命令如下:

[root@Jack scripts]# /data/3306/mysql start

Starting MySQL...

第二個實例3307的啓動命令如下:

[root@Jack scripts]# /data/3307/mysql start

Starting MySQL...

現在,檢查MySQL多實例數據庫是否成功啓動,命令及結果如下:

[root@Jack scripts]# ss -lnutp |grep 330

tcp    LISTEN     0     600                   :::3306                 :::*      users:(("mysqld",47072,11))

tcp    LISTEN     0     600                   :::3307                 :::*      users:(("mysqld",47796,11))

第6章 現場作業:請增加一個3308實例

6.1 創建3308data目錄:

[root@Jack scripts]# mkdir -p /data/3308/data
[root@Jack scripts]# ll /data/3308
total 4
drwxr-xr-x 2 root root 4096 Jun 19 18:42 data

6.2 複製配置文件及啓動文件:

[root@Jack scripts]# \cp /data/3306/my.cnf  /data/3308
[root@Jack scripts]# \cp /data/3306/mysql  /data/3308
[root@Jack scripts]# tree /data/3308
/data/3308
├── data
├── my.cnf
└── mysql

1 directory, 2 files

6.3 修改配置文件中的目錄地址及id

[root@Jack scripts]# sed -i 's#3306#3308#g' /data/3308/my.cnf

[root@Jack scripts]# sed -i 's#server-id = 6#server-id = 8#g'  /data/3308/my.cnf

[root@Jack scripts]# sed -i 's#3306#3308#g' /data/3308/mysql

檢查:

(一)配置文件

[root@Jack scripts]# cat /data/3308/my.cnf

[client]

port            = 3308

socket          =/data/3308/mysql.sock

 

[mysql]

no-auto-rehash

 

[mysqld]

user    = mysql

port    = 3308

socket  =/data/3308/mysql.sock

basedir = /application/mysql

datadir = /data/3308/data

open_files_limit    = 1024

back_log = 600

max_connections = 800

max_connect_errors = 3000

table_open_cache = 614

external-locking = FALSE

max_allowed_packet =8M

sort_buffer_size = 1M

join_buffer_size = 1M

thread_cache_size = 100

thread_concurrency = 2

query_cache_size = 2M

query_cache_limit = 1M

query_cache_min_res_unit = 2k

#default_table_type = InnoDB

thread_stack = 192K

#transaction_isolation = READ-COMMITTED

tmp_table_size = 2M

max_heap_table_size = 2M

#long_query_time = 1

#log_long_format

#log-error = /data/3308/error.log

#log-slow-queries = /data/3308/slow.log

pid-file = /data/3308/mysql.pid

#log-bin = /data/3308/mysql-bin

relay-log = /data/3308/relay-bin

relay-log-info-file = /data/3308/relay-log.info

binlog_cache_size = 1M

max_binlog_cache_size = 1M

max_binlog_size = 2M

expire_logs_days = 7

key_buffer_size = 16M

read_buffer_size = 1M

read_rnd_buffer_size = 1M

bulk_insert_buffer_size = 1M

lower_case_table_names = 1

skip-name-resolve

slave-skip-errors = 1032,1062

replicate-ignore-db=mysql

server-id = 8

innodb_additional_mem_pool_size = 4M

innodb_buffer_pool_size = 32M

innodb_data_file_path = ibdata1:128M:autoextend

innodb_file_io_threads = 4

innodb_thread_concurrency = 8

innodb_flush_log_at_trx_commit = 2

innodb_log_buffer_size = 2M

innodb_log_file_size = 4M

innodb_log_files_in_group = 3

innodb_max_dirty_pages_pct = 90

innodb_lock_wait_timeout = 120

innodb_file_per_table = 0

[mysqldump]

quick

max_allowed_packet = 2M

 

[mysqld_safe]

log-error=/data/3308/oldboy_3308.err

pid-file=/data/3308/mysqld.pid

(二)啓動文件

[root@Jack scripts]# cat /data/3308/mysql

#!/bin/sh

################################################

#this scripts is created by oldboy at 2017-03-09

#oldboy QQ:31333741

#site:http://www.oldboyedu.com

#blog:http://oldboy.blog.51cto.com

#oldboy trainning QQ group: 208160987 226199307  44246017

################################################

#init

port=3308

mysql_user="root"

CmdPath="/application/mysql/bin"

mysql_sock="/data/${port}/mysql.sock"

mysqld_pid_file_path=/data/${port}/${port}.pid

start(){

    if [ ! -e"$mysql_sock" ];then

       printf "Starting MySQL...\n"

        /bin/sh${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf--pid-file=$mysqld_pid_file_path 2>&1 > /dev/null &

        sleep 3

    else

        printf "MySQL isrunning...\n"

        exit 1

    fi

}

stop(){

    if [ ! -e"$mysql_sock" ];then

        printf "MySQL isstopped...\n"

        exit 1

    else

        printf "StopingMySQL...\n"

        mysqld_pid=`cat"$mysqld_pid_file_path"`

         if (kill -0$mysqld_pid 2>/dev/null)

           then

             kill $mysqld_pid

             sleep 2

         fi

    fi

}

 

restart(){

    printf "RestartingMySQL...\n"

    stop

    sleep 2

    start

}

 

case "$1" in

    start)

        start

    ;;

    stop)

        stop

    ;;

    restart)

        restart

    ;;

    *)

        printf "Usage:/data/${port}/mysql {start|stop|restart}\n"

esac

6.4 修改屬主屬組和執行權限

[root@Jack scripts]# ll -d /data/3308/
drwxr-xr-x 3 mysql mysql 4096 Jun 19 18:48 /data/3308/
[root@Jack scripts]# ll -d /data/3308/mysql
-rwx------ 1 mysql mysql 1345 Jun 19 18:48 /data/3308/mysql

6.5 初始化數據庫

[root@Jack scripts]# cd /application/mysql/scripts/

[root@Jack scripts]# ./mysql_install_db--defaults-file=/data/3308/my.cnf --datadir=/data/3308/data --basedir=/application/mysql--user=mysql

[root@Jack scripts]# egrep "server-id|log-bin"/data/3308/my.cnf

#log-bin = /data/3308/mysql-bin

server-id = 8

6.6 啓動3308MsSQL程序

[root@Jack scripts]# ss -lnutp |grep 330

tcp    LISTEN     0     600                   :::3306                 :::*      users:(("mysqld",47072,11))

tcp    LISTEN     0     600                   :::3307                 :::*      users:(("mysqld",47796,11))

tcp    LISTEN     0     600                   :::3308                 :::*      users:(("mysqld",48633,11))

 

 

 

 

 

 

 

 

 

 

 

 

 

                                          


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