MySQL基礎入門及MariaDB源代碼編譯

  程序時由指令+數據所組成的,當我們要開發一個程序或是調用一個程序時,程序一般是寫在程序文件中的,然而,數據的存儲方式則就有多種了,包括:變量、數組、文件、存儲工具。
    
    文件名:文件名就是引用磁盤存儲空間上一段數據流的一個標記

    數據庫其實就是數據存儲管理系統,它一般爲用戶提供兩中接口,一種是編程接口(API),這是一種爲程序員所準備的接口,程序可以根據API開發所需要的程序;另外一種就是交互式接口,這種接口面向的是一般的普通用戶,他們
沒有編程經驗,但是,可以通過程序員開發好的程序,對數據進行操作。      

    某種情況下,數據庫的查詢比文件查詢某項內容時,效率要高很多,這是由於,數據庫中有索引,它不需要去遍歷數據庫中的每一項內容,有人會說,索引越多,那效率不是越高嗎?但是結果並不是這樣的,物極必反就是這個道理,過多的索引,在添加數據時,在關係型數據庫中,就要創建相應的索引,這樣,對寫入數據是有損壞的。所以,所以要適量。

下面,介紹一下關係型數據庫中的代表MySQL的相關特性:
MySQL數據庫中有約束的概念,用戶填入的數據只能在指定的範圍內進行變化
候選鍵:可以被用於MySQL數據庫的主鍵
惟一鍵與主鍵的區別:惟一鍵可以爲空,主鍵不能爲空

數據庫管理系統(DBMS)的主要優點如下:
    它的數據具有獨立性;
    對於用戶的數據存取的效率是高效的;
    保證了數據的完整性和安全性,安全性體現在要對用戶進行驗證;
    能對數據進行很好的管理操作;
    對併發的數據存儲性好,有着良好的故障恢復;
    MySQL數據庫簡單易學,開發週期較短;

對於不用的客戶請求,MySQL的多個線程發起響應,若是同時寫入一個文件時,會損壞文件嗎?
答案是:不會的,MySQL和文件一個,也有鎖的概念,當一個用戶訪問某個文件時,相應的就會加鎖,但是,MySQL的鎖和文件的鎖不是一個概念,MySQL的鎖是基於行級別上的,當用戶請求的是同一張表時,但是,不是同一行,就能同時進行操作,並不相互影響,這樣,也就處理大併發量的狀況。

MySQL中用戶存入數據的大概過程:

計劃執行器:爲用戶的請求生成執行計劃

分析器:分析用戶的sql語句是否能夠執行,做語法、詞法的分析,判斷命令的格式

操作求解器:做一次完整操作,選擇一種一種操作路徑

優化器:選擇最優的執行方式

事務管理器:

事務:把多個事務當做一個整體來操作,讀寫可以同時進行

鎖管理器:併發的控制工具

文件和存儲接口:存取和讀取文件時的接口

緩衝管理器:緩衝文件數據

磁盤空間管理器:與磁盤上的文件進行交互

 

恢復管理器:恢復數據

MariaDB:

與MySQL相比,新的特性

存儲引擎方面:

Aria:新一代的MyISAM,增強版,崩潰後能夠自己修復

XtraDB:替代InnoDB這個存儲引擎

FederatedX:跨平臺的存儲引擎

OQGRAPTH:圖庫,存儲圖示數據,5.5被禁用

SphinxSE:全文搜索引擎,構建出全文索引,並搜索

TokuDB:特別使用於存儲海量數據

Cassandra:非關係型數據庫,智能化的故障轉移,沒有中心節點,可以橫向擴展

Hadoop比Cassandra更優秀

MySQL的特性:

運行速度快,MySQL是完全多線程

MySQL支持查詢緩存,在衆多的關係型數據庫中較好

MySQL的可靠性好

MySQL支持橫向擴展,伸縮性好

MySQL簡單易用,對初學者沒有太高的門檻

MySQL具有較好的移植能力,支持多平臺,而且兼容

支持多用戶,

支持的字符集多,國際化

較好的應用支持,例如python,java,c等

是一款開源軟件

MySQL分爲企業版和社區版,社區版不提供任何服務

MySQL embedded server :MySQL的嵌入式服務器

MySQL服務器端組件剖析:

onnectors:MySQL的各種前端應用,包括native c API,JDBC,python ,php等

connection pool:連接池,把MySQL的各種連接請求發送到MySQL線程上進行處理

負責實現:

    用戶的認證

    線程回收重用

    連接限制

    內存檢查

    提供緩存

 

MySQL的核心組件:

connection pool:連接池,實現認證、線程重用、連接限制、內存檢查、緩存

SQL interface:SQL接口,提供DML和DDL語句,關係型數據庫的基本抽象

parser:分析器,實現查詢轉換,對象權限獲取,查詢翻譯SQL語句

optimizer:優化器,SQL的分析結束後,會生成訪問路徑,優化器會從衆根據MySQL的

此前的統計數據,來從中選擇一條的最優的,開銷最小的路徑

cache && buffer:緩存和緩衝,用於提升MySQL的I/O方面數據性能表現

 

插件式的存儲引擎:

MyISAM:

InnoDB:(XtraDB:二次發行版)

memory:

文件和日誌

 

管理服務類的工具箱 :admin tools

備份恢復接口

安全

複製

集羣

管理

配置

移植

元數據管理

  存儲引擎是表級別的概念,同一個庫中的表可以使用不同的存儲引擎,但是,建議使用相同的存儲引擎

由於MariaDB和MySQL的區別性不大,我們這裏採用MariaDB的安裝方式:

安裝MariaDB的方式如下:

1、rpm包安裝

  系統提供商提供的包

  MySQL官方提供的

2、通用二進制格式

