mysql數據庫
章節內容
關係型數據庫基礎
安裝mysql yum包安裝,源碼包編譯安裝,二進制安裝。
管理數據庫和表
用戶和權限管理
函數和存儲過程
mysql架構
存儲引擎
服務器選項,系統和狀態變量 最主要的一項,共計1000多個變量選項
優化查詢和索引管理
鎖和事務管理 併發性人物的時候需要用到
日誌管理
備份還原
mysql集羣 多個mysql的集合
數據庫的特點
涉及的數據量大
數據不隨程序的結束而消失
數據被多個應用程序共享
大數據 分析大數據,得出具體的某個人或團體的需求/意向,針對不同的人,推送廣告或其他消息,從中獲得利益.
數據庫的發展史
萌芽階段:文件系統
使用磁盤文件來存儲數據(需要了解文件的格式才能讀取,過程麻煩)
文件管理系統的缺點
編寫應用程序不方便
數據冗餘不可避免
應用程序依賴性
不支持對文件的併發訪問 多個人同時訪問一個文件的時候,一個寫入,一個刪除,容易導致混亂
數據間聯繫弱
難以按用戶視圖表示數據
無安全控制功能
文件系統適合個人使用.
初級階段:第一代數據庫
出現了網狀模型、層次模型的數據庫
中級階段:第二代數據庫
關係型數據庫和結構化查詢語言
高級階段:新一代數據庫 “關係-對象”型數據庫
以上三種稱爲數據庫管理系統(dbms,由一種專門的軟件,來管理這些數據)
數據庫管理系統的優點
相互關聯的數據的集合
較少的數據冗餘
程序與數據相互獨立 數據與管理程序互相獨立,通過管理程序,打開以及管理保存在磁盤上的數據文件.
保證數據的安全、可靠 用戶不直接接觸數據庫文件,通關管理軟件來訪問,然後在管理軟件上設置權限,用來確保數據安全,不被更改. 最大限度地保證數據的正確性
數據可以併發使用並能同時保證一致性同時支持了多用戶同時訪問數據庫,什麼用戶看那一塊數據都可以通過配置來實現.
數據庫管理系統
數據的彙集,它以一定的組織形式存於存儲介質上(一個或多個文件的形式存儲起來) 或者像cle的數據管理系統,是以raw的形式,將數據存儲到裸文件系統上,類似於mbr的形式,數據以0101的形式存在,可以提高性能.
dbms是管理數據庫的系統軟件,它實現數據庫系統的各種功能。是數據庫系統的核心,可以用給一個管理系統,管理多個數據文件.
dba:負責數據庫的規劃、設計、協調、維護和管理等工作
應用程序指以數據庫爲基礎的應用程序
數據庫管理軟件類型的分類:
網狀數據庫:數據結構類似於蜘蛛網一樣,錯綜複雜.具有數據模式和日誌的特徵.最早通用電氣使用的,現在已被淘汰
層次數據庫:以樹型的結構來構建數據庫,關係支持一對多,代表公司ibm
數據庫管理系統的基本功能
數據定義 比如說存學生信息,學號,性別,姓名之類的數據,都需要先定義再存儲進去.
數據處理 對輸入的輸入,進行增刪改查操作.
數據安全 設置讀寫權限,保證數據不被增刪改查或被無關人員看到.
數據備份
數據庫系統的架構
單機架構
大型主機/終端架構
主從式架構(c/s)
分佈式架構
關係型數據庫sql,比如mysql (非關係數據庫叫 nosql 比如redis,
memcached,mongodb)
關係 :關係就是二維表。並滿足如下性質:表中的行、列次序並不重要(第幾行,第幾列並不重要)
行row:表中的每一行,又稱爲一條記錄
列column:表中的每一列,稱爲屬性,字段
主鍵(primary key):用於惟一確定一個記錄的字段,實現避免出現多條重複記錄的方式.主鍵可以作用在某個字段(列)上,但是這個字段(列)上不可以出現重複的項.設定主鍵的字段,必須有不可重複性,比如不能將性別設置爲主鍵,畢竟性別就兩種...除非這張數據表中就兩條記錄.在一個數據表中,主鍵最多只能有一個.
域domain:屬性的取值範圍,如,性別只能是‘男’和‘女’兩個值,每列的域的取值方式不用統一.
外鍵
兩個數據表a和b,b依賴與a,那麼數據表b上面的主鍵,就稱爲外鍵,b數據表上的主鍵取值範圍,不能超過a數據表上主鍵的範圍.
關係數據庫rdbms:
mysql: mysql, mariadb, percona server
postgresql: 簡稱爲pgsql,enterprisedb
oracle
mssql
db2
實體-聯繫模型e-r
實體entity
客觀存在並可以相互區分的客觀事物或抽象事件稱爲實體(比如剛纔說的學員信息,這就是實體,在數據庫中表現爲記錄,相當於表格的行)
在e-r圖中用矩形框表示實體,把實體名寫在框內
屬性
實體所具有的特徵或性質(相當於列)
聯繫:聯繫是數據之間的關聯集合,是客觀存在的應用語義鏈
實體內部的聯繫:指組成實體的各屬性之間的聯繫。如職工實體中,職工號和
部門經理號之間有一種關聯關係,如下圖:
實體之間的聯繫:指不同實體之間聯繫。也就是表與表之間的聯繫.
實體之間的聯繫用菱形框表示
表與表之間的聯繫的類型
一對一聯繫(1:1) 比如員工信息表,和員工考勤表.
一對多聯繫(1:n) 比如員工信息表和部門表,部門表有部門的標號,部門名稱,部門經理的編號等.一個部門裏麪包括了多個員工,即一(部門)對多(員工)
ps:一對多最好設置主鍵,和外鍵.即員工的id來源於部門的id號.避免出現一共10個部門,給來個11號部門的員工該編號.
多對多聯繫(m:n) 假設有兩個班級,一個學員可以報多個班級,而每個班級又有多名學員,這就是多(班級表)對多(學員表)的關係. 多對多關係,通常使用建立第三張表的方式來表達,當中需要使用兩張表的主鍵來構建,比如用班級表裏的id號,和學員的id號來生成第三張表. 如下圖:
事務transaction:多個操作被當作一個整體對待acid:
a :原子性 一個事務含有多個操作,要麼這些操作全部做完,要不都不做.如果操作做了一半沒做完,那麼在數據庫檢查的時候,發現有一個事務只做了一半,會把已經做的那一半給撤銷掉.以此來保證事務的完整性.事務只處理了一半,這時候的事務叫做髒數據,除了正在處理的人外,其他人不可見.
c :一致性 任何情況,數據在數據庫存放,都會保持一致.假設有兩個人,一方給另一方匯錢,只要一方賬戶錢減少了,另外一方必定會加上同等的錢數.
i :隔離性 在a個b倆人對同一個數據增刪改時,數據庫會判斷控制權交給哪一方(比如a),並在交過去之後給這個數據加鎖禁止別人訪問,等a處理完這個數據之後,再把鎖撤銷.這就是隔離性
d: 持久性 整個事務結束了,對數據的更改將永久的存在磁盤上.結束後的事務是無法撤銷的.
數據三要素
數據結構:包括兩類
一類是與數據類型、內容、性質有關的對象,比如關係模型中的域、屬性和
關係等;
另一類是與數據之間聯繫有關的對象,比如關係屬性的域.屬性之類.它從數據組織層表達數據記錄與字段的結構,比如如何存放這個數據,數據的類型,格式(整數,浮點數)之類.
數據的操作:(用的最多的是查詢)
數據提取:在數據集合中提取感興趣的內容。select
數據更新:變更數據庫中的數據。insert、delete、update
數據的約束條件 :是一組完整性規則的集合(用來確保數據的完整性)
實體(行)完整性 entity integrity 每一條(行)記錄都是唯一的,如何來確定唯一性呢? 用主鍵來確保.
域(列)完整性 domain integrity 每個域(列)的取值範圍都是合理的.
參考完整性referential integrity 表和表之間的關係,比如主外鍵表達的關係.
簡易數據規劃流程(設計數據庫)
第一階段:收集數據,得到字段
收集必要且完整的數據項
轉換成數據表的字段
第二階段:把字段分類,歸入表,建立表的關聯
關聯:表和表間的關係
分割數據表並建立關聯的優點
節省空間
減少輸入錯誤
方便數據修改
第三階段:規範化數據庫
數據庫的正規化分析
rdmbs設計範式基礎概念
設計關係數據庫時,遵從不同的規範要求,設計出合理的關係型數據庫,這些不
同的規範要求被稱爲不同範式,各種範式呈遞次規範,越高的範式數據庫冗餘越小(冗餘rongyu越小代表重複數據越少,佔用空間越少)
目前關係數據庫有六種範式:第一範式(1nf)、第二範式(2nf)、第三範式
(3nf)、巴德斯科範式(bcnf)、第四範式(4nf)和第五範式(5nf,又稱完美範式)。滿足最低要求的範式是第一範式(1nf)。在第一範式的基礎上進一步滿足更多規範要求的稱爲第二範式(2nf),其餘範式以次類推。一般說來,數據庫只需滿足第三範式(3nf)即可.456範式雖然效果好,但是數據複雜度變高了.
範式
1nf:無重複的列,每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。除去同類型的字段,就是無重複的列.ps:第一範式(1nf)是對關係模式的基本要求,不滿足第一範式(1nf)的數據庫就不是關係數據庫
2nf:屬性完全依賴於主鍵,第二範式必須先滿足第一範式,要求表中的每個行必須可以被唯一地區分。通常爲表加上一個列,以存儲各個實例的唯一標識
pk,非pk的字段需要與整個pk有直接相關性
ps:主鍵可以設置爲複合主鍵。複合主鍵是由多個字段組成,其中複合主鍵的單獨字段拿出去可以有重複項目,但合在一起就不能重複,如下圖:
解決方式就是將城市和區號單獨列出來,如下圖:
3nf:屬性不依賴於其它非主屬性,滿足第三範式必須先滿足第二範式。第三範式要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息,非pk 的字段間不能有從屬關係
同樣解決方式是將城市和區號單獨列出來建表,最終結果如下:
這樣在第一個表中,城市就不用再詳細的寫出名字了,只寫出第二個表中對應的的id號即可。
總結:在2nf和3nf當中,不符合的都需要再單獨建立一張表纔可以成立,雖然實現了範式要求。也節約了空間(避免了多次輸入城市名稱)。但是帶來了負面影響,比如查員工城市的時候,需要查看兩張表,邏輯量增加了,效率也降低了。
sql概念
sql: structure query language 結構化查詢語言
sql解釋器:
數據存儲協議:應用層協議,基於c/s結構
s:server, 監聽於套接字(mysql使用的端口號是3306tcp端口號),接收並處理客戶端的應用請求
c:client,通過網絡連接數據庫服務器。
客戶端程序接口 (命令行工具) cli和gui
應用編程接口(api)用戶通過軟件和網絡連接到數據庫,軟件調用數據庫的接口來與數據庫相連(user—app—network—mysql—dbfile)常用軟件如下:
odbc:open database connectivity 以及 jdbc:java data base connectivity
mysql的接口 dbo,擴展接口 mysqli
約束:constraint,表中的數據要遵守的限制
主鍵:一個或多個字段的組合,填入的數據必須能在本表中唯一標識本行;
必須提供數據,即not null,一個表只能有一個,主鍵不能爲空
惟一鍵(uk):一個或多個字段的組合,填入的數據必須能在本表中唯一標識本行; 允許爲null,一個表可以存在多個,用來確保數據在本表中是唯一的。
外鍵:一個表中的某字段可填入的數據取決於另一個表的主鍵或唯一鍵已有的數據
檢查:字段值在一定範圍內
基本概念
索引:將表中的一個或多個字段中的數據複製一份另存,並且此些需要按特定次序排序存儲。快速查找到某頁(比如一本書本的目錄,就相當於索引)索引適合與修改少,查詢多的場景。因爲索引建立起來後,一旦改變其中的一項,就會破壞其他數據的排序。(比如索引號1---10,中間插入數字就會導致數字後面的索引號發生變化)
關係運算:(對錶的操作)
選擇:挑選出符合條件的行
投影:挑選出需要的字段 (挑一部分列出來)
連接:表間字段的關聯(主外鍵)
數據模型
數據抽象:
物理層:數據存儲格式,即rdbms(關係型數據庫管理系統)在磁盤上如何組織文件。每一種數據庫用來存儲的格式都不相同.生產環境中,按照需求,將常用的數據放在性能高的磁盤上,以提高服務器性能。
邏輯層:dba角度,描述存儲什麼數據,以及數據間存在什麼樣的關係(主外鍵,有沒有索引之類)
視圖層:用戶角度,描述db(數據庫)中的部分數據(有一些隱私性的數據不想被一般用戶看到,比如淘寶上的進貨價,就不會讓用戶看到。)
關係模型的分類:
關係模型
基於對象的關係模型
半結構化的關係模型:xml數據 擴展的標籤語言
mysql和mariadb
官方網址:
https://www.mysql.com/
http://mariadb.org/
官方文檔
https://dev.mysql.com/doc/
https://mariadb.com/kb/en/
版本演變:
mysql:5.1 --> 5.5 --> 5.6 --> 5.7 -->8.0
mariadb:5.5 -->10.0--> 10.1 --> 10.2 --> 10.3
mysql的特性
插件式存儲引擎:也稱爲“表類型”,存儲管理器有多種實現版本,功能和特性可能均略有差別;用戶可根據需要靈活選擇,mysql5.5.5開始innodb引擎是mysql默認引擎
myisam ==> aria (mysql5.5.5之前使用的引擎)
innodb ==> xtradb(mysql5.5.5之後使用的引擎)
單進程,多線程,如下圖
可以看出 1613是進程,負責接收,1615…16..是線程,負責處理.
諸多擴展和新特性
提供了較多測試組件
開源
安裝mysql
mariadb安裝方式:(生產環境多用源代碼或二進制安裝的形式)
1、源代碼:編譯安裝
2、二進制格式的程序包:展開至特定路徑,並經過簡單配置後即可使用(二進制安裝等同於windows的免安裝(綠色)版,已經將軟件從源代碼編譯成2進制了,只需改一改配置文件後就能使用,比如配置下軟件的存放位置以及生成文件的存放位置之列。)
3、程序包管理器管理的程序包
centos安裝光盤
項目官方: https://downloads.mariadb.org/mariadb/repositories/
yum源(國外官方的),複製並配置好文件後,執行命令 # yum install –y mariadb-server 即可自動安裝。
國內yum源https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/10.2/centos7-amd64
rpm包安裝mysql
rpm包安裝 安裝完後使用 systemctl start mariadb 來啓動mysql的默認端口號(3306)
默認的數據庫位置,裏面粉色的mysql.sock是負責進程間通信來使用的(同一臺主機,進程之間通信來使用的)
直接輸入mysql就可以連接
使用命令 # show databases;可以顯示當前有多少個數據庫,剛裝好就有四個
切換數據庫中的表:use + 指定的表名
ps:登入mysql後,使用服務器端命令必須使用分號;作爲結束符,比如show databases; 使用客戶端命令則沒有要求,直接輸入就可,比如 use test
在mysql提示符中,使用help可以查看相關幫助命令
# help contents 可以查看服務器端可以執行的各種操作。
創建新的數據表 # create database +表單名字
# create database db1
刪除新的數據表 # drop database +表單名字
# drop database db1
mariadb-server 服務器包
mariadb 客戶端工具包centos 6
提高安全性 跑一下 mysql_secure_installation腳本即可解決下列問題
設置完是否給root設置面,刪除匿名用戶後。直接mysql就登錄不上去了,使用命令 # mysql –u用戶名 –p 回車後輸入密碼後才能登錄。
1 設置數據庫管理員root口令 # select user();可以查看管理數據庫用戶:
2 禁止root遠程登錄
3 刪除anonymous(匿名)用戶帳號 ,匿名賬號的表單放在名字爲mysql的數據庫當中,進入mysql(進入mysql數據庫後,使用 use mysql;)數據庫後,使用命令 # show tables;可以查看mysql數據庫當中的數據,
因爲user表中的列太多,直接使用命令# select * from user會顯示的亂七八糟,可以先用desc user來查看下user表中的列數。
共計46列,直接查看無法實現,指定列名來查看
# select host,user,password from user;
4 刪除test數據庫
mariadb程序
客戶端程序:
mysql: 交互式的cli工具
mysqldump:備份工具,基於mysql協議向mysqld發起查詢請求,並將查得的所 有數據轉換成insert等寫操作語句保存文本文件中(生產環境必用工具)
mysqladmin:基於mysql協議管理mysqld
mysqlimport:數據導入工具,可以將列整齊的文本文件導入到數據庫中。
myisam存儲引擎的管理工具:(基本被淘汰)
myisamchk:檢查myisam庫
myisampack:打包myisam表,只讀
服務器端程序
mysqld_safe
mysqld------------# ps –ef 進程樹中可見
mysqld_multi:多實例(程序可以多開,每個程序佔一個進程,而每個進程都可視爲一個實例),mysql的多實例是通過修改配置文件,將其端口號修改爲不同的端口號來實現的。這是從邏輯上將兩個mysql視爲不同的軟件。
示例:mysqld_multi --example
####################################################################實現多實例(以三個爲準)
1 首先查詢下rpm -q MariaDB-server,確認沒有安裝MariaDB-server
2 創建文件夾mkdir -pv /mysqldb/{3306,3307,3308}/{etc,bin,data,pid,socket,log}
3 安裝mariadb-server
# yum install -y mariadb-server
4 更改所屬人和所屬組 # chown -R mysql.mysql /mysqldb/
5 創建數據庫文件,執行如下命令:
# mysql_install_db --datadir=/mysqldb/3306/data --user=mysql
# mysql_install_db --datadir=/mysqldb/3307/data --user=mysql
# mysql_install_db --datadir=/mysqldb/3308/data --user=mysql
成功後顯示如下圖:
6 指定各自的的配置文件
# cp /etc/my.cnf /mysqldb/3306/etc/
# 編輯 vim /mysqldb/3306/etc/my.cnf文件,並做如下修改
7 將這個作爲模板,複製到3307和3308的目錄當中,然後將配置文件中的3306分別改爲3307 3308
# cp /mysqldb/3306/etc/my.cnf /mysqldb/3307/etc/
# cp /mysqldb/3306/etc/my.cnf /mysqldb/3308/etc/
將mysqld文件複製到/mysqldb/3306/bin/目錄下,並做如下更改
加上執行權限,嘗試運行一遍
# chmod +x /mysqldb/3306/bin/mysqld
# /mysqldb/3306/bin/mysqld start
啓動成功如下圖:
同樣將這個複製到3307.3308對應目錄下,並將其中的3306改爲3307,3308,並分別啓動.
9 但是直接連接會失敗,因爲軟件默認的sock地址與設置的不同,要連上需要手動指定sock
# mysql -S /mysqldb/3306/socket/mysql.sock
# 這樣才能連接上
PS:在啓動狀態下,可以給mysql的root用戶加口令
# mysqladmin -S /mysqldb/3308/socket/mysql.sock password 'centos'
# 將端口號爲3308的mysql的root用戶密碼設置爲centos
在關閉服務的時候會使用到這個命令
也可以在配置文件mysqld文件中,將密碼直接寫入,省的每次都輸密碼:
這樣就不必每次都輸密碼了
####################################################################
二進制安裝環境下,實現多實例
1創建文件夾mkdir -pv /mysqldb/{3306,3307,3308}/{etc,bin,data,pid,socket,log}
2 進去mysql文件目錄,執行如下命令
# scripts/mysql_install_db --datadir=/mysqldb/3306/data --user=mysql
# scripts/mysql_install_db --datadir=/mysqldb/3307/data --user=mysql
# scripts/mysql_install_db --datadir=/mysqldb/3308/data --user=mysql
3 準備配置文件
# cp /etc/my.cnf /mysqldb/3306/etc/
# cp /etc/my.cnf /mysqldb/3307/etc/
# cp /etc/my.cnf /mysqldb/3308/etc/
修改爲:(PS 一定要互相對應,如下圖的3306對應目錄的3306)
4 準備啓動服務腳本(同樣修改的時候注意端口號要與目錄文件互相對應)
# cp /etc/my.cnf /mysqldb/3306/etc/
# cp /etc/my.cnf /mysqldb/3307/etc/
# cp /etc/my.cnf /mysqldb/3308/etc/
5 在/mysqldb/3306/bin/下用命令設置3306,3307,3308的密碼
# mysqladmin -S /mysqldb/3306/socket/mysql.sock password 'centos'
# mysqladmin -S /mysqldb/3307/socket/mysql.sock password 'centos'
# mysqladmin -S /mysqldb/3308/socket/mysql.sock password 'centos'
6 關閉再開啓,驗證下
實驗完成
####################################################################
用戶賬號
mysql用戶賬號由兩部分組成: 'username'@'host‘
說明:
host限制此用戶可通過哪些遠程主機連接mysql服務器支持使用通配符:
% 匹配任意長度的任意字符,類似於shell中的*
172.16.0.0/255.255.0.0 或 172.16.%.%
172.16.%。%可理解爲,允許指定用戶從172.16這個網段中來連接這個服務器。
PS:設置好網段後,不能從本機上連接數據庫,可以使用如下格式來實現:
# mysql -uroot -pcentos -h172.16.0.1
# -u指定用戶,-p指定密碼,-h+IP,指明從那個網段過來
_ 匹配任意單個字符,類似於shell中的?
通過二進制格式安裝mysql
(1) 準備數據目錄 ,建議使用邏輯卷
邏輯卷的建立
邏輯卷,卷組,物理卷之間的關係
LVM (邏輯卷管理器),將一個或多個硬盤的分區在邏輯上集合,相當於一個大硬盤來使用,當硬盤的空間不夠使用的時候,可以繼續將其它的硬盤的分區加入其中,這樣可以實現磁盤空間的動態管理,相對於普通的磁盤分區有很大的靈活性。與傳統的磁盤與分區相比,LVM爲計算機提供了更高層次的磁盤存儲。它使系統管理員可以更方便的爲應用與用戶分配存儲空間。在LVM管理下的存儲卷可以按需要隨時改變大小與移除(可能需對文件系統工具進行升級)。
PV (物理卷)就是指硬盤分區或從邏輯上與磁盤分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,卻包含有與LVM相關的管理參數。
vg(卷組):LVM卷組類似於非LVM系統中的物理硬盤,其由物理卷組成。可以在卷組上創建一個或多個“LVM分區”(邏輯卷),LVM卷組由一個或多個物理卷組成
lv(邏輯卷):LVM的邏輯卷類似於非LVM系統中的硬盤分區,在邏輯卷之上可以建立文件系統(比如xfs等等)。
可以這樣理解他們之間的關係:現在有這麼幾個人每個人有一個蘋果,但是有的人想吃1.4個蘋果,有的人想吃0.8個蘋果,有的還想吃0.6個不等 那麼做麼樣才能滿足這樣的需求呢,這樣 :把蘋果攪拌成蘋果泥。然後再給人分配蘋果泥,這樣就可以滿足此條件了;這個例子中蘋果相當於物理磁盤,然後必須把它攪拌成泥(泥就相當於物理卷PV),只有把泥一起放在泥罐(相當於卷組)才能進一步重新分給所需的人,重新分配的過程就是把卷組重新分成lv(邏輯卷)也就是/home /usr /var 等等。只有先把蘋果能成泥,才能進一步重新分給人,也就是隻有先把物理磁盤轉化成pv(物理卷) ,然後才能加入到卷組,然後才能重新分成lv(邏輯卷),這樣就能做到動態管理,也就是說,存儲空間不足時 ,可以再加物理磁盤,轉化成物理卷,再加入到卷組,再分給空間不足的邏輯卷,
1 查看分區 lsblk /dev/sda
2 建立分區 fdisk /dev/sda 具體過程如下圖:
然後開始設置爲lvm(邏輯卷)
這個時候只是設置完畢,並沒有生效.使用w保存的時候,也會提示
最後來查看下新加的分區
接下來將物理硬盤分區初始化爲物理卷,以便LVM使用.
# pvcreate /dev/sda6
指定一個物理卷組的名稱,使用之後可以用vgdisplay來列出來一點.
# vgcreate vg0 /dev/sda6
在使用lvcreate創建LVM的邏輯卷.
# lvcreate -n mysql -l +100%FREE vg0
接下來就是創建文件系統了,文件系統只能創建在邏輯捲上
# mkfs.xfs /dev/vg0/mysql
然後將創建的邏輯卷掛載並寫入到/etc/fstab當中
這時就可以看到邏輯卷已經可以使用了.
(2) 準備用戶
# useradd -r -s /sbin/nologin -d /app/mysql -m mysql
# -r 創建系統該用戶,-s指定使用的shell語言,-d指定家目錄位置,-m強制創建家目錄,因爲系統用戶不會自動創建家目錄
創建的家目錄是用來存放用戶數據庫的 數據內容來使用的,類似於默認安裝的/var/lib/mysql
(3) 準備二進制程序
# tar xvf mariadb-10.2.16-linux-x86_64.tar.gz -C /usr/local
指定解壓縮的位置,也就是二進制程序的位置.不能隨意更改目錄/usr/local,因爲編譯好後的二進制文件,conf(配置)文件已經跑完了,指定了安裝路徑.指定別處會出錯.
# cd /usr/local
# ln -sv mariadb-version mysql
解壓縮完後的文件名,不符合要求,所以創建一個名字符合的軟鏈接(這樣就相當於跑在/usr/local/mysql下了,創建軟鏈接的也方便之後換版本號了,只需重新指定一下源文件的位置) ln -s 創建軟鏈接,-d 創建硬鏈接
# chown -R root.mysql /usr/local/mysql/
將軟鏈接的所有者和所屬組分別改爲 root和mysql
# vim /etc/profile.d/mysql.sh 加入如下內容
PATH=/usr/local/mysql/bin:$PATH
因爲二進制程序經常使用,而默認的$PATH變量中沒有這個地址,需手動加上
(4)創建數據庫文件
# cd /usr/local/mysql/ 進入到mysql目錄當中
# scripts/mysql_install_db --datadir=/app/mysql --user=mysql
跑一遍這個腳本,用來生成mysql數據庫所需要的文件.比如默認安裝時候,系統自帶的用戶,test mysql等數據庫文件. --datadir=/app/mysql --user=mysql
當中, --datadir=/app/mysql用來指明生成文件的位置, --user=mysql指明用戶
(5) 準備配置文件
# cp mysql/support-files/my-large.cnf /etc/my.cnf
將解壓縮後的support-files/my-large.cnf文件複製到/etc/my.cnf當中,作爲配置文件.
打開這個文件,在[mysqld]下添加選項:
datadir = /app/mysql------------指定數據庫文件的存儲路徑.
(6)準備服務腳本,並啓動服務,centso7裏面雖然使用systemctl來管理服務,但也支持之前的服務啓動方式.所以在/usr/local/mysql目錄下:
# cp support-files/mysql.server /etc/init.d/mysqld
複製指定腳本到指定目錄當中去.
# chkconfig --add mysqld
將mysql增加所指定的系統服務,讓chkconfig指令得以管理它,並同時在系統啓動的敘述文件內增加相關數據
# service mysqld start 以centos6的方式來啓動mysql服務
(7)安全初始化
# /usr/local/mysql/bin/mysql_secure_installation
# 跑一遍mysql_secure_installation腳本,繼續增加root密碼啊,刪除匿名賬號之類的操作.
源碼編譯安裝mariadb
需要安裝如下包
yum install bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel gcc gcc-c++ cmake ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel
做準備用戶和數據目錄
1 mkdir /data
2 useradd -r -d /data/mysql/ -s /sbin/nologin mysql
創建一個系統用戶mysql,家目錄爲/data/mysql 使用的shell爲/sbin/nologin
3 chown mysql.mysql /data/mysql
將/data/mysql目錄的所屬人和所屬組改爲mysql
4 tar xvf mariadb-10.2.15.tar.gz 解壓縮mariadb-10.2.15.tar.gz
cmake 編譯安裝:
cmake的重要特性之一是其獨立於源碼(out-of-source)的編譯功能,即編譯工作可以在 另一個指定的目錄中而非源碼目錄中進行,這可以保證源碼目錄不受任何一次編譯的影響,因此在同一個源碼樹上可以進行多次不同的編譯,如針對於不同平臺編譯
編譯選項:
https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html
源碼編譯安裝mariadb
1 cd mariadb-10.2.15/ 進入到解封后的目錄中,並複製運行如下紫色代碼:
cmake . \
-DCMAKE_INSTALL_PREFIX=/app/mysql \
-DMYSQL_DATADIR=/data/mysqldb/ \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/app/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
2 make && make install
提示:如果出錯,執行rm -f cmakecache.txt
準備環境變量
# echo path=/app/mysql/bin:$path > /etc/profile.d/mysql.sh
# ./etc/profile.d/mysql.sh 執行腳本
生成數據庫文件cd /app/mysqldb/
# scripts/mysql_install_db --datadir=/data/mysqldb/ --user=mysql
# chown mysql.mysql /data/mysqldb 修改目錄的所屬者和所屬組
確認:ll /date/mysqldb/
準備配置文件
# cp /app/mysql/support-files/my-huge.cnf /etc/my.cnf
# 默認有就覆蓋。然後編輯並添加如下內容:
# chown -R mysql.mysql /app/mysql/
# 莫忘了改權限
準備啓動腳本
# cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld
準備啓動服務
# chkconfig --list 看下當前啓動服務中有無mysqld,沒有就執行下面命令
# chkconfig --add mysqld ; service mysqld start
# chkconfig –list 執行完看下結果:
安全配置
在/app/mysql/bin目錄下,執行 # mysql_secure_installation
日常設置下root用戶口令,刪除匿名賬戶等操作。
諾,沒有了匿名賬戶,且root用戶有了密碼
關係型數據庫的常見組件
數據庫:database
表:table
行:row
列:column
索引:index
視圖:view
用戶:user
權限:privilege
存儲過程:procedure,無返回值
存儲函數:function,有返回值
觸發器:trigger
事件調度器:event scheduler,任務計劃
sql語言規範
在數據庫系統中,sql語句不區分大小寫(建議用大寫)
sql語句可單行或多行書寫,以“;”結尾
關鍵詞不能跨多行或簡寫
用空格和縮進來提高語句的可讀性
子句通常位於獨立行,便於編輯,提高可讀性
關於註釋:
sql標準:
/*註釋內容*/ 多行註釋
-- 註釋內容 單行註釋,注意有空格
mysql註釋: #
數據庫的組件(對象):
數據庫、表、索引、視圖、用戶、存儲過程、函數、觸發器、事件調度器等的命名規則:
必須以字母開頭
可包括數字和三個特殊字符(# _ $)
不要使用mysql的保留字
同一database數據庫(schema模式)下的對象不能同名
sql語句分類:
ddl: data defination language 數據定義語言
create(創建),drop(刪除),alter(更改)
dml: data manipulation language 數據操縱語言
insert(插入),delete(刪除),update(更新),select(挑選)
dcl:data control language 數據控制語言
grant(授權),revoke(撤銷),commit(提交),rollback(回滾)
dql:data query language 數據查詢語言 select(挑選)
sql語句構成:
keyword(關鍵字)組成clause(子句),多條clause(子句)組成語句
示例:
select * select子句
from products from子句
where price>400 where子句
說明:一組sql語句,由三個子句構成,select,from和where是關鍵字
數據庫操作
創建數據庫:
# create database|schema [if not exists] 'db_name';
# character set 'character set name' collate 'collate name'
刪除數據庫
# drop database|schema [if exists] 'db_name';
查看支持所有字符集:show character set;
查看支持所有排序規則:show collation;
獲取命令使用幫助:mysql> help keyword;
查看數據庫列表:mysql> show databases;