您好,登錄后才能下訂單哦!
下文內容主要給大家帶來Mysql數據庫的編譯安裝及基礎教程,所講到的知識,與書籍略有不同,都是億速云專業技術人員在與用戶接觸過程中,總結出來的,具有一定的經驗分享價值,希望給廣大讀者帶來幫助。
一、為什么會有數據庫呢?
剛開始接觸數據庫的朋友們,都會問數據庫用來干啥的呢?字面表達的意思就是用來存儲數據的倉庫簡稱"數據庫",在日常生活中我們與數據庫相關的事務都是一大把一大把的,例如: 1.我們去做火車的時候需要實名認證,為什么安檢人員可以通過我們的×××就可以查詢我們的個人信息呢,因為們都是有戶口的群眾,在公安居民信息庫都錄入著我們的信息,而們的信息也是存儲在國家公民的信息庫里面的,這也是我們所說的數據庫,早期最傳統的數據庫就是文本文件,沒當查詢數據時都需要從頭到尾把整個文件都查詢一次,查詢和檢索的效率極其低下,隨著互聯網大數據的爆發,這種方式以及面臨淘汰,于是后來開發產生出各種各樣的數據管理程序,這就是數據庫的開端及新生。
文本數據庫管理數據的缺陷:
數據冗余、信息冗余產生及數據完整性:導致同一個數據有可能重復多次。
數據訪問緩慢麻煩。
數據孤立性:數據拆分很難再次建立關聯關系。
原子性問題:有效保證數據庫之間交互,能及時同步數據。
并發訪問:文件方式無法實現多并發訪問。
安全性問題:文件方式授權過于籠統,不能實現精細化授權(如:針對庫授權、針對表授權、針對用戶授權)
數據庫管理系統
為了更加精細的操作數據的存取,在應用程序和數據之間建立一個中間層,專門用來負載數據存取和管理,就產生了數據庫管理系統(DBMS)。
(DBMS)數據庫管理系統,包含前端API接口與前端應用程序交互,也包含shell命令行接口與程序員直接交互。同時負責完成數據存取。這時,前端程序將不再直接面對數據,而有數據庫管理系統代理完成更加精細管理工作。包括權限,以及如何按照比較高效的方式分配數據。
數據庫模型:
1)層次模型
2)網狀模型
3)關系模型:1975年又IBM研究院E.F.Coded提出并發表了最開始論述關系型數據庫的模型論文,有拉里.克瑞森和其程序員朋友將其實現,后來承接了美國軍方一個名叫oracle的項目創建了oracle公司
4)NoSQL:No only SQL , 很多產品,各有側重點。 由于海量數據是由分布式存貯, 所以需要CAP測試,NoSQL 產品通常只能滿足兩個。
CAP測試: Consistent Avilable Partition tolerence 一致性, 可用性,容錯性
目前市面上的開源數據庫:
1)sqliteMySQL
2)PostgreSQL(EnterpriseDB)
3)MariaDB
4)MySQL
關系型數據庫管理模型:
存儲的文件:
1)數據:保存的數據
2)索引:保存數據的索引文件
3)事物文件:操作事物文件
2.磁盤空間管理器: 用于管理磁盤上數據的存取,建立索引等工作
3.緩沖區管理器: 為了解決頻繁I/O的低效,一部分檢索結果會存在緩沖區中內存中,緩沖區管理器用于管理存于內存中
4.存取方法接口:管理數據的存取方法,于sql語句作用
5.事務管理器:當以個存取操作完成后,并不是直接寫入數據文件,而且寫入事物日志中,如果此時數據庫崩潰,數據庫存取數據將會存入事務日志中。寫入數據庫文件為隨機I/O,寫入日志文件為順序I/O 所以后者比較快。
事務:滿足ACID測試
A:原子性
C: 一致性
I:隔離性
D:持久性
6.鎖管理器:當某一數據在被用戶訪問時,它將不能再被其他用戶訪問,會被鎖管理器鎖住。
7.恢復管理器:存取操作寫入事務日志但沒寫入數據中時,數據庫崩潰,在第二次重新啟時候,事務日志中內容將通過恢復管理器寫入到數據文件中
8.SQL查詢引擎:
1). SQL Struct Query Language: 結構化查詢語言, 包含以下三類命令
(1) DCL: Data Control Language: 數據控制語言,主要是授予或取消某些訪問權限
GRANT/REVORK
(2) DDL: Data Definition Language:數據定義語言,建立表,創建索引
CTREAT/ALTER/DROP
(3) DML : Data Manipulation Language:數據操作語言
SELECT/INSERT/DELETE/UPDATE
2). SQL查詢引擎包含四個部分
(1) 分析器,進行SQL語言的語法分析
(2) 查詢計劃,對查詢對象路徑進行優化,有可能統一對象存在多條索引
(3) 優化器, 對于SQL語言查詢方式進行優化
(4) 求解器, 管理返回結果等
(5) 線程池, 當mysql云服務器接收多個并發請求時,分配線程響應多用戶
9.SQL命令行接口: SQL的客戶端程序,使用SQL命令查詢SQL服務器
10.應用程序命令API:不同編程語言有不同的SQL命令輸出接口,可以通過API驅動把SQL語句輸送給SQL服務器,本質上也是SQL客戶端
11.ODBC: 底層關系型數據庫查詢標準
12.SQL索語言的標準 ANSI: SQL-86, SQL-89, SQL-92, SQL-99, SQL-2003
13.事務隔離:
隔離級別:
讀未提交:read uncommitted
讀提交: read committed
可重讀:repeatable read
串行化: serializable
14.Mysql存儲引擎
MyISAM:無事務
非聚集
InnoDB:事務型
聚集索引
15.關系數據庫的約束:
主鍵
外鍵
惟一鍵
條件約束
非空約束
二、MySQL數據庫管理軟件安裝:
mysql程序來源: mysql.com
1)vendor 系統自帶的rpm包
2)MySQL官方rpm包:不建議使用,可能會打破依賴關系
3)通用二進制格式:建議
4)源碼編譯:建議
下面我們通過案例進入關系數據庫之MySQL生產實戰配置(編譯安裝):
操作系統:CentOS release 6.5(x64)
mysql版本:mysql-5.6.30
(1).安裝開發環境及開發包組:
# yum -y groupinstall "Development Tools" # yum -y groupinstall "Development Libraries" # yum -y install pcre-devel # yum -y install ncurses-devel # yum -y install openssl-devel
(2).安裝夸平臺編譯器cmake
# tar xf cmake-2.8.8.tar.gz # cd cmake-2.8.8 # ./configure # make && make install
(3).數據存儲目錄規劃準備:
規劃一個大小為:20G的邏輯卷,以便后期數據量擴展:
# fdisk /dev/sda # kpartx -l /dev/sda # kpartx -af /dev/sda # partx -a /dev/sda
創建邏輯分區管理:
# pvcreate /dev/sda3 # vgcreate myvg /dev/sda3 # lvcreate -L 10G -n mydata myvg
格式化掛載邏輯卷目錄:
# mke2fs -t ext4 /dev/myvg/mydata # mkdir /mydata #創建掛載目錄 # vim /etc/fstab #在最后加入此行 /dev/myvg/mydata /mydata ext4 defaults,acl 0 0 # mount -a # mkdir /mydata/data # groupadd -r -g 3306 mysql #創建mysql服務用戶組 # useradd -r -g 3306 -d /mydata/data/ -s /sbin/nologin mysql #創建mysql服務用戶 # chown mysql.mysql /mydata/data/
考慮生產環境數據安全,可使用ACL權限控制:
# setfacl -m u:mysql:rwx /mydata/data/ # getfacl /mydata/data/ getfacl: Removing leading '/' from absolute path names # file: mydata/data/ # owner: mysql # group: mysql user::rwx user:mysql:rwx group::r-x mask::rwx other::r-x
(4).編譯安裝mysql-5.5.33
編譯安裝之前我們需要設置主機名及主機名解析:
# hostname mysql.samlee.com # vim /etc/sysconfig/network HOSTNAME=mysql.samlee.com # vim/etc/hosts 172.16.100.7 mysql.samlee.com
編譯安裝:
# tar xf mysql-5.5.33.tar.gz # cd mysql-5.5.33 # cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ > -DMYSQL_DATADIR=/mydata/data \ > -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 # make && make install
(5).數據庫服務器初始化
# cd /usr/local/mysql/ # chown -R :mysql /usr/local/mysql/ #賦予目錄用戶組為mysql #運行./script/mysql_install_db 創建系統庫 # scripts/mysql_install_db --user=mysql --datadir=/mydata/data/ # cp support-files/my-large.cnf /etc/my.cnf #復制配置文件 # vim/etc/my.cnf #編輯配置文件 在[mysqld]下添加此項: datadir = /mydata/data # cp support-files/mysql.server /etc/init.d/mysqld #復制啟動腳本 # chkconfig --add mysqld #加入服務列表 # service mysqld start #啟動mysql服務
查詢初始化及啟動后創建的文件:
# ll /mydata/data/ total 28700 -rw-rw----. 1 mysql mysql 18874368 May 6 14:27 ibdata1 #inodb存儲引擎的表空間文件 -rw-rw----. 1 mysql mysql 5242880 May 6 14:27 ib_logfile0 #inodb事物日志 -rw-rw----. 1 mysql mysql 5242880 May 6 14:27 ib_logfile1 drwx------. 2 mysql root 4096 May 6 14:25 mysql -rw-rw----. 1 mysql mysql 107 May 6 14:27 mysql-bin.000001 #二進制日志 -rw-rw----. 1 mysql mysql 19 May 6 14:27 mysql-bin.index -rw-r-----. 1 mysql root 1777 May 6 14:27 mysql.samlee.com.err #錯誤信息記錄 -rw-rw----. 1 mysql mysql 6 May 6 14:27 mysql.samlee.com.pid #pid文件 drwx------. 2 mysql mysql 4096 May 6 14:25 performance_schema drwx------. 2 mysql root 4096 May 6 14:25 test
導出頭文件,庫文件和man文檔:
# ln -sv /usr/local/mysql/include/ /usr/include/mysql # vim /etc/ld.so.conf.d/mysql.conf 添加此行: /usr/local/mysql/lib/ # ldconfig # ldconfig -p | grep mysql # vim /etc/man.config 添加此行: MANPATH /usr/local/mysql/man # man mysqld
(6)配置PATH環境變量
# vim /etc/profile.d/mysql.sh export PATH=$PATH:/usr/local/mysql/bin # chmod +x /etc/profile.d/mysql.sh # . /etc/profile.d/mysql.sh
以上mysql編譯安裝過程。
三、MySQL配置文件my.cnf及MySQL命令的應用:
1).服務器配置文件和客戶端配置是集中式的配置屬于多個應用程序共用的配置文件,可以分為以下3個部分:
(1)[mysql]: mysql客戶端配置部分,只是用來配置mysql自己的客戶端 。
(2)[mysqld]: mysql客戶端服務器配置部分。
(3)[client]: mysql的所有客戶端,包括其他的客戶端。
使用配置文件的方式:
1、它依次查找每個需要查找的文件,結果是所有文件并集;
2、如果某參數在多個文件中出現多次,后讀取的最終生效;
2).查詢mysql服務變量方式有如下:
(1)顯示mysqld程序啟動時可用的選項,通常都是長選項
(2)顯示mysqld的配置文件中可用的服務變量
# /usr/local/mysql/bin/mysqld --help --verbose
進入mysql模式查詢:
mysql> SHOW GLOBAL VARIABLES mysql> SHOW SESSION VARIABLES
3).修改mysql管理員密碼刪除匿名用戶:
用戶帳號由兩部分組成:username@host
host還可以使用通配符:
%: 任意長度的任意字符
_: 匹配任意單個字符
(1)刪除所有匿名用戶
mysql> DROP USER ''@'localhost'; mysql> DROP USER ''@'mysql.samlee.com'; mysql> DROP USER 'root'@'::1';
(2)修改管理員密碼
第1種方式:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('redhat'); mysql> SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('redhat'); mysql> SET PASSWORD FOR 'root'@'mysql.samlee.com' = PASSWORD('redhat'); mysql> FLUSH PRIVILEGES;
第2種方式:
# mysqladmin -uroot -h372.16.100.7 password 'redhat' -p # mysqladmin -uroot -hlocalhost password 'redhat' -p # mysqladmin -uroot -hmysql.samlee.com password 'redhat' -p
第3種方式:
# mysql -uroot -hlocalhost -p mysql> use mysql; mysql> UPDATE user SET password = PASSWORD('redhat') WHERE user = 'root'; mysql> FLUSH PRIVILEGES;
4).連入MySQL服務器
連接過程如下:
mysql client <--mysql protocol--> mysqld
mysqld接收連接請求:
本地通信:客戶端與服務器端位于同一主機,而且還要基于127.0.0.1(localhost)地址或lo接口進行通信;
Linux OR Unix: Unix Sock, /tmp/mysql.sock, /var/lib/mysql/mysql.sock
Windows: memory, pipe
遠程通信:客戶端與服務器位于不同的主機,或在同一主機便使用非回環地址通信
TCP socket
客戶端工具:mysql, mysqladmin, mysqldump, mysqlcheck
[client]
通行的選項:
-u, --user=
-h, --host=
-p, --password=
--protocol={tcp|socket|memory|pipe}
--port=
--socket= 例如:/tmp/mysql.sock
mysql默認監聽的端口: 3306/tcp
演示如下:
# mysql -uroot -hlocalhost -p Enter password: # mysql -uroot -h327.0.0.1 -p --port=3306 --socket=/tmp/mysql.sock Enter password:
5).MySQL工作模式:
腳本模式:
# mysql -uUsername -hhostname -p < /path/to/mysql_script.sql
腳本演示如下:
mysql交互式模式:
客戶端命令
mysql> help
mysql> \?
\c:結束當前輸入執行
\g:按列顯示
\G:以行顯示
\q:退出mysql
\!
\s
\. /path/to/mysql_script.sql
服務器端命令:需要命令結束符,默認為分號(;)
mysql> help contents
mysql> help Keryword
mysql命令行選項:
--compress
--database=, -D
-H, --html:輸出結果為html格式的文檔
-X, --xml: 輸出格式為xml
--sate-updates: 拒絕使用無where子句的update或delete命令;
mysql命令提示符:
mysql> 等待輸入命令
->
'>
">
`>
/*> 注釋信息
mysql的快捷鍵:
Ctrl + w: 刪除光標之前的單詞
Ctrl + u: 刪除光標之前至命令行首的所有內容
Ctrl + y: 粘貼使用Ctrl+w或Ctrl+u刪除的內容
Ctrl + a: 移動光標至行首
Ctrl + e: 移動光標至行尾
mysqldmin工具:
mysqladmin [options] command [arg] [command [arg]] ...
command:
create DB_NAME
drop DB_NAME
debug: 打開調試日志并記錄于error log中;
status:顯示簡要狀態信息
--sleep #: 間隔時長
--count #: 顯示的批次
extended-status: 輸出mysqld的各狀態變量及其值,相當于執行“mysql> SHOW GLOBAL STATUS”
variables: 輸出mysqld的各服務器變量
flush-hosts: 清空主機相關的緩存:DNS解析緩存,此前因為連接錯誤次數過多而被拒絕訪問mysqld的主機列表
flush-logs: 日志滾動,二進制日志和中繼日志
refresh: 相當于同時使用flush-logs和flush-hosts
flush-privileges:
reload: 功能同flush-privileges
flush-status: 重置狀態變量的值
flush-tables: 關閉當前打開的表文件句柄
flush-threads:清空線程緩存
kill: 殺死指定的線程,可以一次殺死多個線程,以逗號分隔,但不能有多余空格
password: 修改當前用戶的密碼;
ping:
processlist:顯示mysql線程列表
shutdown: 關閉mysqld進程;
start-slave
stop-slave: 啟動/關閉從服務器線程
實例演示:
# mysqladmin -uroot -hmysql.samlee.com status --sleep 1 -p # mysqladmin -uroot -hmysql.samlee.com variables -p
GUI客戶端工具:
Navicat for mysql
Toad for mysql
mysql front
sqlyog
phpMyAdmin
對于以上關于Mysql數據庫的編譯安裝及基礎教程,如果大家還有更多需要了解的可以持續關注我們億速云的行業推新,如需獲取專業解答,可在官網聯系售前售后的,希望該文章可給大家帶來一定的知識更新。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。