3、源代碼編譯安裝


準備工作:
  首先,我們爲我們的數據庫提供一個單獨存放數據的空間,這裏,我們採用另一塊硬盤,且,硬盤採用邏輯卷的形式分區,然後掛載至/mysql目錄下
1、將額外的硬盤創建一個分區,且分區標識爲邏輯卷

    Command (m for help): t    Selected partition 1
    Hex code (type L to list codes): 8e
    Changed system type of partition 1 to 8e (Linux LVM)
    [root@localhost ~]# fdisk -l /dev/sdb
     Disk /dev/sdb: 21.5 GB, 21474836480 bytes    255 heads, 63 sectors/track, 2610 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x5f5ef245
 
       Device Boot    Start     End   Blocks   Id  System
    /dev/sdb1      1        2610    20964793+  8e  Linux LVM

2、將分區進行格式化,掛載到/mysql目錄下(要求開機自動掛載),要事先創建此目錄

    [root@localhost ~]# mkdir /mysql
    [root@localhost ~]# mke2fs -t ext4 -b 2048 -m 3 -L mysql /dev/sdb1

文件系統爲ext4,塊大小爲2048,預留空間百分比爲3%,卷標爲mysql

    [root@localhost ~]# vim /etc/fstab 
    LABEL=mysql       /mysql     ext4    defaults     0 0

以卷標的形式掛載

將fstab下的文件系統掛載

[root@localhost ~]# mount -a

 使用源代碼編譯MySQL

指定安裝文件的安裝路徑時,常用的選項

-DMAKE_INSTALL_PREFIX=/usr/local/mysql
-DMYSQL_DATADIR=/data/mysql
-DSYSCONFDIR=/etc

編譯時,默認編譯的存儲引擎有:csv、myisam、myisammrg和heap,指定其他引擎

,必須要手動指定

-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_FEDERATER_STORAGE_ENGINE=1

假設,上面默認的存儲引擎,不想用了,可以使用如下選項

-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1
-DWITHOUT_PARTITION_STORAGE_ENGINE=1

如果要編譯其他功能,要使用如下語句指定使用某庫或不使用某庫

-DWITH-READLINE=1
-DWITH-SSL=system #使用系統自帶的系統加密庫
-DWITH-ZLIB=system
-DWITH-LIBWRAP=0

其他常用選項

-DMYSQL_TCP_PORT=3306
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock
-DEABLED_LOCAL_INFILE=1 #啓用本地的infile功能
-DEXTRA_CHARSETS=all #額外使用的字符集
-DDEFAULT_CHARSET=utf8 #默認的字符集爲utf8
-DDEFAULT_COLLATION=utf8_general_ci #默認的排序規則
-DWITH_DEBUG=0 #不啓用debug的功能
-DENABLE_PROFILING=1 #啓用性能剖析功能

首先,我們要讓服務運行在一個普通用戶下面,創建mysql用戶

[root@localhost ~]# groupadd -r mysql
[root@localhost ~]# useradd -g mysql -r mysql
[root@localhost ~]# chown mysql:mysql /mysql/

將上面創建的分區的屬組改爲mysql用戶和組

開啓編譯安裝MariaDB數據庫

先編譯安裝cmake工具

[root@localhost src]# tar zxf cmake-3.0.1.tar.gz 
[root@localhost src]# cd cmake-3.0.1
[root@localhost cmake-3.0.1]# ./bootstrap
[root@localhost cmake-3.0.1]# make && make install

編譯安裝MariaDB數據庫

[root@localhost src]# tar zxf mariadb-10.0.12.tar.gz 
[root@localhost src]# cd mariadb-10.0.12
[root@localhost
 mariadb-10.0.12]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql 
-DMYSQL_DATADIR=/mysql/ -DSYSCONFDIR=/etc/ 
-DWITH-INNOBASE_STORAGE_ENGINE=1 -DWITH-ARCHIVE_STORAGE_ENGINE=1 
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL=system 
-DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock 
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
[root@localhost mariadb-10.0.12]# make -j 4

#如果CPU比較空閒時,建議使用多核心編譯,加快編譯速遞

[root@localhost mariadb-10.0.12]# make install

如果中間報錯,應該是由於ssl的開發包和zlib的開發包沒有安裝

[root@localhost ~]# yum install openssl-devel
[root@localhost ~]# yum install zlib-devel

如果想清理此前編譯所生成的文件,使用下面的使用命令

rm    CMAKECache.txt

爲MariaDB提供服務啓動腳本,並賦予執行權限:

[root@localhost mariadb-10.0.12]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@localhost mariadb-10.0.12]# chmod +x /etc/rc.d/init.d/mysqld

爲MariaDB提供配置文件,具體要看服務器的內存大小來選擇

[root@localhost mariadb-10.0.12]# cp support-files/my-large.cnf /etc/my.cnf

更改配置文件,將上面的邏輯分區作爲MariaDB數據的存放目錄

[root@localhost mariadb-10.0.12]# vim /etc/my.cnf
datadir = /mysql

初始化MariaDB數據庫

[root@localhost mysql]# ./scripts/mysql_install_db –user=mysql –datadir=/mysql/

爲MariaDB的命令都加入到PATH環境變量中去

[root@localhost ~]#vim /etc/profile.d/mysql.sh
export    PATH=/usr/local/mysql/bin:$PATH
[root@localhost ~]#source /etc/profile.d/mysql.sh    #重讀一下此文件

啓動MariaDB服務,並登錄

[root@localhost mysql]# service mysqld start
Starting MySQL.                                            [  OK  ]
[root@localhost mysql]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 10.0.12-MariaDB-log Source distribution
Copyright (c) 2000, 2014, Oracle, SkySQL Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>

到此,編代碼編譯MariaDB就成功了

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