【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰

目錄:
(一)MariaDB的基本管理
(1.1)數據庫管理系統
(1.2)數據表信息維護--增刪改
(1.3)數據表信息維護--查
(二)MariaDB的用戶管理
(2.1)對root用戶進行管理
(2.2)對普通用戶管理
(三)備份及恢復策略


MariaDB數據庫管理系統是MySQL的一個分支,主要由開源社區在維護,採用GPL授權許可MariaDB的目的是完全兼容MySQL的,包括API和命令行,使之能輕鬆稱爲MySQL的代替品。MySQL數據庫項目自從被Oracle公司收購之後,從開源軟件轉變成了“閉源”軟件,這導致IT行業中很多企業以及廠商紛紛選擇使用了數據庫軟件後起之秀--MariaDB數據庫管理系統,MariaDB數據庫管理系統也因此快速佔據了市場。
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(一)MariaDB的基本管理
(1.1)數據庫管理系統
(1.1.1)數據庫是指按照某些特定結構來存儲數據資料的數據倉庫,在當今這個大數據技術迅速崛起的時代,互聯網上每天都會生成海量的數據信息,數據庫技術也從最初只能存儲簡單的表格數據的單一集中存儲模式,發展到了現如今存儲海量數據的大型分佈式模式。在信息化社會中,能夠充分有效的管理和利用各種數據,挖掘其中的價值,是進行科學研究與決策管理的重要前提。同時,數據庫技術也是管理信息系統、辦公自動化系統、決策支持系統等各類信息系統的核心組成部分,是進行科學研究和決策管理的重要技術手段。數據庫管理系統是一種能夠對數據庫中存放的數據進行建立、修改、刪除、查找、維護等操作的軟件程序。它通過吧計算機中具體的物理數據轉換成適合用戶理解的抽象邏輯數據,有效的降低數據庫管理的技術門檻,因此即便是從事Linux運維工作的工程師也可以對數據庫進行基本的管理操作。
(1.1.2)說到數據庫,我們就需要了解數據庫的基本概念。第一個是“庫”,庫實際上就是一個文件夾,這個文件夾是單層的,裏面不會再有子文件夾的,在數據庫中會存在很多張表,例如公司管理系統的數據庫裏可能會有員工表、財務表、客戶表等,每張表都是由行與列組成的二維數據表。同時還可以有多個數據庫,一般情況下,我們會爲一個應用創建一個庫,例如公司裏有博客系統、論壇系統,此時就可以使用對應的兩個獨立數據庫。如果作爲管理員在數據庫中進行切換的時候,使用的是“use 庫名”的方式在數據庫之間進行切換。如果我們要創建一個數據表,首先需要定義表的結構,例如員工表我們需要在每一列定義員工ID號、姓名、年齡、性別、籍貫等信息,然後在每一行插入具體的員工的信息。其中每一列稱爲“columu”或者“字段”,每一行稱爲“row”或者“記錄”。
(1.1.3)接下來我們在vms001主機安裝mariadb數據庫的服務器端,在vms002主機安裝mariadb數據庫的客戶端
# yum install mariadb-server mariadb -y---在vms001主機進行安裝,其中mariadb表示的服務器端,mariadb-server表示的是客戶端
# yum install mariadb-server -y---在vms002主機安裝數據庫的客戶端工具
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.1.4)我們發現/var/lib/mysql/此目錄在mariadb服務啓動之前是沒有數據的,啓動之後系統便會自動的產生相關的數據,因爲mariadb默認的數據都是放在/var/lib/mysql目錄中的(圖1-4)。當我們使用mariadb的時候,有時候會因爲編碼的問題而導致數據顯示異常,此時我們在/etc/my.cnf配置文件中設置字符編碼爲utf8,這樣可以解決我們顯示信息出現亂碼的問題。
# vim /etc/my.cnf---編輯mariadb數據庫的配置文件
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.1.5)我們修改完/etc/my.cnf配置文件後,將服務重啓一下,此時在/var/lib/mysql目錄下會重新產生新的文件。我們登錄mariadb數據庫後可以使用“select database();”查詢當前自己登錄後屬於哪一個數據庫,在執行命令的時候,是要以分號結束的,同時如果當前命令的首部如果加上了“#”或者“--”則代表的是註釋行的意思,在尾部加上“\c”表示的是不執行當前的命令。
\> select database();---查詢當前自己登錄後屬於哪一個數據庫
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.1.6)當我們執行一些系統語句的時候就不需要再加分號的,例如執行查詢數據庫狀態的命令status(圖1-8),如果需要查詢當前登錄數據庫所使用的用戶則可以使用“select user();”,查詢當前系統中所有的數據庫可以使用“show databases;”(圖1-9)
\> status---查詢數據庫狀態
\> select user();---查詢當前登錄數據庫所使用的用戶
\> show databases;---查詢當前系統中所有的數據庫
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.1.7)我們可以自己創建一個數據庫aa,並查詢創建的數據庫設置的各種屬性(圖1-10),也可以通過“alter database”的命令進行字符編碼的修改等操作(圖1-11)。
\> create database aa;---創建一個數據庫
\> show create database aa;---查詢創建數據庫時設置的屬性值
\> show create database aa\G---以格式化的方式查詢創建數據庫時設置的屬性值
\> alter database aa character set gbk;---修改數據庫的字符編碼爲GBK類型(方法一)
\> alter database aa charset utf8;---修改數據庫的字符編碼爲utf8類型(方法二)
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.1.8)此時我們發現剛剛創建的數據庫aa已經創建成功了,同時我們也可以使用drop命令將aa數據庫刪除(圖1-12),接着我們登錄aa數據庫,並查詢數據庫中數據表的信息(圖1-13)。
\> show databases;---查詢當前所有數據庫的信息
\> drop database aa;---將aa數據庫刪除掉
\> use aa;---使用aa數據庫,切換到aa數據庫
\> show tables;---顯示當前數據庫中所有數據表的信息
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.1.9)接着我們在aa數據庫中創建一個數據表aa,定義id、name、city三個字段,當然我們也可以使用drop命令可以刪除數據庫aa中的數據表aa(圖1-14)。如果想將創建的數據表aa重命名爲bb,則可以使用“rename tables”(圖1-15)。
\> create table aa (id int,name char(10),city char(10));---創建一個數據表aa
\> drop table aa;---刪除數據表aa
\> rename tables aa to bb;---將數據表aa重命名爲bb
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.1.10)如果我們想查看數據表的屬性信息,則可以使用“show create table”命令(圖1-16),我們還可以對數據表的字符屬性信息進行修改,使用“character”,使用的方式和修改數據庫的屬性信息的方式一致(圖1-17),如果我們想知道數據表的結構信息,則可以使用“describe”命令查詢(圖1-18)。
\> show create table aa;---查詢數據表的屬性信息
\> alter table aa character set gbk;---修改數據表aa的字符屬性信息爲GBK(方法一)
\> alter table aa charset=utf8;---修改數據表aa的字符屬性信息爲utf8(方法二)
\> describe aa;---查詢數據表的結構信息
\> desc aa;---查詢數據表的結構信息
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.1.11)如果我們想給aa數據表添加一列字段“addr”,則可以通過“alter table”命令操作,給aa數據表添加一個addr的字段,並且設置爲varchar類型(圖1-19),同時我們也是可以使用“drop”命令將aa數據表中的相關字段刪除的(圖1-20)。
\> alter table aa add addr varchar(20);---給aa數據表添加一列字段“addr”且設置類型爲varchar
\> alter table aa drop addr;---將aa數據表中的字段addr刪除
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.1.12)由於我們在數據表中添加一列字段的時候系統默認是在最後一列添加的,我們現在的需求是將添加的一列字段放在指定的位置,我們指定“first”關鍵字,此時我們發現添加的addr已經在數據表aa的第一列了(圖1-21),通過關鍵字after,我們指定addr字段緊跟在name字段的後面(圖1-22),如果我們對定義的字段的屬性不滿意,希望修改字段的屬性值的時候,我們可以使用“modify”關鍵字,修改後我們看到addr字段的屬性已經修改爲varchar(30)了(圖1-23);當然我們也可以使用“change addr”對字段的屬性值進行修改(圖1-24),其中我們也是可以對字段名進行修改的(圖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);
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.1.13)如果我們需要將創建的數據表aa刪除,則可以使用drop table命令,並且數據表之間使用“,”逗號進行分隔。
\> drop table aa,bb;---使用逗號隔開,將創建的aa和bb數據表都刪除
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.2)數據表信息維護--增刪改
(1.2.1)我們上面所使用的create(創建)、drop(銷燬)、alter(插入)等命令都是對數據表的結構進行創建、修改和刪除,因此我們將其稱之爲DDL(Data Definition Language)數據庫模式定義語言,這些操作都是針對整個數據表的屬性結構的,並沒有對數據表中特定的字段進行增刪改查。同時對於數據表我們可以做的操作主要有insert(插入)、delete(刪除)、update(修改)等操作,這些命令主要是對數據表中的字段進行增刪改查,因此我們將其稱之爲DML(Data Manipulation Language)數據操作語言,這些操作都不會對數據表的結構產生任何的改變。
(1.2.2)我們可以使用“insert into”向數據表中插入數據(圖1-27至圖1-29)。
\> select * from aa;---查詢aa數據表中的所有數據
\> insert into aa (id,name) values (1,'tom');---向數據表aa中創建一行數據,其中id爲1,name爲tom(方法一)
\> insert into aa (id) values (1);---我們向數據表中只插入一個id值(方法二)
\> insert into aa values (2,'bob');---(方法三)
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.2.3)如果我們希望創建一張和aa數據表相同的數據表,則可以使用like關鍵字(圖1-30)。如果我們希望將aa數據表中的數據能夠提取出來插入到bb數據表中,則我們可以使用圖1-31的方式。當然我們也可以將創建新的數據表和複製原數據表的信息至新數據表的操作整合成一條語句(圖1-32)。
\> create table bb like aa;---創建一個新的數據表bb,其中bb的結構和aa的結構一致
\> insert into bb select * from aa;---複製aa數據表中的數據插入到bb數據表中
\> create table cc select * from aa;---創建一個數據表cc並將aa數據表的信息複製到數據表cc中
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.2.4)如果我們需要往一張數據表插入多條數據,則可以使用insert關鍵字,且使用逗號作爲分隔符。
\> insert into cc values (4,'tom4'),(5,'tom5'),(6,'tom6');---插入三條數據,使用逗號作爲分隔符,可以同時插入多條數據
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.2.5)如果我們希望刪除數據表中指定的某一行數據,則可以使用delete關鍵字,並設定指定字段的具體值(圖1-34和圖1-35)。如果我們需要清除數據表中所有的數據,則可以使用truncate命令(圖1-36)。
\> delete from bb where name='marry';---刪除名字列爲marry的記錄
\> delete from bb where name is null;---將數據表中所有的空行全部刪除
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.2.6)接着我們來看一下更新數據表中的數據,我們可以使用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
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.3)數據表信息維護--查
(1.3.1)接下來我們使用select語句做日常的查詢操作。其中數據查詢的語言成爲DQL(Data QueryLanguage )數據庫查詢語言。
\> select name,id from bb;---指定具體的列名進行查詢,列名可以不分順序(圖1-38)
\> select * from bb;---查詢所有列的信息(圖1-38)
\> select * from bb where id=1;---查詢id字段的值爲1的所有數據(圖1-39)
\> select * from bb where id>=5;---查詢id字段的值大於等於5的所有數據(圖1-39)
\> select * from bb where id<=5;---查詢id字段的值小於等於5的所有數據(圖1-39)
\> select * from bb where id>=5 and id<=11;---查詢id字段大於等於5並且id字段小於等於11的所有數據(圖1-40)
\> select * from bb where id<=3 or id>=6;---查詢id字段小於等於3或者id大於等於6的所有數據(圖1-40)
\> select * from bb where id between 5 and 11;---查詢id字段大於等於5並且id字段小於等於11的所有數據(圖1-41)
\> select * from bb where id in(1,3,6);---(方法一)查詢id包含在1,3,6中的記錄數據(圖1-42)
\> select * from bb where id=1 or id=3 or id=6;---(方法二)查詢id包含在1,3,6中的記錄數據(圖1-42)
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.3.2)接着我們來了解mariadb數據庫中通配符和正則表達式的相關信息,其中“_”表示的是單個任意字符,“%”表示的是任意長度任意字符。如果我們需要查詢tom字符後跟兩個字符的所有記錄,則可以使用兩個“_”表示(圖1-43),如果我們需要查詢tom字符後跟一個“_”然後再跟一個任意字符時,則可以使用“\”轉義符進行處理(圖1-44)。
\> select * from bb where name like "tom__";---表示的是將tom後跟的兩個字符的所有行全部查詢出來(圖1-43)
\> select * from bb where name like "tom__";---表示查詢tom字符後跟一個“_”然後再跟一個任意字符(圖1-44)
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.3.3)有時候我們需要修改mariadb數據庫中的配置文件/etc/my.cnf,此時我們就需要使用“show variables;”來查詢數據庫的相關參數信息,例如我們需要查詢和innodb相關的參數的所有信息,則可以使用“%”參數來處理(圖1-45)。我們需要查詢tom字符後跟任意個數任意字符的所有符合條件的記錄,也可以使用“tom%”(圖1-46),如果我們要查詢包含字符編碼的信息“char、ac、set、server”的所有記錄,則可以使用“%char%ac%set%server%”通配符的方式進行查詢(圖1-47)。此時我們便可以將查詢的信息填入到/etc/my.cnf配置文件中,已查詢的字符編碼信息“character_set_server”爲例,寫入到配置文件後需要修改爲“character-set-server”這樣的格式。
\> show variables like "%innodb%";---查詢和innodb相關的參數的所有信息(圖1-45)
\> select * from bb where name like "tom%";---查詢tom字符後跟任意個數任意字符的所有符合條件的記錄(圖1-46)
\> show variables like "%innodb%data%";---查詢包含“innodb%data”字符的所有記錄(圖1-47)
\> show variables like "%char%ac%set%server%";---查詢包含字符編碼的信息(圖1-47)
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.3.4)如果我們希望在mariadb數據庫中使用正則表達式進行查詢,則應該使用regexp關鍵字指明使用正則表達式。
\> select * from bb where name regexp "tom..";---使用正則表達式查詢tom後跟兩個其他任意字符
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.3.5)接着我們瞭解下一個知識點“多表查詢”,我們創建數據表aa和bb並插入相關的數據(圖1-49),我們需要查詢用戶lisi的工資,則可以使用多表子查詢的方式(圖1-50)。
\> drop table aa,bb,cc;---刪除當前所有的數據表
\> create table aa(id int,name varchar(10));---創建一個aa表示員工表
\> create table bb(id int,sale int);---創建一個bb表示工資表
\> insert into aa values (1,'tom'),(2,'bob'),(3,'marry'),(4,'lisi'),(5,'wangw');---在aa數據表中插入5條員工信息
\> insert into bb values(1,1000),(2,3000),(3,2500),(4,4000),(5,1500);---在bb數據表中插入五條工資信息
\> select * from bb where id=(select id from aa where name='lisi');---查詢用戶lisi的工資(圖1-50)
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(1.3.6)我們嘗試將aa表和bb表合併成一張大表來進行查詢,我們通過使用表連接join的方式來進行合成大表,但是由於直接使用join的方式連接兩張大表會有笛卡爾積產生很多沒有意義的組合數據,所以我們還需要將無意義的組合清除掉(圖1-52),同時清除笛卡爾積的方式還可以使用using關鍵字。
\> 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操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰


