您好,登錄后才能下訂單哦!
目錄:
(一)MariaDB的基本管理
(1.1)數(shù)據(jù)庫管理系統(tǒng)
(1.2)數(shù)據(jù)表信息維護(hù)--增刪改
(1.3)數(shù)據(jù)表信息維護(hù)--查
(二)MariaDB的用戶管理
(2.1)對(duì)root用戶進(jìn)行管理
(2.2)對(duì)普通用戶管理
(三)備份及恢復(fù)策略
MariaDB數(shù)據(jù)庫管理系統(tǒng)是MySQL的一個(gè)分支,主要由開源社區(qū)在維護(hù),采用GPL授權(quán)許可MariaDB的目的是完全兼容MySQL的,包括API和命令行,使之能輕松稱為MySQL的代替品。MySQL數(shù)據(jù)庫項(xiàng)目自從被Oracle公司收購(gòu)之后,從開源軟件轉(zhuǎn)變成了“閉源”軟件,這導(dǎo)致IT行業(yè)中很多企業(yè)以及廠商紛紛選擇使用了數(shù)據(jù)庫軟件后起之秀--MariaDB數(shù)據(jù)庫管理系統(tǒng),MariaDB數(shù)據(jù)庫管理系統(tǒng)也因此快速占據(jù)了市場(chǎng)。
(一)MariaDB的基本管理
(1.1)數(shù)據(jù)庫管理系統(tǒng)
(1.1.1)數(shù)據(jù)庫是指按照某些特定結(jié)構(gòu)來存儲(chǔ)數(shù)據(jù)資料的數(shù)據(jù)倉庫,在當(dāng)今這個(gè)大數(shù)據(jù)技術(shù)迅速崛起的時(shí)代,互聯(lián)網(wǎng)上每天都會(huì)生成海量的數(shù)據(jù)信息,數(shù)據(jù)庫技術(shù)也從最初只能存儲(chǔ)簡(jiǎn)單的表格數(shù)據(jù)的單一集中存儲(chǔ)模式,發(fā)展到了現(xiàn)如今存儲(chǔ)海量數(shù)據(jù)的大型分布式模式。在信息化社會(huì)中,能夠充分有效的管理和利用各種數(shù)據(jù),挖掘其中的價(jià)值,是進(jìn)行科學(xué)研究與決策管理的重要前提。同時(shí),數(shù)據(jù)庫技術(shù)也是管理信息系統(tǒng)、辦公自動(dòng)化系統(tǒng)、決策支持系統(tǒng)等各類信息系統(tǒng)的核心組成部分,是進(jìn)行科學(xué)研究和決策管理的重要技術(shù)手段。數(shù)據(jù)庫管理系統(tǒng)是一種能夠?qū)?shù)據(jù)庫中存放的數(shù)據(jù)進(jìn)行建立、修改、刪除、查找、維護(hù)等操作的軟件程序。它通過吧計(jì)算機(jī)中具體的物理數(shù)據(jù)轉(zhuǎn)換成適合用戶理解的抽象邏輯數(shù)據(jù),有效的降低數(shù)據(jù)庫管理的技術(shù)門檻,因此即便是從事Linux運(yùn)維工作的工程師也可以對(duì)數(shù)據(jù)庫進(jìn)行基本的管理操作。
(1.1.2)說到數(shù)據(jù)庫,我們就需要了解數(shù)據(jù)庫的基本概念。第一個(gè)是“庫”,庫實(shí)際上就是一個(gè)文件夾,這個(gè)文件夾是單層的,里面不會(huì)再有子文件夾的,在數(shù)據(jù)庫中會(huì)存在很多張表,例如公司管理系統(tǒng)的數(shù)據(jù)庫里可能會(huì)有員工表、財(cái)務(wù)表、客戶表等,每張表都是由行與列組成的二維數(shù)據(jù)表。同時(shí)還可以有多個(gè)數(shù)據(jù)庫,一般情況下,我們會(huì)為一個(gè)應(yīng)用創(chuàng)建一個(gè)庫,例如公司里有博客系統(tǒng)、論壇系統(tǒng),此時(shí)就可以使用對(duì)應(yīng)的兩個(gè)獨(dú)立數(shù)據(jù)庫。如果作為管理員在數(shù)據(jù)庫中進(jìn)行切換的時(shí)候,使用的是“use 庫名”的方式在數(shù)據(jù)庫之間進(jìn)行切換。如果我們要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)表,首先需要定義表的結(jié)構(gòu),例如員工表我們需要在每一列定義員工ID號(hào)、姓名、年齡、性別、籍貫等信息,然后在每一行插入具體的員工的信息。其中每一列稱為“columu”或者“字段”,每一行稱為“row”或者“記錄”。
(1.1.3)接下來我們?cè)趘ms001主機(jī)安裝mariadb數(shù)據(jù)庫的服務(wù)器端,在vms002主機(jī)安裝mariadb數(shù)據(jù)庫的客戶端
# yum install mariadb-server mariadb -y---在vms001主機(jī)進(jìn)行安裝,其中mariadb表示的服務(wù)器端,mariadb-server表示的是客戶端
# yum install mariadb-server -y---在vms002主機(jī)安裝數(shù)據(jù)庫的客戶端工具
(1.1.4)我們發(fā)現(xiàn)/var/lib/mysql/此目錄在mariadb服務(wù)啟動(dòng)之前是沒有數(shù)據(jù)的,啟動(dòng)之后系統(tǒng)便會(huì)自動(dòng)的產(chǎn)生相關(guān)的數(shù)據(jù),因?yàn)閙ariadb默認(rèn)的數(shù)據(jù)都是放在/var/lib/mysql目錄中的(圖1-4)。當(dāng)我們使用mariadb的時(shí)候,有時(shí)候會(huì)因?yàn)榫幋a的問題而導(dǎo)致數(shù)據(jù)顯示異常,此時(shí)我們?cè)?etc/my.cnf配置文件中設(shè)置字符編碼為utf8,這樣可以解決我們顯示信息出現(xiàn)亂碼的問題。
# vim /etc/my.cnf---編輯mariadb數(shù)據(jù)庫的配置文件
(1.1.5)我們修改完/etc/my.cnf配置文件后,將服務(wù)重啟一下,此時(shí)在/var/lib/mysql目錄下會(huì)重新產(chǎn)生新的文件。我們登錄mariadb數(shù)據(jù)庫后可以使用“select database();”查詢當(dāng)前自己登錄后屬于哪一個(gè)數(shù)據(jù)庫,在執(zhí)行命令的時(shí)候,是要以分號(hào)結(jié)束的,同時(shí)如果當(dāng)前命令的首部如果加上了“#”或者“--”則代表的是注釋行的意思,在尾部加上“\c”表示的是不執(zhí)行當(dāng)前的命令。
\> select database();---查詢當(dāng)前自己登錄后屬于哪一個(gè)數(shù)據(jù)庫
(1.1.6)當(dāng)我們執(zhí)行一些系統(tǒng)語句的時(shí)候就不需要再加分號(hào)的,例如執(zhí)行查詢數(shù)據(jù)庫狀態(tài)的命令status(圖1-8),如果需要查詢當(dāng)前登錄數(shù)據(jù)庫所使用的用戶則可以使用“select user();”,查詢當(dāng)前系統(tǒng)中所有的數(shù)據(jù)庫可以使用“show databases;”(圖1-9)
\> status---查詢數(shù)據(jù)庫狀態(tài)
\> select user();---查詢當(dāng)前登錄數(shù)據(jù)庫所使用的用戶
\> show databases;---查詢當(dāng)前系統(tǒng)中所有的數(shù)據(jù)庫
(1.1.7)我們可以自己創(chuàng)建一個(gè)數(shù)據(jù)庫aa,并查詢創(chuàng)建的數(shù)據(jù)庫設(shè)置的各種屬性(圖1-10),也可以通過“alter database”的命令進(jìn)行字符編碼的修改等操作(圖1-11)。
\> create database aa;---創(chuàng)建一個(gè)數(shù)據(jù)庫
\> show create database aa;---查詢創(chuàng)建數(shù)據(jù)庫時(shí)設(shè)置的屬性值
\> show create database aa\G---以格式化的方式查詢創(chuàng)建數(shù)據(jù)庫時(shí)設(shè)置的屬性值
\> alter database aa character set gbk;---修改數(shù)據(jù)庫的字符編碼為GBK類型(方法一)
\> alter database aa charset utf8;---修改數(shù)據(jù)庫的字符編碼為utf8類型(方法二)
(1.1.8)此時(shí)我們發(fā)現(xiàn)剛剛創(chuàng)建的數(shù)據(jù)庫aa已經(jīng)創(chuàng)建成功了,同時(shí)我們也可以使用drop命令將aa數(shù)據(jù)庫刪除(圖1-12),接著我們登錄aa數(shù)據(jù)庫,并查詢數(shù)據(jù)庫中數(shù)據(jù)表的信息(圖1-13)。
\> show databases;---查詢當(dāng)前所有數(shù)據(jù)庫的信息
\> drop database aa;---將aa數(shù)據(jù)庫刪除掉
\> use aa;---使用aa數(shù)據(jù)庫,切換到aa數(shù)據(jù)庫
\> show tables;---顯示當(dāng)前數(shù)據(jù)庫中所有數(shù)據(jù)表的信息
(1.1.9)接著我們?cè)赼a數(shù)據(jù)庫中創(chuàng)建一個(gè)數(shù)據(jù)表aa,定義id、name、city三個(gè)字段,當(dāng)然我們也可以使用drop命令可以刪除數(shù)據(jù)庫aa中的數(shù)據(jù)表aa(圖1-14)。如果想將創(chuàng)建的數(shù)據(jù)表aa重命名為bb,則可以使用“rename tables”(圖1-15)。
\> create table aa (id int,name char(10),city char(10));---創(chuàng)建一個(gè)數(shù)據(jù)表aa
\> drop table aa;---刪除數(shù)據(jù)表aa
\> rename tables aa to bb;---將數(shù)據(jù)表aa重命名為bb
(1.1.10)如果我們想查看數(shù)據(jù)表的屬性信息,則可以使用“show create table”命令(圖1-16),我們還可以對(duì)數(shù)據(jù)表的字符屬性信息進(jìn)行修改,使用“character”,使用的方式和修改數(shù)據(jù)庫的屬性信息的方式一致(圖1-17),如果我們想知道數(shù)據(jù)表的結(jié)構(gòu)信息,則可以使用“describe”命令查詢(圖1-18)。
\> show create table aa;---查詢數(shù)據(jù)表的屬性信息
\> alter table aa character set gbk;---修改數(shù)據(jù)表aa的字符屬性信息為GBK(方法一)
\> alter table aa charset=utf8;---修改數(shù)據(jù)表aa的字符屬性信息為utf8(方法二)
\> describe aa;---查詢數(shù)據(jù)表的結(jié)構(gòu)信息
\> desc aa;---查詢數(shù)據(jù)表的結(jié)構(gòu)信息
(1.1.11)如果我們想給aa數(shù)據(jù)表添加一列字段“addr”,則可以通過“alter table”命令操作,給aa數(shù)據(jù)表添加一個(gè)addr的字段,并且設(shè)置為varchar類型(圖1-19),同時(shí)我們也是可以使用“drop”命令將aa數(shù)據(jù)表中的相關(guān)字段刪除的(圖1-20)。
\> alter table aa add addr varchar(20);---給aa數(shù)據(jù)表添加一列字段“addr”且設(shè)置類型為varchar
\> alter table aa drop addr;---將aa數(shù)據(jù)表中的字段addr刪除
(1.1.12)由于我們?cè)跀?shù)據(jù)表中添加一列字段的時(shí)候系統(tǒng)默認(rèn)是在最后一列添加的,我們現(xiàn)在的需求是將添加的一列字段放在指定的位置,我們指定“first”關(guān)鍵字,此時(shí)我們發(fā)現(xiàn)添加的addr已經(jīng)在數(shù)據(jù)表aa的第一列了(圖1-21),通過關(guān)鍵字after,我們指定addr字段緊跟在name字段的后面(圖1-22),如果我們對(duì)定義的字段的屬性不滿意,希望修改字段的屬性值的時(shí)候,我們可以使用“modify”關(guān)鍵字,修改后我們看到addr字段的屬性已經(jīng)修改為varchar(30)了(圖1-23);當(dāng)然我們也可以使用“change addr”對(duì)字段的屬性值進(jìn)行修改(圖1-24),其中我們也是可以對(duì)字段名進(jìn)行修改的(圖1-25)。
\> alter table aa add addr varchar(20) first;---我們將添加的字段addr放在第一列
\> alter table aa add addr varchar(20) after name;---我們指定addr字段在name字段后
\> alter table aa modify addr varchar(30);---將addr字段的屬性修改為varchar(30)類型(方法一)
\> alter table aa change addr addr varchar(20);---將addr字段的屬性修改為varchar(20)類型(方法二)
\> alter table aa change addr addrxxx varchar(20);
(1.1.13)如果我們需要將創(chuàng)建的數(shù)據(jù)表aa刪除,則可以使用drop table命令,并且數(shù)據(jù)表之間使用“,”逗號(hào)進(jìn)行分隔。
\> drop table aa,bb;---使用逗號(hào)隔開,將創(chuàng)建的aa和bb數(shù)據(jù)表都刪除
(1.2)數(shù)據(jù)表信息維護(hù)--增刪改
(1.2.1)我們上面所使用的create(創(chuàng)建)、drop(銷毀)、alter(插入)等命令都是對(duì)數(shù)據(jù)表的結(jié)構(gòu)進(jìn)行創(chuàng)建、修改和刪除,因此我們將其稱之為DDL(Data Definition Language)數(shù)據(jù)庫模式定義語言,這些操作都是針對(duì)整個(gè)數(shù)據(jù)表的屬性結(jié)構(gòu)的,并沒有對(duì)數(shù)據(jù)表中特定的字段進(jìn)行增刪改查。同時(shí)對(duì)于數(shù)據(jù)表我們可以做的操作主要有insert(插入)、delete(刪除)、update(修改)等操作,這些命令主要是對(duì)數(shù)據(jù)表中的字段進(jìn)行增刪改查,因此我們將其稱之為DML(Data Manipulation Language)數(shù)據(jù)操作語言,這些操作都不會(huì)對(duì)數(shù)據(jù)表的結(jié)構(gòu)產(chǎn)生任何的改變。
(1.2.2)我們可以使用“insert into”向數(shù)據(jù)表中插入數(shù)據(jù)(圖1-27至圖1-29)。
\> select * from aa;---查詢aa數(shù)據(jù)表中的所有數(shù)據(jù)
\> insert into aa (id,name) values (1,'tom');---向數(shù)據(jù)表aa中創(chuàng)建一行數(shù)據(jù),其中id為1,name為tom(方法一)
\> insert into aa (id) values (1);---我們向數(shù)據(jù)表中只插入一個(gè)id值(方法二)
\> insert into aa values (2,'bob');---(方法三)
(1.2.3)如果我們希望創(chuàng)建一張和aa數(shù)據(jù)表相同的數(shù)據(jù)表,則可以使用like關(guān)鍵字(圖1-30)。如果我們希望將aa數(shù)據(jù)表中的數(shù)據(jù)能夠提取出來插入到bb數(shù)據(jù)表中,則我們可以使用圖1-31的方式。當(dāng)然我們也可以將創(chuàng)建新的數(shù)據(jù)表和復(fù)制原數(shù)據(jù)表的信息至新數(shù)據(jù)表的操作整合成一條語句(圖1-32)。
\> create table bb like aa;---創(chuàng)建一個(gè)新的數(shù)據(jù)表bb,其中bb的結(jié)構(gòu)和aa的結(jié)構(gòu)一致
\> insert into bb select * from aa;---復(fù)制aa數(shù)據(jù)表中的數(shù)據(jù)插入到bb數(shù)據(jù)表中
\> create table cc select * from aa;---創(chuàng)建一個(gè)數(shù)據(jù)表cc并將aa數(shù)據(jù)表的信息復(fù)制到數(shù)據(jù)表cc中
(1.2.4)如果我們需要往一張數(shù)據(jù)表插入多條數(shù)據(jù),則可以使用insert關(guān)鍵字,且使用逗號(hào)作為分隔符。
\> insert into cc values (4,'tom4'),(5,'tom5'),(6,'tom6');---插入三條數(shù)據(jù),使用逗號(hào)作為分隔符,可以同時(shí)插入多條數(shù)據(jù)
(1.2.5)如果我們希望刪除數(shù)據(jù)表中指定的某一行數(shù)據(jù),則可以使用delete關(guān)鍵字,并設(shè)定指定字段的具體值(圖1-34和圖1-35)。如果我們需要清除數(shù)據(jù)表中所有的數(shù)據(jù),則可以使用truncate命令(圖1-36)。
\> delete from bb where name='marry';---刪除名字列為marry的記錄
\> delete from bb where name is null;---將數(shù)據(jù)表中所有的空行全部刪除
(1.2.6)接著我們來看一下更新數(shù)據(jù)表中的數(shù)據(jù),我們可以使用update命令。
\> update bb set id=11 where name is null;---將name值為空的記錄行的id修改為11
\> update bb set name='tom1' where id=11;---將id為11的記錄行name值修改為tom1
(1.3)數(shù)據(jù)表信息維護(hù)--查
(1.3.1)接下來我們使用select語句做日常的查詢操作。其中數(shù)據(jù)查詢的語言成為DQL(Data QueryLanguage?)數(shù)據(jù)庫查詢語言。
\> select name,id from bb;---指定具體的列名進(jìn)行查詢,列名可以不分順序(圖1-38)
\> select * from bb;---查詢所有列的信息(圖1-38)
\> select * from bb where id=1;---查詢id字段的值為1的所有數(shù)據(jù)(圖1-39)
\> select * from bb where id>=5;---查詢id字段的值大于等于5的所有數(shù)據(jù)(圖1-39)
\> select * from bb where id<=5;---查詢id字段的值小于等于5的所有數(shù)據(jù)(圖1-39)
\> select * from bb where id>=5 and id<=11;---查詢id字段大于等于5并且id字段小于等于11的所有數(shù)據(jù)(圖1-40)
\> select * from bb where id<=3 or id>=6;---查詢id字段小于等于3或者id大于等于6的所有數(shù)據(jù)(圖1-40)
\> select * from bb where id between 5 and 11;---查詢id字段大于等于5并且id字段小于等于11的所有數(shù)據(jù)(圖1-41)
\> select * from bb where id in(1,3,6);---(方法一)查詢id包含在1,3,6中的記錄數(shù)據(jù)(圖1-42)
\> select * from bb where id=1 or id=3 or id=6;---(方法二)查詢id包含在1,3,6中的記錄數(shù)據(jù)(圖1-42)
(1.3.2)接著我們來了解mariadb數(shù)據(jù)庫中通配符和正則表達(dá)式的相關(guān)信息,其中“_”表示的是單個(gè)任意字符,“%”表示的是任意長(zhǎng)度任意字符。如果我們需要查詢tom字符后跟兩個(gè)字符的所有記錄,則可以使用兩個(gè)“_”表示(圖1-43),如果我們需要查詢tom字符后跟一個(gè)“_”然后再跟一個(gè)任意字符時(shí),則可以使用“\”轉(zhuǎn)義符進(jìn)行處理(圖1-44)。
\> select * from bb where name like "tom__";---表示的是將tom后跟的兩個(gè)字符的所有行全部查詢出來(圖1-43)
\> select * from bb where name like "tom\__";---表示查詢tom字符后跟一個(gè)“_”然后再跟一個(gè)任意字符(圖1-44)
(1.3.3)有時(shí)候我們需要修改mariadb數(shù)據(jù)庫中的配置文件/etc/my.cnf,此時(shí)我們就需要使用“show variables;”來查詢數(shù)據(jù)庫的相關(guān)參數(shù)信息,例如我們需要查詢和innodb相關(guān)的參數(shù)的所有信息,則可以使用“%”參數(shù)來處理(圖1-45)。我們需要查詢tom字符后跟任意個(gè)數(shù)任意字符的所有符合條件的記錄,也可以使用“tom%”(圖1-46),如果我們要查詢包含字符編碼的信息“char、ac、set、server”的所有記錄,則可以使用“%char%ac%set%server%”通配符的方式進(jìn)行查詢(圖1-47)。此時(shí)我們便可以將查詢的信息填入到/etc/my.cnf配置文件中,已查詢的字符編碼信息“character_set_server”為例,寫入到配置文件后需要修改為“character-set-server”這樣的格式。
\> show variables like "%innodb%";---查詢和innodb相關(guān)的參數(shù)的所有信息(圖1-45)
\> select * from bb where name like "tom%";---查詢tom字符后跟任意個(gè)數(shù)任意字符的所有符合條件的記錄(圖1-46)
\> show variables like "%innodb%data%";---查詢包含“innodb%data”字符的所有記錄(圖1-47)
\> show variables like "%char%ac%set%server%";---查詢包含字符編碼的信息(圖1-47)
(1.3.4)如果我們希望在mariadb數(shù)據(jù)庫中使用正則表達(dá)式進(jìn)行查詢,則應(yīng)該使用regexp關(guān)鍵字指明使用正則表達(dá)式。
\> select * from bb where name regexp "tom..";---使用正則表達(dá)式查詢tom后跟兩個(gè)其他任意字符
(1.3.5)接著我們了解下一個(gè)知識(shí)點(diǎn)“多表查詢”,我們創(chuàng)建數(shù)據(jù)表aa和bb并插入相關(guān)的數(shù)據(jù)(圖1-49),我們需要查詢用戶lisi的工資,則可以使用多表子查詢的方式(圖1-50)。
\> drop table aa,bb,cc;---刪除當(dāng)前所有的數(shù)據(jù)表
\> create table aa(id int,name varchar(10));---創(chuàng)建一個(gè)aa表示員工表
\> create table bb(id int,sale int);---創(chuàng)建一個(gè)bb表示工資表
\> insert into aa values (1,'tom'),(2,'bob'),(3,'marry'),(4,'lisi'),(5,'wangw');---在aa數(shù)據(jù)表中插入5條員工信息
\> insert into bb values(1,1000),(2,3000),(3,2500),(4,4000),(5,1500);---在bb數(shù)據(jù)表中插入五條工資信息
\> select * from bb where id=(select id from aa where name='lisi');---查詢用戶lisi的工資(圖1-50)
(1.3.6)我們嘗試將aa表和bb表合并成一張大表來進(jìn)行查詢,我們通過使用表連接join的方式來進(jìn)行合成大表,但是由于直接使用join的方式連接兩張大表會(huì)有笛卡爾積產(chǎn)生很多沒有意義的組合數(shù)據(jù),所以我們還需要將無意義的組合清除掉(圖1-52),同時(shí)清除笛卡爾積的方式還可以使用using關(guān)鍵字。
\> select aa.name, bb.sale from aa join bb where aa.id =bb.id and aa.name='lisi';---查詢用戶lisi的工資
\> select * from aa join bb using(id) where name='lisi';---查詢用戶lisi的工資
(二)MariaDB的用戶管理
(2.1)對(duì)root用戶進(jìn)行管理
(2.1.1)如果登錄mariadb數(shù)據(jù)庫的時(shí)候我們希望通過指定用戶登錄,則此時(shí)我們應(yīng)該要對(duì)用戶進(jìn)行管理。我們使用“select user();”查詢當(dāng)前使用的登錄用戶信息(圖1-54)。如果我們需要查詢當(dāng)前數(shù)據(jù)庫中的所有賬戶密碼信息,則應(yīng)該在系統(tǒng)內(nèi)置的數(shù)據(jù)表mysql.user中進(jìn)行查詢,其中第一列表示mariadb的用戶名,第二列表示允許登錄該用戶的主機(jī)地址信息,第三列表示帳戶的密碼信息,一般在登錄數(shù)據(jù)庫時(shí),我們應(yīng)該使用“user@host”的格式登錄(圖1-55)。我們可以通過兩種方式對(duì)登錄數(shù)據(jù)庫的用戶設(shè)置密碼信息(圖1-56至圖1-58)。
\> select user();---查詢當(dāng)前使用的登錄用戶信息(圖1-54)
\> desc mysql.user;---查詢mysql.user內(nèi)置數(shù)據(jù)表的結(jié)構(gòu)信息(圖1-54)
\> select user,host,password from mysql.user;---查詢mysql.user數(shù)據(jù)表中關(guān)于用戶的信息(圖1-55)
# mysqladmin -uroot -p password 'redhat'---(第一種)在命令行中設(shè)置mariadb數(shù)據(jù)庫中root用戶的密碼,其中“-p”表示prompt提示,注意:Enter password處直接回車即可(圖1-56)
\> select md5('redhat');---使用MD5的方式進(jìn)行加密(圖1-57)
\> select encrypt('redhat');---使用encrypt的方式進(jìn)行加密(圖1-57)
\> select password('redhat');---使用password的方式進(jìn)行加密(圖1-57)
\> set password=password('redhat');---(第二種)默認(rèn)是給root用戶設(shè)置密碼(圖1-58)
\> set password for root@localhost=password('redhat');---指定對(duì)當(dāng)前主機(jī)的root用戶設(shè)置密碼(圖1-58)
(2.1.2)如果我們?cè)O(shè)置的密碼信息需要進(jìn)行修改,此時(shí)我們可以使用update命令進(jìn)行數(shù)據(jù)庫密碼的修改,由于修改完成后是修改了硬盤里的密碼,并沒有同步到當(dāng)前登錄的緩存中,所以我們應(yīng)該要使用flush命令刷新一下數(shù)據(jù)庫的緩存,就可以使用修改后的密碼登錄數(shù)據(jù)庫系統(tǒng)了。
\> update mysql.user set password=password('123123') where user='root' and host='localhost';---修改當(dāng)前root用戶的密碼為123123
\> flush privileges;---刷新硬盤中修改的密碼信息到當(dāng)前的緩存中
(2.1.3)登錄安全模式方式一:如果我們忘記了登錄mariadb數(shù)據(jù)庫的密碼,此時(shí)我們可以使用登錄安全模式的方式登錄系統(tǒng),我們先將mariadb服務(wù)停止,然后編輯/etc/my.cnf配置文件,我們?cè)?etc/my.cnf配置文件中添加一行信息(圖2-2),使得登錄數(shù)據(jù)庫的時(shí)候可以跳過密碼驗(yàn)證,然后再對(duì)數(shù)據(jù)庫中用戶的賬戶密碼進(jìn)行修改(圖2-3),并將緩存刷新,服務(wù)重啟,此時(shí)我們便可以使用新設(shè)置的密碼登錄數(shù)據(jù)庫系統(tǒng)了(圖2-5)。
# systemctl stop mariadb---將mariadb數(shù)據(jù)庫服務(wù)停止
# vim /etc/my.cnf---編輯my.cnf的配置文件
# systemctl restart mariadb---將mariadb數(shù)據(jù)庫服務(wù)重新啟動(dòng)
(2.1.4)登錄安全模式方式二:以上是通過修改配置文件的方式進(jìn)行密碼重置的,我們也可以使用第二種方式修改用戶密碼。我們首先將mariadb服務(wù)停止,然后使用“# mysqld_safe --skip-grant-tables”命令(圖2-6),此時(shí)我們打開另一個(gè)終端使用mysql就可以實(shí)現(xiàn)無密碼登錄系統(tǒng)并進(jìn)行相關(guān)的修改密碼的操作了,但是我們還是需要執(zhí)行killall命令將相關(guān)的前臺(tái)程序終止(圖2-7)。
# mysqld_safe --skip-grant-tables---使得數(shù)據(jù)庫可以進(jìn)入安全模式
# killall -9 mysqld_safe---將運(yùn)行的mysqld程序殺死
(2.2)對(duì)普通用戶管理
(2.2.1)接著我們來看一下對(duì)普通用戶做管理,我們創(chuàng)建一個(gè)tom用戶,此時(shí)創(chuàng)建的用戶是可以在任何的主機(jī)上登錄的(圖2-8),并且給創(chuàng)建的tom用戶設(shè)置好對(duì)應(yīng)的密碼(圖2-9),并將防火墻設(shè)置允許通過mysql(圖2-10)。
報(bào)錯(cuò)信息:ERROR 1290 (HY000): The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement
\> show grants for tom;---查詢tom用戶擁有哪些權(quán)限(圖2-9)
\> set password for tom@'%'=password('redhat');---給tom用戶設(shè)置密碼redhat(圖2-9)
# firewall-cmd --add-service=mysql---設(shè)置防火墻允許通過mysql(圖2-10)
# firewall-cmd --add-service=mysql --permanent---將設(shè)置寫入持久態(tài)(圖2-10)
(2.2.2)接著我們從vms002主機(jī)上使用創(chuàng)建的tom用戶嘗試登錄vms001主機(jī)的mariadb數(shù)據(jù)庫,發(fā)現(xiàn)vms002主機(jī)可以正常的登錄數(shù)據(jù)庫,但是沒有顯示aa數(shù)據(jù)庫,因此沒有查詢所創(chuàng)建的aa數(shù)據(jù)庫的權(quán)限(圖2-11)。因此我們?cè)趧?chuàng)建tom用戶的時(shí)候需要指明能夠登錄的主機(jī)(圖2-12),我們?cè)趧h除tom用戶的時(shí)候也是需要將主機(jī)名寫清楚的。(圖2-13)
# mysql -utom -predhat -hvms001---在vms002主機(jī)上嘗試使用tom用戶登錄vms001主機(jī)的mariadb數(shù)據(jù)庫(圖2-11)
\> show databases;---查詢當(dāng)前用戶可以查詢的所有數(shù)據(jù)庫信息(圖2-11)
\> drop user tom;---刪除創(chuàng)建的tom用戶(圖2-12)
\> drop user tom@'localhost';---刪除tom用戶的時(shí)候也是需要將主機(jī)名寫清楚的
(2.2.3)以上創(chuàng)建用戶的方式一般我們不建議使用,一般來說使用grant命令來創(chuàng)建用戶效果會(huì)更好(圖2-14)。我們創(chuàng)建一個(gè)tom用戶,允許在vms002主機(jī)上登錄,且允許使用所有數(shù)據(jù)表的權(quán)限(圖2-16),此時(shí)我們發(fā)現(xiàn)vms002主機(jī)使用tom賬戶便可以正常的登錄vms001主機(jī)了(圖2-17),但是我們發(fā)現(xiàn)此時(shí)在vms002主機(jī)上登錄的tom用戶除了有select查詢系統(tǒng)的相關(guān)權(quán)限,沒有其他任何刪除、修改、插入數(shù)據(jù)的權(quán)限(圖2-18)。
\> grant select on aa.* to tom@'192.168.26.102' identified by 'redhat';---創(chuàng)建一個(gè)tom用戶,允許在vms002主機(jī)上登錄,且允許查詢所有數(shù)據(jù)表的權(quán)限
# mysql -utom -predhat -hvms001---在vms002主機(jī)上嘗試使用tom用戶登錄vms001主機(jī)的mariadb數(shù)據(jù)庫
\> show grants for tom@192.168.26.102;---查詢tom用戶所有數(shù)據(jù)表的使用權(quán)限
(2.2.4)接著我們?cè)趘ms001主機(jī)上嘗試為tom用戶在vms002主機(jī)上授權(quán)使用insert的權(quán)限(圖2-19),此時(shí)我們發(fā)現(xiàn)在vms002主機(jī)上已經(jīng)可以使用tom用戶正常的插入新的數(shù)據(jù)了(圖2-20)。
\> grant insert on aa.* to tom@'192.168.26.102';---為tom用戶在vms002主機(jī)上授權(quán)使用insert的權(quán)限
\> show grants for tom@'192.168.26.102';---查詢tom用戶所有數(shù)據(jù)表的使用權(quán)限
\> insert into aa values(1,'tomxxx');---向aa數(shù)據(jù)表插入一條數(shù)據(jù)
(2.2.5)接著我們?yōu)閠om用戶設(shè)置擁有使用create、drop的權(quán)限,然后我們將tom用戶drop權(quán)限收回,我們使用revoke命令,此時(shí)我們發(fā)現(xiàn)tom用戶便沒有了drop權(quán)限。
\> grant create,drop on aa.* to tom@'192.168.26.102';---為tom用戶設(shè)置擁有使用create、drop的權(quán)限
\> revoke drop on aa.* from tom@'192.168.26.102';---回收tom用戶所擁有的drop權(quán)限
(2.2.6)如果我們希望設(shè)置root用戶在192.168.26.0網(wǎng)段中都可以登錄且使用所有的權(quán)限,則我們可以使用“all privileges”,并且使用“192.168.26.%”表示網(wǎng)段進(jìn)行設(shè)置。此時(shí)我們使用192.168.26.0網(wǎng)段中的任意IP地址的主機(jī)都可以登錄到vms001主機(jī)mariadb數(shù)據(jù)庫的root用戶中使用所有數(shù)據(jù)庫權(quán)限。
\> drop user tom@'192.168.26.102';
\> grant all privileges on *.* to root@'192.168.26.%' identified by 'redhat';---設(shè)置root用戶在192.168.26.0網(wǎng)段中都可以登錄且使用所有的權(quán)限
\> select user,host,password from mysql.user;
(三)備份及恢復(fù)策略
(3.1)因?yàn)閿?shù)據(jù)庫中保存了企業(yè)的很多重要經(jīng)營(yíng)數(shù)據(jù),所以數(shù)據(jù)庫的備份和恢復(fù)是非常重要的,有時(shí)候在人為的操作中難免會(huì)發(fā)生各種突發(fā)的情況,造成數(shù)據(jù)的破壞和丟失,如果我們無法對(duì)數(shù)據(jù)進(jìn)行恢復(fù)的話,將是后果非常嚴(yán)重的事情,所以此時(shí)我們對(duì)數(shù)據(jù)進(jìn)行定時(shí)定量的備份是非常重要的操作規(guī)范。
(3.2)一般我們的備份包含兩類:第一種是冷備份,也稱脫機(jī)備份,在備份的時(shí)候必須要把數(shù)據(jù)庫關(guān)閉,然后把/var/lib/mysql里的所有數(shù)據(jù)拷貝至其他物理設(shè)備中,例如將LVM掛載到/var/lib/mysql進(jìn)行備份。第二種是熱備份,也稱聯(lián)機(jī)備份,也就是在備份的時(shí)候不需要關(guān)閉數(shù)據(jù)庫而在線操作。
(3.3)mariadb自身是沒有增量備份的,如果要實(shí)現(xiàn)增量備份的話,就需要使用第三方的工具,Mysqlimport是用來導(dǎo)入文件的,ibbackup屬于商業(yè)工具,innodb屬于官方的工具,Xtrabackup只能備份innodb,其中XtraBackup的下載網(wǎng)址為:http://www.percona.com/downloads/XtraBackup/ ,我們主要是使用mysqldump工具。
(3.4)有時(shí)候我們?yōu)榱四軌驁?zhí)行腳本,需要做到不登錄數(shù)據(jù)庫并將所需的數(shù)據(jù)獲取出來,此時(shí)我們可以使用“-e”參數(shù),這樣以后我們便可以將命令寫入到腳本中自動(dòng)化執(zhí)行,獲取相應(yīng)的數(shù)據(jù),從而提高工作效率。
# mysql -uroot -predhat -e 'show databases;'
# mysql -uroot -predhat -e 'use aa;show tables;'
# mysql -uroot -predhat -e 'use aa;select * from aa;'
(3.5)對(duì)數(shù)據(jù)表進(jìn)行備份---tables
(3.5.1)接著我們來使用mysqldump做備份,我們首先創(chuàng)建一個(gè)/bak目錄,然后將aa數(shù)據(jù)庫的aa數(shù)據(jù)表導(dǎo)入到/bak目錄下的a.sql文件中(圖3-3),我們查看a.sql文件發(fā)現(xiàn)其中都是重新創(chuàng)建數(shù)據(jù)表、插入各項(xiàng)數(shù)據(jù)信息的各種語句,其中非注釋行“DROP TABLE IF EXISTS `aa`;”表示的是刪除aa數(shù)據(jù)表,關(guān)鍵字“IF EXISTS”表示如果aa存在則刪除,如果不存在就不用管,這樣我們就備份好了aa數(shù)據(jù)表了。
# mysqldump -uroot -predhat aa aa > /bak/a.sql---創(chuàng)建一個(gè)/bak目錄,然后將aa數(shù)據(jù)庫的aa數(shù)據(jù)表導(dǎo)入到/bak目錄下的a.sql文件中
(3.5.2)由于我們備份的是一個(gè)數(shù)據(jù)表,但是在備份的a.sql文件中并沒有指明是在哪個(gè)數(shù)據(jù)庫中操作的,我們將aa數(shù)據(jù)表刪除后進(jìn)行數(shù)據(jù)表恢復(fù)的操作時(shí),需要先進(jìn)入到對(duì)應(yīng)的數(shù)據(jù)庫,然后再進(jìn)行執(zhí)行恢復(fù)腳本的操作(圖3-6和圖3-7)。我們也是可以對(duì)多張數(shù)據(jù)表進(jìn)行備份的,例如將aa數(shù)據(jù)庫中的aa和bb數(shù)據(jù)表進(jìn)行備份,寫入到ab.sql文件中(圖3-8和圖3-9),在aa數(shù)據(jù)庫中執(zhí)行/bak/ab.sql恢復(fù)腳本,此時(shí)我們發(fā)現(xiàn)aa和bb數(shù)據(jù)表便已經(jīng)恢復(fù)正常了(圖3-10和圖3-11)。
# mysql -uroot -predhat---登錄數(shù)據(jù)庫
\> source /bak/a.sql;---進(jìn)入到aa數(shù)據(jù)庫后指明恢復(fù)/bak目錄下的a.sql腳本
# mysqldump -uroot -predhat aa aa bb > /bak/ab.sql---同時(shí)備份aa數(shù)據(jù)庫中的aa表和bb表
\> drop table aa,bb;---將aa數(shù)據(jù)庫中的aa表和bb表刪除
\> source /bak/ab.sql---執(zhí)行恢復(fù)aa和bb數(shù)據(jù)表的腳本
(3.5.3)有時(shí)候我們的一個(gè)數(shù)據(jù)庫中有很多張表,我們想備份這個(gè)庫中所有的數(shù)據(jù)表,而不是單獨(dú)指定某些張表,我們直接寫庫名即可,而不用寫表名(圖3-12)。然后我們使用備份的腳本all.sql進(jìn)行數(shù)據(jù)表的恢復(fù)(圖3-13),我們發(fā)現(xiàn)數(shù)據(jù)表aa和數(shù)據(jù)表bb都已經(jīng)恢復(fù)正常了(圖3-14)。
# mysqldump -uroot -predhat aa > /bak/all.sql---將aa數(shù)據(jù)庫中的所有表全部進(jìn)行備份
(3.6)對(duì)數(shù)據(jù)庫進(jìn)行備份---databases
(3.6.1)如果現(xiàn)在我們希望對(duì)一個(gè)數(shù)據(jù)庫進(jìn)行備份,則我們應(yīng)該使用“-B”參數(shù)指明是對(duì)aa數(shù)據(jù)庫進(jìn)行備份(圖3-15),此時(shí)我們發(fā)現(xiàn)在備份的腳本中產(chǎn)生了創(chuàng)建數(shù)據(jù)庫的語句,這是和之前進(jìn)行數(shù)據(jù)表備份的不同之處(圖3-16)。
# mysqldump -uroot -predhat -B aa > /bak/dball.sql---使用“-B”參數(shù)指明是對(duì)aa數(shù)據(jù)庫進(jìn)行備份
(3.6.2)此時(shí)我們可以將數(shù)據(jù)庫刪除掉,然后使用備份的dball.sql文件進(jìn)行數(shù)據(jù)庫的恢復(fù)(圖3-17),此時(shí)我們發(fā)現(xiàn)aa數(shù)據(jù)庫已經(jīng)恢復(fù)了,并且數(shù)據(jù)庫中的數(shù)據(jù)表信息也都是正?;謴?fù)的(圖3-18和圖3-19)。
\> drop database aa;---刪除aa數(shù)據(jù)庫
\> show databases;---顯示當(dāng)前系統(tǒng)中所有的數(shù)據(jù)庫
\> source /bak/dball.sql---使用備份的dball.sql文件進(jìn)行數(shù)據(jù)庫的恢復(fù)
—————— 本文至此結(jié)束,感謝閱讀 ——————
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。