您好,登錄后才能下訂單哦!
目錄:
(一)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的基本管理
(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主機安裝數據庫的客戶端工具
(1.1.4)我們發現/var/lib/mysql/此目錄在mariadb服務啟動之前是沒有數據的,啟動之后系統便會自動的產生相關的數據,因為mariadb默認的數據都是放在/var/lib/mysql目錄中的(圖1-4)。當我們使用mariadb的時候,有時候會因為編碼的問題而導致數據顯示異常,此時我們在/etc/my.cnf配置文件中設置字符編碼為utf8,這樣可以解決我們顯示信息出現亂碼的問題。
# vim /etc/my.cnf---編輯mariadb數據庫的配置文件
(1.1.5)我們修改完/etc/my.cnf配置文件后,將服務重啟一下,此時在/var/lib/mysql目錄下會重新產生新的文件。我們登錄mariadb數據庫后可以使用“select database();”查詢當前自己登錄后屬于哪一個數據庫,在執行命令的時候,是要以分號結束的,同時如果當前命令的首部如果加上了“#”或者“--”則代表的是注釋行的意思,在尾部加上“\c”表示的是不執行當前的命令。
\> select database();---查詢當前自己登錄后屬于哪一個數據庫
(1.1.6)當我們執行一些系統語句的時候就不需要再加分號的,例如執行查詢數據庫狀態的命令status(圖1-8),如果需要查詢當前登錄數據庫所使用的用戶則可以使用“select user();”,查詢當前系統中所有的數據庫可以使用“show databases;”(圖1-9)
\> status---查詢數據庫狀態
\> select user();---查詢當前登錄數據庫所使用的用戶
\> show databases;---查詢當前系統中所有的數據庫
(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類型(方法二)
(1.1.8)此時我們發現剛剛創建的數據庫aa已經創建成功了,同時我們也可以使用drop命令將aa數據庫刪除(圖1-12),接著我們登錄aa數據庫,并查詢數據庫中數據表的信息(圖1-13)。
\> show databases;---查詢當前所有數據庫的信息
\> drop database aa;---將aa數據庫刪除掉
\> use aa;---使用aa數據庫,切換到aa數據庫
\> show tables;---顯示當前數據庫中所有數據表的信息
(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
(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;---查詢數據表的結構信息
(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刪除
(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);
(1.1.13)如果我們需要將創建的數據表aa刪除,則可以使用drop table命令,并且數據表之間使用“,”逗號進行分隔。
\> drop table aa,bb;---使用逗號隔開,將創建的aa和bb數據表都刪除
(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');---(方法三)
(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中
(1.2.4)如果我們需要往一張數據表插入多條數據,則可以使用insert關鍵字,且使用逗號作為分隔符。
\> insert into cc values (4,'tom4'),(5,'tom5'),(6,'tom6');---插入三條數據,使用逗號作為分隔符,可以同時插入多條數據
(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;---將數據表中所有的空行全部刪除
(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
(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)
(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)
(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)
(1.3.4)如果我們希望在mariadb數據庫中使用正則表達式進行查詢,則應該使用regexp關鍵字指明使用正則表達式。
\> select * from bb where name regexp "tom..";---使用正則表達式查詢tom后跟兩個其他任意字符
(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)
(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的用戶管理
(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)
(2.1.2)如果我們設置的密碼信息需要進行修改,此時我們可以使用update命令進行數據庫密碼的修改,由于修改完成后是修改了硬盤里的密碼,并沒有同步到當前登錄的緩存中,所以我們應該要使用flush命令刷新一下數據庫的緩存,就可以使用修改后的密碼登錄數據庫系統了。
\> update mysql.user set password=password('123123') where user='root' and host='localhost';---修改當前root用戶的密碼為123123
\> flush privileges;---刷新硬盤中修改的密碼信息到當前的緩存中
(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數據庫服務重新啟動
(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程序殺死
(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)
(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用戶的時候也是需要將主機名寫清楚的
(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 tom@192.168.26.102;---查詢tom用戶所有數據表的使用權限
(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數據表插入一條數據
(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權限
(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;
(三)備份及恢復策略
(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;'
(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文件中
(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數據表的腳本
(3.5.3)有時候我們的一個數據庫中有很多張表,我們想備份這個庫中所有的數據表,而不是單獨指定某些張表,我們直接寫庫名即可,而不用寫表名(圖3-12)。然后我們使用備份的腳本all.sql進行數據表的恢復(圖3-13),我們發現數據表aa和數據表bb都已經恢復正常了(圖3-14)。
# mysqldump -uroot -predhat aa > /bak/all.sql---將aa數據庫中的所有表全部進行備份
(3.6)對數據庫進行備份---databases
(3.6.1)如果現在我們希望對一個數據庫進行備份,則我們應該使用“-B”參數指明是對aa數據庫進行備份(圖3-15),此時我們發現在備份的腳本中產生了創建數據庫的語句,這是和之前進行數據表備份的不同之處(圖3-16)。
# mysqldump -uroot -predhat -B aa > /bak/dball.sql---使用“-B”參數指明是對aa數據庫進行備份
(3.6.2)此時我們可以將數據庫刪除掉,然后使用備份的dball.sql文件進行數據庫的恢復(圖3-17),此時我們發現aa數據庫已經恢復了,并且數據庫中的數據表信息也都是正常恢復的(圖3-18和圖3-19)。
\> drop database aa;---刪除aa數據庫
\> show databases;---顯示當前系統中所有的數據庫
\> source /bak/dball.sql---使用備份的dball.sql文件進行數據庫的恢復
—————— 本文至此結束,感謝閱讀 ——————
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。