(二)MariaDB的用戶管理
(2.1)對root用戶進行管理
(2.1.1)如果登錄mariadb數據庫的時候我們希望通過指定用戶登錄,則此時我們應該要對用戶進行管理。我們使用“select user();”查詢當前使用的登錄用戶信息(圖1-54)。如果我們需要查詢當前數據庫中的所有賬戶密碼信息,則應該在系統內置的數據表mysql.user中進行查詢,其中第一列表示mariadb的用戶名,第二列表示允許登錄該用戶的主機地址信息,第三列表示帳戶的密碼信息,一般在登錄數據庫時,我們應該使用“user@host”的格式登錄(圖1-55)。我們可以通過兩種方式對登錄數據庫的用戶設置密碼信息(圖1-56至圖1-58)。
\> select user();---查詢當前使用的登錄用戶信息(圖1-54)
\> desc mysql.user;---查詢mysql.user內置數據表的結構信息(圖1-54)
\> select user,host,password from mysql.user;---查詢mysql.user數據表中關於用戶的信息(圖1-55)
# mysqladmin -uroot -p password 'redhat'---(第一種)在命令行中設置mariadb數據庫中root用戶的密碼,其中“-p”表示prompt提示,注意:Enter password處直接回車即可(圖1-56)
\> select md5('redhat');---使用MD5的方式進行加密(圖1-57)
\> select encrypt('redhat');---使用encrypt的方式進行加密(圖1-57)
\> select password('redhat');---使用password的方式進行加密(圖1-57)
\> set password=password('redhat');---(第二種)默認是給root用戶設置密碼(圖1-58)
\> set password for root@localhost=password('redhat');---指定對當前主機的root用戶設置密碼(圖1-58)
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(2.1.2)如果我們設置的密碼信息需要進行修改,此時我們可以使用update命令進行數據庫密碼的修改,由於修改完成後是修改了硬盤裏的密碼,並沒有同步到當前登錄的緩存中,所以我們應該要使用flush命令刷新一下數據庫的緩存,就可以使用修改後的密碼登錄數據庫系統了。
\> update mysql.user set password=password('123123') where user='root' and host='localhost';---修改當前root用戶的密碼爲123123
\> flush privileges;---刷新硬盤中修改的密碼信息到當前的緩存中
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(2.1.3)登錄安全模式方式一:如果我們忘記了登錄mariadb數據庫的密碼,此時我們可以使用登錄安全模式的方式登錄系統,我們先將mariadb服務停止,然後編輯/etc/my.cnf配置文件,我們在/etc/my.cnf配置文件中添加一行信息(圖2-2),使得登錄數據庫的時候可以跳過密碼驗證,然後再對數據庫中用戶的賬戶密碼進行修改(圖2-3),並將緩存刷新,服務重啓,此時我們便可以使用新設置的密碼登錄數據庫系統了(圖2-5)。
# systemctl stop mariadb---將mariadb數據庫服務停止
# vim /etc/my.cnf---編輯my.cnf的配置文件
# systemctl restart mariadb---將mariadb數據庫服務重新啓動
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(2.1.4)登錄安全模式方式二:以上是通過修改配置文件的方式進行密碼重置的,我們也可以使用第二種方式修改用戶密碼。我們首先將mariadb服務停止,然後使用“# mysqld_safe --skip-grant-tables”命令(圖2-6),此時我們打開另一個終端使用mysql就可以實現無密碼登錄系統並進行相關的修改密碼的操作了,但是我們還是需要執行killall命令將相關的前臺程序終止(圖2-7)。
# mysqld_safe --skip-grant-tables---使得數據庫可以進入安全模式
# killall -9 mysqld_safe---將運行的mysqld程序殺死
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(2.2)對普通用戶管理
(2.2.1)接着我們來看一下對普通用戶做管理,我們創建一個tom用戶,此時創建的用戶是可以在任何的主機上登錄的(圖2-8),並且給創建的tom用戶設置好對應的密碼(圖2-9),並將防火牆設置允許通過mysql(圖2-10)。
報錯信息: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用戶擁有哪些權限(圖2-9)
\> set password for tom@'%'=password('redhat');---給tom用戶設置密碼redhat(圖2-9)
# firewall-cmd --add-service=mysql---設置防火牆允許通過mysql(圖2-10)
# firewall-cmd --add-service=mysql --permanent---將設置寫入持久態(圖2-10)
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(2.2.2)接着我們從vms002主機上使用創建的tom用戶嘗試登錄vms001主機的mariadb數據庫,發現vms002主機可以正常的登錄數據庫,但是沒有顯示aa數據庫,因此沒有查詢所創建的aa數據庫的權限(圖2-11)。因此我們在創建tom用戶的時候需要指明能夠登錄的主機(圖2-12),我們在刪除tom用戶的時候也是需要將主機名寫清楚的。(圖2-13)
# mysql -utom -predhat -hvms001---在vms002主機上嘗試使用tom用戶登錄vms001主機的mariadb數據庫(圖2-11)
\> show databases;---查詢當前用戶可以查詢的所有數據庫信息(圖2-11)
\> drop user tom;---刪除創建的tom用戶(圖2-12)
\> drop user tom@'localhost';---刪除tom用戶的時候也是需要將主機名寫清楚的
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(2.2.3)以上創建用戶的方式一般我們不建議使用,一般來說使用grant命令來創建用戶效果會更好(圖2-14)。我們創建一個tom用戶,允許在vms002主機上登錄,且允許使用所有數據表的權限(圖2-16),此時我們發現vms002主機使用tom賬戶便可以正常的登錄vms001主機了(圖2-17),但是我們發現此時在vms002主機上登錄的tom用戶除了有select查詢系統的相關權限,沒有其他任何刪除、修改、插入數據的權限(圖2-18)。
\> grant select on aa.* to tom@'192.168.26.102' identified by 'redhat';---創建一個tom用戶,允許在vms002主機上登錄,且允許查詢所有數據表的權限
# mysql -utom -predhat -hvms001---在vms002主機上嘗試使用tom用戶登錄vms001主機的mariadb數據庫
\> show grants for [email protected];---查詢tom用戶所有數據表的使用權限
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(2.2.4)接着我們在vms001主機上嘗試爲tom用戶在vms002主機上授權使用insert的權限(圖2-19),此時我們發現在vms002主機上已經可以使用tom用戶正常的插入新的數據了(圖2-20)。
\> grant insert on aa.* to tom@'192.168.26.102';---爲tom用戶在vms002主機上授權使用insert的權限
\> show grants for tom@'192.168.26.102';---查詢tom用戶所有數據表的使用權限
\> insert into aa values(1,'tomxxx');---向aa數據表插入一條數據
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(2.2.5)接着我們爲tom用戶設置擁有使用create、drop的權限,然後我們將tom用戶drop權限收回,我們使用revoke命令,此時我們發現tom用戶便沒有了drop權限。
\> grant create,drop on aa.* to tom@'192.168.26.102';---爲tom用戶設置擁有使用create、drop的權限
\> revoke drop on aa.* from tom@'192.168.26.102';---回收tom用戶所擁有的drop權限
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(2.2.6)如果我們希望設置root用戶在192.168.26.0網段中都可以登錄且使用所有的權限,則我們可以使用“all privileges”,並且使用“192.168.26.%”表示網段進行設置。此時我們使用192.168.26.0網段中的任意IP地址的主機都可以登錄到vms001主機mariadb數據庫的root用戶中使用所有數據庫權限。
\> drop user tom@'192.168.26.102';
\> grant all privileges on *.* to root@'192.168.26.%' identified by 'redhat';---設置root用戶在192.168.26.0網段中都可以登錄且使用所有的權限
\> select user,host,password from mysql.user;
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰


