天天看點

mariadb單機多執行個體配置介紹

一、前言

前文己經介紹過了mysql的編譯安裝與工作流程,由于sun公司己被oracle收購,mysql己成附屬品也間接被“收編”了,至于mysql以後是否還會開源,這個誰也不知道……。

二、簡介

MariaDB資料庫管理系統是MySQL的一個分支,主要由開源社群在維護,采用GPL授權許可。開發這個分支的原因之一是:甲骨文公司收購了MySQL後,有将MySQL閉源的潛在風險,是以社群采用分支的方式來避開這個風險。

MariaDB的目的是完全相容MySQL,包括API和指令行,使之能輕松成為MySQL的代替品。在存儲引擎方面,使用XtraDB來代替MySQL的InnoDB。

MariaDB由MySQL的創始人麥克爾·維德紐斯主導開發,他早前曾以10億美元的價格,将自己建立的公司MySQL AB賣給了SUN,此後,随着SUN被甲骨文收購,MySQL的所有權也落入Oracle的手中。MariaDB名稱來自麥克爾·維德紐斯的女兒瑪麗亞(英語:Maria)的名字。(維基百科如是說;看到這我突然想起一廣告語:還是熟悉的配方,還是原來的味道!!!!)

三、安裝流程

注:

1

<code>#ln -s /usr/local/mariadb-Version mysql</code>

這樣就可以了。其它的都一樣。

四、多執行個體啟動mariadb

那麼什麼是執行個體呢?官方的說法,執行個體指的就是作業系統中一系列的程序以及為這些程序所配置設定的記憶體塊。如果用更容易了解的方式來解釋,那就是說資料庫的執行個體是我們通路資料庫的通道。弄清楚什麼是執行個體,那麼我們來看一下在mariadb中如何啟動多執行個體。

前提:

己經通過源碼或通用二進制格式安裝了mariadb.

<a href="http://s3.51cto.com/wyfs02/M01/23/EA/wKiom1NGwd3iIcYeAAE9L9KO9tk825.jpg" target="_blank"></a>

1、初始化多個執行個體

⑴、建立執行個體目錄

<a href="http://s3.51cto.com/wyfs02/M02/23/EA/wKioL1NGwQKylPqbAAFcUREnN9M332.jpg" target="_blank"></a>

⑵、為資料執行個體目錄初始化

利用mysql使用者初始化兩個執行個體

2

<code># scripts/mysql_install_db --datadir=/mariadb/data1 --user=mysql</code>

<code># scripts/mysql_install_db --datadir=/mariadb/data2 --user=mysql</code>

<a href="http://s3.51cto.com/wyfs02/M00/23/EA/wKiom1NGxWTCVp4KAAJoDYKcGsY860.jpg" target="_blank"></a>

⑶、編輯源檔案

<code>#vim /etc/my.cnf</code>

在此檔案末尾添加如下内容

3

4

5

6

7

8

9

<code>#添加引導子產品</code>

<code>[mysqld_multi]</code>

<code>mysqld     = </code><code>/usr/local/mysql/bin/mysqld_safe</code>

<code>#指定程式目錄啟動檔案(mysqld_safe安全模式的啟動方式)</code>

<code>mysqladmin = </code><code>/usr/local/mysql/bin/mysqladmin</code>

<code>#指定管理程式所在的目錄</code>

<code>user       = mysql</code>

<code>password   = mysql</code>

<code>#指定是那一個使用者(必須是系統是存在的使用者)</code>

添加兩個執行個體檔案

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

<code>[mysqld3307]</code>

<code>port=3307</code>

<code>#占用的端口(每一個執行個體一個端口)</code>

<code>socket=</code><code>/tmp/mysql3307</code><code>.sock</code>

<code>#指定套接字檔案所在的目錄</code>

<code>pid-</code><code>file</code><code>=</code><code>/tmp/mysql3307</code><code>.pid</code>

<code>#指定鎖檔案所在位置</code>

<code>max_allowed_packet=1M</code>

<code>net_buffer_length=2k</code>

<code>#包消息緩沖區初始化為net_buffer_length位元組,但需要時可以增長到max_allowed_packet位元組</code>

<code>table_open_cache=4</code>

<code>#所有線程打開的表的個數</code>

<code>sort_buffer_size=64k</code>

<code>#排序buffer大小;線程級别</code>

<code>thread_stack=128k</code>

<code>#每個線程的堆棧大小</code>

<code>basedir=</code><code>/usr/local/mysql</code>

<code>#源檔案所在的目錄</code>

<code>datadir=</code><code>/mariadb/data1</code>

<code>#資料執行個體目錄</code>

<code>server-</code><code>id</code><code>=1</code>

<code>#指定為主伺服器</code>

<code>#########################</code>

<code>[mysqld3308]</code>

<code>port=3308</code>

<code>socket=</code><code>/tmp/mysql3308</code><code>.sock</code>

<code>pid-</code><code>file</code><code>=</code><code>/tmp/mysql3308</code><code>.pid</code>

<code>datadir=</code><code>/mariadb/data2</code>