(三)備份及恢復策略
(3.1)因爲數據庫中保存了企業的很多重要經營數據,所以數據庫的備份和恢復是非常重要的,有時候在人爲的操作中難免會發生各種突發的情況,造成數據的破壞和丟失,如果我們無法對數據進行恢復的話,將是後果非常嚴重的事情,所以此時我們對數據進行定時定量的備份是非常重要的操作規範。
(3.2)一般我們的備份包含兩類:第一種是冷備份,也稱脫機備份,在備份的時候必須要把數據庫關閉,然後把/var/lib/mysql裏的所有數據拷貝至其他物理設備中,例如將LVM掛載到/var/lib/mysql進行備份。第二種是熱備份,也稱聯機備份,也就是在備份的時候不需要關閉數據庫而在線操作。
(3.3)mariadb自身是沒有增量備份的,如果要實現增量備份的話,就需要使用第三方的工具,Mysqlimport是用來導入文件的,ibbackup屬於商業工具,innodb屬於官方的工具,Xtrabackup只能備份innodb,其中XtraBackup的下載網址爲:http://www.percona.com/downloads/XtraBackup/ ,我們主要是使用mysqldump工具。
(3.4)有時候我們爲了能夠執行腳本,需要做到不登錄數據庫並將所需的數據獲取出來,此時我們可以使用“-e”參數,這樣以後我們便可以將命令寫入到腳本中自動化執行,獲取相應的數據,從而提高工作效率。
# mysql -uroot -predhat -e 'show databases;'
# mysql -uroot -predhat -e 'use aa;show tables;'
# mysql -uroot -predhat -e 'use aa;select * from aa;'
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(3.5)對數據表進行備份---tables
(3.5.1)接着我們來使用mysqldump做備份,我們首先創建一個/bak目錄,然後將aa數據庫的aa數據表導入到/bak目錄下的a.sql文件中(圖3-3),我們查看a.sql文件發現其中都是重新創建數據表、插入各項數據信息的各種語句,其中非註釋行“DROP TABLE IF EXISTS aa;”表示的是刪除aa數據表,關鍵字“IF EXISTS”表示如果aa存在則刪除,如果不存在就不用管,這樣我們就備份好了aa數據表了。
# mysqldump -uroot -predhat aa aa > /bak/a.sql---創建一個/bak目錄,然後將aa數據庫的aa數據表導入到/bak目錄下的a.sql文件中
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(3.5.2)由於我們備份的是一個數據表,但是在備份的a.sql文件中並沒有指明是在哪個數據庫中操作的,我們將aa數據表刪除後進行數據表恢復的操作時,需要先進入到對應的數據庫,然後再進行執行恢復腳本的操作(圖3-6和圖3-7)。我們也是可以對多張數據表進行備份的,例如將aa數據庫中的aa和bb數據表進行備份,寫入到ab.sql文件中(圖3-8和圖3-9),在aa數據庫中執行/bak/ab.sql恢復腳本,此時我們發現aa和bb數據表便已經恢復正常了(圖3-10和圖3-11)。
# mysql -uroot -predhat---登錄數據庫
\> source /bak/a.sql;---進入到aa數據庫後指明恢復/bak目錄下的a.sql腳本
# mysqldump -uroot -predhat aa aa bb > /bak/ab.sql---同時備份aa數據庫中的aa表和bb表
\> drop table aa,bb;---將aa數據庫中的aa表和bb表刪除
\> source /bak/ab.sql---執行恢復aa和bb數據表的腳本
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(3.5.3)有時候我們的一個數據庫中有很多張表,我們想備份這個庫中所有的數據表,而不是單獨指定某些張表,我們直接寫庫名即可,而不用寫表名(圖3-12)。然後我們使用備份的腳本all.sql進行數據表的恢復(圖3-13),我們發現數據表aa和數據表bb都已經恢復正常了(圖3-14)。
# mysqldump -uroot -predhat aa > /bak/all.sql---將aa數據庫中的所有表全部進行備份
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(3.6)對數據庫進行備份---databases
(3.6.1)如果現在我們希望對一個數據庫進行備份,則我們應該使用“-B”參數指明是對aa數據庫進行備份(圖3-15),此時我們發現在備份的腳本中產生了創建數據庫的語句,這是和之前進行數據表備份的不同之處(圖3-16)。
# mysqldump -uroot -predhat -B aa > /bak/dball.sql---使用“-B”參數指明是對aa數據庫進行備份
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
(3.6.2)此時我們可以將數據庫刪除掉,然後使用備份的dball.sql文件進行數據庫的恢復(圖3-17),此時我們發現aa數據庫已經恢復了,並且數據庫中的數據表信息也都是正常恢復的(圖3-18和圖3-19)。
\> drop database aa;---刪除aa數據庫
\> show databases;---顯示當前系統中所有的數據庫
\> source /bak/dball.sql---使用備份的dball.sql文件進行數據庫的恢復
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰
【一點一滴,成材之基!】頂級開源數據庫MariaDB操作實戰

—————— 本文至此結束,感謝閱讀 ——————

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