⑷、啟動執行個體

<code>#啟動第一個執行個體</code>

<code># mysqld_multi --defaults-extra-file=/etc/my.cnf start 3307</code>

<code># mysqld_multi --defaults-extra-file=/etc/my.cnf  report</code>

<code>Reporting MySQL servers</code>

<code>MySQL server from group: mysqld3307 is running</code>

<code>MySQL server from group: mysqld3308 is not running</code>

<a href="http://s3.51cto.com/wyfs02/M01/23/EA/wKiom1NGzTGzAoy8AAPOxYM_9CE456.jpg" target="_blank"></a>

啟動第二執行個體[mysqld3308]

<a href="http://s3.51cto.com/wyfs02/M00/23/EA/wKioL1NGzdDig1oSAANJQrkBQ2Y747.jpg" target="_blank"></a>

可以使用

<code>#ps -ef |grep msyql</code>

檢視到服務是否啟動

⑸、連接配接執行個體

第一種方式

<code>#連接配接第一個執行個體[mysql3307]</code>

<code># mysql -S /tmp/mysql3307.sock</code>

<code>#使用socket檔案連接配接</code>

<code>MariaDB [(none)]&gt; show session variables like </code><code>"%sock%"</code><code>;</code>

<code>#顯示所使用的socket檔案</code>

<code>+---------------+---------------------+</code>

<code>| Variable_name | Value               |</code>

<code>| socket        | </code><code>/tmp/mysql3307</code><code>.sock |</code>

<code>1 row </code><code>in</code> <code>set</code> <code>(0.00 sec)</code>

<code>MariaDB [(none)]&gt; show databases;</code>

<code>#顯示執行個體初始化後的資料庫</code>

<code>+--------------------+</code>

<code>| Database           |</code>

<code>| information_schema |</code>

<code>| mysql              |</code>

<code>| performance_schema |</code>

<code>| </code><code>test</code>               <code>|</code>

<code>4 rows </code><code>in</code> <code>set</code> <code>(0.01 sec)</code>

①對此執行個體進行授權管理

<code>MariaDB [(none)]&gt; </code><code>grant</code> <code>shutdown </code><code>on</code> <code>*.* </code><code>to</code>  <code>mysql@localhost identified </code><code>by</code> <code>'mysql'</code> <code>with</code> <code>grant</code> <code>option</code><code>;</code>

<code>Query OK, 0 </code><code>rows</code> <code>affected (0.03 sec)</code>

這樣做的目地隻有一個,是允許那一個使用者關閉此執行個體,如果不是此使用者對此執行個體關閉,那麼此執行個體會自動重新開機,也就是說無法正常關閉(當此執行個體工作過程中意外中斷也會自動重新開機的),這也就解釋了什麼是安全模式下啟動。

<code># mysql -S /tmp/mysql3308.sock</code>

<code>| socket        | </code><code>/tmp/mysql3308</code><code>.sock |</code>

同樣也要對此執行個體進行授權管理

<code>MariaDB [(none)]&gt; grant </code><code>shutdown</code> <code>on *.* to  mysql@localhost identified by </code><code>'mysql'</code> <code>with grant option;</code>

<code>Query OK, 0 rows affected (0.03 sec)</code>

第二種方式

使用TCP/ip連接配接

<code>#mysql -h localhost --protocol=tcp</code>

當服務啟動參數中有--skip-networking,則無法使用tcp協定連接配接

<a href="http://s3.51cto.com/wyfs02/M00/23/EA/wKioL1NG1yiB8donAAF4Wfd4fTw448.jpg" target="_blank"></a>

總結一下可以使用那些協定連接配接到mariadb

協定

連接配接類型

所支援的作業系統

TCP/IP

Local,Remote

ALL

Unix socket file

Local Only

Unix Only

Named pipe

Windows Only

Share    Memory

⑹、關閉執行個體

<code>#mysqld_multi --defaults-extra-file=/etc/my.cnf stop 3307</code>

<a href="http://s3.51cto.com/wyfs02/M02/23/EA/wKiom1NG2ayCCrPHAAJGwN8tq6Q706.jpg" target="_blank"></a>

也可以使用

<code>#mysqladmin shutdown</code>

這樣做了之後mariadb資料庫服務己經關閉,但是執行個體卻沒有關閉(有圖有真像),執行個體無法連接配接……

<a href="http://s3.51cto.com/wyfs02/M00/23/EA/wKiom1NG2-mzGT9iAAOuiAHvNCo827.jpg" target="_blank"></a>

從上圖可以看到結果了,是以說使用mysqldmin隻能治标不治本,還是授權使用者管理更便捷

如果想了解更多關于mysqld_multi的更多功能,請mysqld_multi --help

說到應用場景,我能想到的可能就是一主多從的環境(沒有真實環境啊…………)

=================完==========================

PS:

   1、執行個體腳本有時間再補上,有點小遺憾!

本文轉自 jinlinger 51CTO部落格,原文連結:http://blog.51cto.com/essun/1393728,如需轉載請自行聯系原作者