版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第九章MySQL數(shù)據(jù)庫(kù)安全管理與保護(hù)機(jī)制應(yīng)用9.1MySQL的安全設(shè)置9.2MySQL事務(wù)應(yīng)用實(shí)例9.3MySQL數(shù)據(jù)庫(kù)備份與恢復(fù)9.4MySQL日志9.5本章小結(jié)19.1MySQL的安全設(shè)置9.1.1MySQL權(quán)限表9.1.2用戶管理9.1.3權(quán)限管理29.1.1MySQL權(quán)限表MySQL數(shù)據(jù)庫(kù)管理系統(tǒng)是一個(gè)多用戶數(shù)據(jù)庫(kù),具有功能強(qiáng)大的訪問(wèn)控制系統(tǒng),可以為不同用戶指定不同權(quán)限。默認(rèn)情況下使用root用戶,該用戶是超級(jí)管理員,擁有所有權(quán)限,包括創(chuàng)建用戶、刪除用戶和修改用戶密碼等管理權(quán)限。
在實(shí)際應(yīng)用中,為了滿足實(shí)際項(xiàng)目的需求,可以創(chuàng)建擁有不同權(quán)限的普通用戶。MySQL在安裝時(shí)會(huì)自動(dòng)創(chuàng)建一個(gè)名為“mysql”的數(shù)據(jù)庫(kù),其中存儲(chǔ)的都是用戶權(quán)限表。用戶登錄以后,MySQL數(shù)據(jù)庫(kù)管理系統(tǒng)會(huì)根據(jù)這些權(quán)限表的內(nèi)容為每個(gè)用戶賦予相應(yīng)的權(quán)限。3user表是MySQL中最重要的一個(gè)權(quán)限表,用來(lái)記錄允許連接到服務(wù)器的賬號(hào)信息。需要注意的是,在user表里啟用的所有權(quán)限都是全局級(jí)的,適用于所有數(shù)據(jù)庫(kù)。user表中的字段大致可以分為四類:用戶列、權(quán)限列、安全列和資源控制列,下面主要介紹這些字段的含義。41.用戶列
用戶列存儲(chǔ)了用戶連接MySQL數(shù)據(jù)庫(kù)時(shí)需要輸入的信息。MySQL用戶列如表9.1所示。52.權(quán)限列
權(quán)限列的字段決定了用戶的權(quán)限,用來(lái)描述在全局范圍內(nèi)允許對(duì)數(shù)據(jù)和數(shù)據(jù)庫(kù)進(jìn)行的操作。權(quán)限大致分為兩大類,分別是高級(jí)管理權(quán)限和普通權(quán)限。高級(jí)管理權(quán)限主要對(duì)數(shù)據(jù)庫(kù)進(jìn)行管理,例如關(guān)閉服務(wù)的權(quán)限、超級(jí)權(quán)限和加載用戶等;普通權(quán)限主要操作數(shù)據(jù)庫(kù),例如查詢權(quán)限、修改權(quán)限等。63.安全列
安全列主要用來(lái)判斷用戶是否能夠登錄成功,user表中的安全列如表9.3所示74.資源控制列
資源控制列的字段用來(lái)限制用戶使用的資源,user表中的資源控制列如表9.4所示89.1.2用戶管理1.創(chuàng)建用戶MySQL在安裝時(shí),會(huì)默認(rèn)創(chuàng)建一個(gè)名為root的用戶,該用戶擁有超級(jí)權(quán)限,可以控制整個(gè)MySQL服務(wù)器。
在對(duì)MySQL的日常管理和操作中,為了避免有人惡意使用root用戶控制數(shù)據(jù)庫(kù),通常創(chuàng)建一些具有適當(dāng)權(quán)限的用戶,盡可能地不用或少用root用戶登錄系統(tǒng),以此來(lái)確保數(shù)據(jù)的安全訪問(wèn)。9MySQL提供三種方法創(chuàng)建用戶:使用CREATEUSER語(yǔ)句創(chuàng)建用戶、在mysql.user表中添加用戶、使用GRANT語(yǔ)句創(chuàng)建用戶。
(1)使用CREATEUSER語(yǔ)句創(chuàng)建用戶
使用CREATEUSER語(yǔ)句創(chuàng)建MySQL用戶,并設(shè)置相應(yīng)的密碼。其基本語(yǔ)法格式如下:CREATEUSER<用戶>[IDENTIFIEDBY[PASSWORD]'password'][,用戶[IDENTIFIEDBY[PASSWORD]'password']]10【例9-1】使用CREATEUSER創(chuàng)建一個(gè)用戶,用戶名是test1,密碼是test1,主機(jī)名是localhost。SQL語(yǔ)句和執(zhí)行過(guò)程如下:mysql>CREATEUSER'test1'@'localhost'IDENTIFIEDBY'test1';QueryOK,1rowsaffected(0.06sec)
結(jié)果顯示,創(chuàng)建test1用戶成功。11【例9-2】在MySQL中,使用password()函數(shù)獲取密碼的哈希值。
查看test1哈希值的SQL語(yǔ)句和執(zhí)行過(guò)程如下:mysql>SELECTpassword('test1');+--------------------------------------------------------------------+|password('test1')|+--------------------------------------------------------------------+|*06C0BF5B64ECE2F648B5F048A71903906BA08E5C|+--------------------------------------------------------------------+1rowinset,1warning(0.00sec)“*06C0BF5B64ECE2F648B5F048A71903906BA08E5C”就是test1的哈希值。
下面使用密碼的哈希值創(chuàng)建用戶test1,SQL語(yǔ)句和執(zhí)行過(guò)程如下:mysql>CREATEUSER'test1'@'localhost'IDENTIFIEDBYPASSWORD'*06C0BF5B64ECE2F648B5F048A71903906BA08E5C';QueryOK,0rowsaffected,1warning(0.00sec)執(zhí)行成功后可使用密碼“test1”登錄。12
(2)使用INSERT語(yǔ)句新建用戶當(dāng)擁有對(duì)mysql.user表的INSERT權(quán)限后,可使用INSERT語(yǔ)句將用戶的信息添加到mysql.user表中。通常INSERT語(yǔ)句只添加Host、User和authentication_string這3個(gè)字段的值。使用INSERT語(yǔ)句創(chuàng)建用戶的代碼如下:
INSERTINTOmysql.user(Host,User,authentication_string,ssl_cipher,x509_issuer,x509_subject)VALUES('hostname','username',PASSWORD('password'),'','','');13【例9-3】使用INSERT語(yǔ)句創(chuàng)建名為test2的用戶,主機(jī)名是localhost,密碼是test2。SQL語(yǔ)句和執(zhí)行過(guò)程如下:mysql>INSERTINTOmysql.user(Host,User,authentication_string,ssl_cipher,x509_issuer,x509_subject)VALUES('localhost','test2',PASSWORD('test2'),'','','');QueryOK,1rowaffected,1warning(0.02sec)結(jié)果顯示,新建用戶成功。但是此時(shí)如果通過(guò)該賬戶登錄MySQL服務(wù)器,還不能成功,因?yàn)閠est2用戶還沒(méi)有生效。可以使用FLUSH命令讓用戶生效,命令如下:FLUSHPRIVILEGES;使用FLUSH命令使MySQL刷新系統(tǒng)權(quán)限相關(guān)表,執(zhí)行該命令需要RELOAD權(quán)限。14
(3)使用GRANT語(yǔ)句新建用戶使用GRANT語(yǔ)句創(chuàng)建用戶的基本語(yǔ)法形式如下:GRANTpriv_typeONdatabase.tableTOuser[IDENTIFIEDBY[PASSWORD]'password']
參數(shù)說(shuō)明如表9.6所示15【例9-4】使用GRANT語(yǔ)句創(chuàng)建名為test3的用戶,主機(jī)名為localhost,密碼為test3,該用戶對(duì)所有數(shù)據(jù)庫(kù)的所有表都有SELECT權(quán)限。SQL語(yǔ)句和執(zhí)行過(guò)程如下:mysql>GRANTSELECTON*.*TO'test3'@localhostIDENTIFIEDBY'test3';QueryOK,0rowsaffected,1warning(0.01sec)“*.*”表示所有數(shù)據(jù)庫(kù)下的所有表。結(jié)果顯示創(chuàng)建用戶成功,test3用戶對(duì)所有表都有查詢(SELECT)權(quán)限。162.修改用戶
在MySQL中,使用RENAMEUSER語(yǔ)句修改一個(gè)或多個(gè)已經(jīng)存在的用戶賬號(hào),語(yǔ)法格式如下:RENAMEUSER<舊用戶>TO<新用戶>其中,<舊用戶>表示系統(tǒng)中已經(jīng)存在的MySQL用戶賬號(hào),<新用戶>:表示新的MySQL用戶賬號(hào)。17【例9-5】使用RENAMEUSER語(yǔ)句將用戶名test1修改為testUser1,主機(jī)是localhost。SQL語(yǔ)句和執(zhí)行過(guò)程如下:mysql>RENAMEUSER'test1'@'localhost'TO'testUser1'@'localhost';QueryOK,0rowsaffected(0.03sec)在cmd命令行工具中,使用testUser1用戶登錄數(shù)據(jù)庫(kù)服務(wù)器,如下所示:C:\Users\USER>mysql-hlocalhost-utestUser1-pEnterpassword:*****WelcometotheMySQLmonitor.Commandsendwith;or\g.183.刪除用戶
在MySQL數(shù)據(jù)庫(kù)中,使用DROPUSER語(yǔ)句刪除用戶,也可以直接在mysql.user表中刪除用戶以及相關(guān)權(quán)限。(1)使用DROPUSER語(yǔ)句刪除普通用戶
使用DROPUSER語(yǔ)句刪除用戶的語(yǔ)法格式如下:DROPUSER<用戶1>[,<用戶2>]…其中,<用戶>用來(lái)指定需要?jiǎng)h除的用戶賬號(hào)。19【例9-6】使用DROPUSER語(yǔ)句刪除用戶'test1@'localhost'。SQL語(yǔ)句和執(zhí)行過(guò)程如下:mysql>DROPUSER'test1'@'localhost';QueryOK,0rowsaffected(0.00sec)在cmd命令行工具中,使用test1用戶登錄數(shù)據(jù)庫(kù)服務(wù)器,發(fā)現(xiàn)登錄失敗,說(shuō)明用戶已經(jīng)刪除,如下所示:C:\Users\USER>mysql-hlocalhost-utest1-pEnterpassword:****ERROR1045(28000):Accessdeniedforuser'test'@'localhost'(usingpassword:YES)20(2)使用DELETE語(yǔ)句刪除普通用戶
使用DELETE語(yǔ)句直接刪除mysql.user表中相應(yīng)的用戶信息,但必須擁有mysql.user表的DELETE權(quán)限,其基本語(yǔ)法格式如下:DELETEFROMmysql.userWHEREHost='hostname'ANDUser='username';【例9-7】使用DELETE語(yǔ)句刪除用戶'test2'@'localhost'。SQL語(yǔ)句和執(zhí)行過(guò)程如下所示:DELETEFROMmysql.userWHEREHost='localhost'ANDUser='test2';QueryOK,1rowsaffected(0.00sec)
結(jié)果顯示刪除成功,可使用SELETE語(yǔ)句查詢mysql.user表,確定該用戶是否已經(jīng)刪除。219.1.3權(quán)限管理1.查看用戶權(quán)限
在MySQL中,可以通過(guò)查看mysql.user表中的數(shù)據(jù)記錄來(lái)查看相應(yīng)的用戶權(quán)限,也可以使用SHOWGRANTS語(yǔ)句查詢用戶的權(quán)限。數(shù)據(jù)庫(kù)下的user表中存儲(chǔ)著用戶的基本權(quán)限,可使用SELECT語(yǔ)句來(lái)查看,代碼如下:SELECT*FROMmysql.user;要執(zhí)行該語(yǔ)句,必須擁有對(duì)user表的查詢權(quán)限。22【例9-8】創(chuàng)建testuser1用戶并查詢權(quán)限。SQL語(yǔ)句和執(zhí)行過(guò)程如下:mysql>CREATEUSER'testuser1'@'localhost';QueryOK,0rowsaffected(0.00sec)mysql>SHOWGRANTSFOR'testuser1'@'localhost';+---------------------------------------------------------------+|Grantsfortestuser1@localhost|+---------------------------------------------------------------+|GRANTUSAGEON*.*TO'testuser1'@'localhost'|+----------------------------------------------------------------+1rowinset(0.00sec)其中,USAGEON*.*表示該用戶對(duì)任何數(shù)據(jù)庫(kù)和任何表都沒(méi)有權(quán)限。23【例9-9】查詢r(jià)oot用戶的權(quán)限。SQL語(yǔ)句和執(zhí)行過(guò)程如下::mysql>SHOWGRANTSFOR'root'@'localhost';+------------------------------------------------------------------+|Grantsforroot@localhost|+----------------------------------------------------------------+|GRANTALLPRIVILEGESON*.*TO'root'@'localhost'WITHGRANTOPTION||GRANTPROXYON''@''TO'root'@'localhost'WITHGRANTOPTION|+------------------------------------------------------------------+2rowsinset(0.00sec)242.MySQL用戶授權(quán)
授權(quán)就是為某個(gè)用戶賦予某些權(quán)限。例如,可以為新建的用戶賦予查詢所有數(shù)據(jù)庫(kù)和表的權(quán)限。MySQL提供了GRANT語(yǔ)句來(lái)為用戶設(shè)置權(quán)限。
在MySQL中,擁有GRANT權(quán)限的用戶才可以執(zhí)行GRANT語(yǔ)句,其語(yǔ)法格式如下:GRANTpriv_type[(column_list)]ONdatabase.tableTOuser[IDENTIFIEDBY[PASSWORD]'password'][,user[IDENTIFIEDBY[PASSWORD]'password']]...[WITHwith_option[with_option]...]253.權(quán)限類型說(shuō)明(1)授予數(shù)據(jù)庫(kù)權(quán)限時(shí),<權(quán)限類型>的值,如表9.8所示26(2)授予表權(quán)限時(shí),<權(quán)限類型>的值,如表9.9所示。27
(3)授予列權(quán)限時(shí),<權(quán)限類型>的值只能指定為SELECT、INSERT和UPDATE,同時(shí)權(quán)限的后面需要加上列名列表column-list。
(4)授予用戶權(quán)限時(shí),<權(quán)限類型>除了可以指定為授予數(shù)據(jù)庫(kù)權(quán)限時(shí)的所有值之外,還可以是CREATEUSER或SHOWDATABASES,其中CREATEUSER表示授予用戶可以創(chuàng)建和刪除新用戶的權(quán)限,授予用戶可以使用SHOWDATABASES語(yǔ)句查看所有已有的數(shù)據(jù)庫(kù)的定義的權(quán)限。28【例9-10】使用GRANT語(yǔ)句創(chuàng)建一個(gè)新的用戶testUser,密碼為testPwd。用戶testUser對(duì)所有的數(shù)據(jù)有查詢、插入權(quán)限,并授予GRANT權(quán)限。
SQL語(yǔ)句和執(zhí)行過(guò)程如下:mysql>GRANTSELECT,INSERTON*.*->TO'testUser'@'localhost'->IDENTIFIEDBY'testPwd'->WITHGRANTOPTION;QueryOK,0rowsaffected,1warning(0.05sec)使用SHOWGRANTS語(yǔ)句查詢用戶testUser的權(quán)限,如下所示:mysql>SHOWGRANTSFOR'testUser'@'localhost';+-------------------------------------------------------------------------+|GrantsfortestUser@localhost|+-------------------------------------------------------------------------+|GRANTSELECT,INSERTON*.*TO'testUser'@'localhost'WITHGRANTOPTION|+-------------------------------------------------------------------------+1rowinset(0.00sec)結(jié)果顯示,testUser對(duì)所有數(shù)據(jù)庫(kù)的所有表有查詢、插入權(quán)限,并可以將這些權(quán)限賦予給別的用戶。294.刪除用戶權(quán)限
在MySQL中,可以使用REVOKE語(yǔ)句刪除某個(gè)用戶的某些權(quán)限(此用戶不會(huì)被刪除),在一定程度上可以保證系統(tǒng)的安全性。例如,如果數(shù)據(jù)庫(kù)管理員覺(jué)得某個(gè)用戶不應(yīng)該擁有DELETE權(quán)限,那么就可以刪除DELETE權(quán)限。
使用REVOKE語(yǔ)句刪除權(quán)限的語(yǔ)法格式有兩種形式。30(1)刪除用戶某些特定的權(quán)限,語(yǔ)法格式如下:REVOKEpriv_type[(column_list)]...ONdatabase.tableFROMuser[,user]...REVOKE語(yǔ)句中的參數(shù)與GRANT語(yǔ)句中的參數(shù)意義相同。其中:priv_type表示權(quán)限的類型;column_list表示權(quán)限作用于哪些列上,沒(méi)有該參數(shù)時(shí)作用于整個(gè)表上;user由用戶名和主機(jī)名構(gòu)成,格式為“username'@'hostname'”。312)刪除特定用戶的所有權(quán)限,語(yǔ)法格式如下:REVOKEALLPRIVILEGES,GRANTOPTIONFROMuser[,user]...【例9-11】使用REVOKE語(yǔ)句取消用戶testUser的插入權(quán)限。SQL語(yǔ)句和執(zhí)行過(guò)程如下:mysql>REVOKEINSERTON*.*FROM'testUser'@'localhost';QueryOK,0rowsaffected(0.01sec)mysql>SHOWGRANTSFOR'testUser'@'localhost';+------------------------------------------------------------------------------------+|GrantsfortestUser@localhost|+-------------------------------------------------------------------------------------+|GRANTSELECTON*.*TO'testUser'@'localhost'WITHGRANTOPTION|+------------------------------------------------------------------------------------+1rowinset(0.00sec)結(jié)果顯示,刪除testUser用戶的INSERT權(quán)限成功。329.2MySQL事務(wù)應(yīng)用實(shí)例9.2.1實(shí)例一9.2.2實(shí)例二339.2.1實(shí)例一模擬在張三的賬戶減少500元后,李四的賬戶還未增加500元時(shí),有其他事務(wù)訪問(wèn)數(shù)據(jù)庫(kù)的場(chǎng)景。由于代碼需要在兩個(gè)窗口中執(zhí)行,為了方便描述,將兩個(gè)窗口分別簡(jiǎn)稱為A窗口和B窗口。34
(1)首先使用CREATEDATABASE語(yǔ)句創(chuàng)建名為mybank的數(shù)據(jù)庫(kù),使用CREATETABLE語(yǔ)句創(chuàng)建數(shù)據(jù)表bank(customerName,currentMoney),使用INSERT語(yǔ)句插入兩行值(‘張三,1000.00’)和(‘李四,1.00’),作為本實(shí)例的準(zhǔn)備工作。35
(2)分別在A、B兩個(gè)窗口開啟事務(wù)36在A窗口中開啟一個(gè)事務(wù),并更新mybank數(shù)據(jù)庫(kù)中bank表的數(shù)據(jù),SQL語(yǔ)句和運(yùn)行結(jié)果如下:mysql>USEmybank;Databasechangedmysql>BEGIN;QueryOK,0rowsaffected(0.00sec)mysql>UPDATEbankSETcurrentMoney=currentMoney-500WHEREcustomerName='張三';QueryOK,1rowaffected(0.05sec)Rowsmatched:1Changed:1Warnings:0
在B窗口中查詢bank數(shù)據(jù)表中的數(shù)據(jù),SQL語(yǔ)句和運(yùn)行結(jié)果如下:mysql>SELECT*FROMmybank.bank;+-------------------+------------+|customerName|currentMoney|+------------------+------------+|張三|1000.00||李四|1.00|+------------------+-------------+2rowsinset(0.00sec)
(3)在A窗口中繼續(xù)執(zhí)行事務(wù)并提交事務(wù),SQL語(yǔ)句和運(yùn)行結(jié)果如下:mysql>UPDATEbankSETcurrentMoney=currentMoney+500WHEREcustomerName='李四';QueryOK,1rowaffected(0.05sec)Rowsmatched:1Changed:1Warnings:0mysql>COMMIT;QueryOK,0rowsaffected(0.07sec)37
(4)在B窗口中再次查詢bank數(shù)據(jù)表的數(shù)據(jù),SQL語(yǔ)句和運(yùn)行結(jié)果如下:mysql>SELECT*FROMmybank.bank;+------------------+------------------+|customerName|currentMoney|+------------------+------------------+|張三|500.00||李四|501.00|+----------------+---------------------+2rowsinset(0.00sec)38
在A窗口中執(zhí)行COMMIT提交事務(wù)后,對(duì)數(shù)據(jù)所做的更新將一起提交,其他事務(wù)會(huì)話讀取到的是更新后的數(shù)據(jù)。從結(jié)果可以看出張三和李四的總賬戶余額和轉(zhuǎn)賬前保持一致,這樣數(shù)據(jù)從一個(gè)一致性狀態(tài)更新到另一個(gè)一致性狀態(tài)。399.2.2實(shí)例二在實(shí)例一中,張三的賬戶余額已經(jīng)減少到500元,如果再轉(zhuǎn)出1000元,將會(huì)出現(xiàn)余額為負(fù)數(shù),因此需要回滾到原始狀態(tài)。40SQL語(yǔ)句和運(yùn)行結(jié)果如下所示:mysql>BEGIN;QueryOK,0rowsaffected(0.00sec)mysql>UPDATEbankSETcurrentMoney=currentMoney-1000WHEREcustomerName='張三';QueryOK,1rowaffected(0.04sec)Rowsmatched:1Changed:1Warnings:0mysql>ROLLBACK;QueryOK,0rowsaffected(0.07sec)mysql>SELECT*FROMmybank.bank;+-------------------+------------------+|customerName|currentMoney|+------------------+------------------+|張三|500.00||李四|501.00|+------------------+------------------+2rowsinset(0.00sec)41從結(jié)果可以看出,執(zhí)行事務(wù)回滾后,賬戶數(shù)據(jù)恢復(fù)到初始狀態(tài),即該事務(wù)執(zhí)行之前的狀態(tài)。在數(shù)據(jù)庫(kù)操作中,為了有效保證并發(fā)讀取數(shù)據(jù)的正確性,提出了事務(wù)的隔離級(jí)別。在上面實(shí)例一和二的演示中,事務(wù)的隔離級(jí)別為默認(rèn)隔離級(jí)別。在MySQL中,事務(wù)的默認(rèn)隔離級(jí)別是REPEATABLE-READ(可重讀)隔離級(jí)別,即事務(wù)未結(jié)束時(shí)(未執(zhí)行COMMIT或ROLLBACK),其它會(huì)話只能讀取到未提交數(shù)據(jù)。42MySQL事務(wù)是一項(xiàng)非常消耗資源的功能,在使用過(guò)程中要當(dāng)注意以下四點(diǎn)。(1)事務(wù)盡可能簡(jiǎn)短(2)事務(wù)中訪問(wèn)的數(shù)據(jù)量盡量最少(3)查詢數(shù)據(jù)時(shí)盡量不要使用事務(wù)(4)在事務(wù)處理過(guò)程中盡量不要出現(xiàn)等待用戶輸入的操作439.3MySQL數(shù)據(jù)庫(kù)備份與恢復(fù)9.3.1MySQL數(shù)據(jù)庫(kù)備份9.3.2MySQL數(shù)據(jù)庫(kù)恢復(fù)449.3.1MySQL數(shù)據(jù)庫(kù)備份1.備份一個(gè)數(shù)據(jù)庫(kù)
使用mysqldump命令備份一個(gè)數(shù)據(jù)庫(kù),其語(yǔ)法格式如下:mysqldump-uusername-pdbname[tbname...]>filename.sql【例9-12】使用root用戶備份test數(shù)據(jù)庫(kù)下的student表。打開命令行(cmd)窗口,輸入備份命令和密碼,運(yùn)行過(guò)程如下:C:\Windows\system32>mysqldump-uroot-pteststudent>C:\student.sqlEnterpassword:****452.備份多個(gè)數(shù)據(jù)庫(kù)
如果要使用mysqldump命令備份多個(gè)數(shù)據(jù)庫(kù),需要使用“--databases”參數(shù)。備份多個(gè)數(shù)據(jù)庫(kù)的語(yǔ)法格式如下:mysqldump-uusername-P--databasesdbname1dbname2...>filename.sql加上“--databases”參數(shù)后,需指定至少一個(gè)數(shù)據(jù)庫(kù)名稱,多個(gè)數(shù)據(jù)庫(kù)名稱之間用空格隔開?!纠?-13】使用root用戶備份test數(shù)據(jù)庫(kù)和mysql數(shù)據(jù)庫(kù)。打開命令行(cmd)窗口,輸入命令如下:
mysqldump-uroot-p--databasestestmysql>C:\testandmysql.sql執(zhí)行完后,可以在C:\下面看到名為testandmysql.sql的文件,這個(gè)文件中存儲(chǔ)著這兩個(gè)數(shù)據(jù)庫(kù)的信息。463.備份所有數(shù)據(jù)庫(kù)mysqldump命令備份所有數(shù)據(jù)庫(kù)的語(yǔ)法格式如下:mysqldump-uusername-P--all-databases>filename.sql使用“--all-databases”參數(shù)時(shí),不需要指定數(shù)據(jù)庫(kù)名稱。【例9-14】使用root用戶備份所有數(shù)據(jù)庫(kù)。打開命令行(cmd)窗口,輸入命令如下:mysqldump-uroot-p--all-databases>C:\all.sql執(zhí)行完后,可以在C:\下面看到名為all.sql的文件,這個(gè)文件中存儲(chǔ)著所有數(shù)據(jù)庫(kù)的信息。479.3.2MySQL數(shù)據(jù)庫(kù)恢復(fù)當(dāng)數(shù)據(jù)丟失或意外損壞時(shí),可以通過(guò)恢復(fù)已經(jīng)備份的數(shù)據(jù)來(lái)盡量減少數(shù)據(jù)的丟失和破壞造成的損失。在MySQL中,可以使用mysql命令來(lái)恢復(fù)備份的數(shù)據(jù)。mysql命令可以執(zhí)行備份文件中的CREATE語(yǔ)句和INSERT語(yǔ)句,即mysql命令可以通過(guò)CREATE語(yǔ)句來(lái)創(chuàng)建數(shù)據(jù)庫(kù)和表,通過(guò)INSERT語(yǔ)句來(lái)插入備份的數(shù)據(jù)。mysql命令語(yǔ)法格式如下:mysql-uusername-P[dbname]<filename.sql48【例9-15】使用root用戶恢復(fù)所有數(shù)據(jù)庫(kù)。打開命令行(cmd)窗口,輸入命令如下:mysql-uroot-p<C:\all.sql執(zhí)行完后,MySQL數(shù)據(jù)庫(kù)就已經(jīng)恢復(fù)了all.sql文件中的所有數(shù)據(jù)庫(kù)。需要注意的是,如果使用--all-databases參數(shù)備份了所有的數(shù)據(jù)庫(kù),那么恢復(fù)時(shí)不需要指定數(shù)據(jù)庫(kù)。因?yàn)?,其?duì)應(yīng)的sql文件中含有CREATEDATABASE語(yǔ)句,可以通過(guò)該語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)。創(chuàng)建數(shù)據(jù)庫(kù)之后,可以執(zhí)行sql文件中的USE語(yǔ)句選擇數(shù)據(jù)庫(kù),然后在數(shù)據(jù)庫(kù)中創(chuàng)建表并且插入記錄499.4MySQL日志9.4.1MySQL日志及分類9.4.2MySQL二進(jìn)制日志9.4.3MySQL使用日志還原數(shù)據(jù)庫(kù)509.4.1MySQL日志及分類
日志是數(shù)據(jù)庫(kù)的重要組成部分,主要用來(lái)記錄數(shù)據(jù)庫(kù)的運(yùn)行情況、日常操作和錯(cuò)誤信息。
在MySQL中,日志可以分為二進(jìn)制日志、錯(cuò)誤日志、通用查詢?nèi)罩竞吐樵內(nèi)罩?。?duì)于MySQL的管理工作而言,這些日志文件是不可缺少的。
在MySQL所支持的日志文件里,除了二進(jìn)制日志文件外,其它日志文件都是文本文件。默認(rèn)情況下,MySQL只會(huì)啟動(dòng)錯(cuò)誤日志文件,而其它日志則需要手動(dòng)啟動(dòng)。
使用日志文件有優(yōu)點(diǎn)也有缺點(diǎn)。啟動(dòng)日志文件后,雖然可以對(duì)MySQL服務(wù)器性能進(jìn)行維護(hù),但是會(huì)降低MySQL的執(zhí)行速度。日志文件還會(huì)占用大量的硬盤空間。
因此,是否啟動(dòng)日志文件以及啟動(dòng)何種類型的日志文件要根據(jù)具體的應(yīng)用來(lái)決定。519.4.2MySQL二進(jìn)制日志
二進(jìn)制日志(BinaryLog)也可叫作變更日志(UpdateLog),是MySQL中非常重要的日志。
默認(rèn)情況下,二進(jìn)制日志功能是關(guān)閉的。查看二進(jìn)制日志是否開啟的命令格式如下:mysql>SHOWVARIABLESLIKE'log_bin';+------------------+-------+|Variable_name|Value|+------------------+-------+|log_bin|OFF|+-------------------+-------+1rowinset,1warning(0.02sec)
結(jié)果顯示,二進(jìn)制日志是關(guān)閉的。521.啟動(dòng)二進(jìn)制日志文件通過(guò)在配置文件中添加log-bin選項(xiàng)來(lái)開啟二進(jìn)制日志,命令格式如下:[mysqld]log-bin=dir/[filename]其中,dir參數(shù)指定二進(jìn)制文件的存儲(chǔ)路徑;filename參數(shù)指定二進(jìn)制文件的文件名,其形式為filename.number。532.查看二進(jìn)制日志文件(1)查看二進(jìn)制日志文件列表查看MySQL中的二進(jìn)制日志文件列表,命令及執(zhí)行過(guò)程如下:mysql>SHOWbinarylogs;+----------------------------+-----------------------+|Log_name|File_size|+----------------------------+------------+------------+|hostname-bin.000001|177||hostname-bin.000002|154|+----------------------------+-------------+----------+2rowsinset(0.00sec)54
(2)查看當(dāng)前正在寫入的二進(jìn)制日志文件查看當(dāng)前MySQL中正在寫入的二進(jìn)制日志文件,命令及執(zhí)行過(guò)程如下:mysql>SHOWmasterstatus;+----------+-------+----------+------------+---------------------+|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|Executed_Gtid_Set|+----------+-------+----------+------------+--------------------+|hostname-bin.000002|154||||+----------+-------+----------+------------+--------------------+1rowinset(0.00sec)55
(3)查看二進(jìn)制日志文件內(nèi)容二進(jìn)制日志使用二進(jìn)制格式存儲(chǔ),不能直接打開查看。需使用mysqlbinlog命令,查看二進(jìn)制日志,語(yǔ)法格式如下:mysqlbinlogfilename.number需要注意的是,mysqlbinlog命令只在當(dāng)前文件夾下查找指定的二進(jìn)制日志,因此需要在二進(jìn)制日志所在的目錄下運(yùn)行該命令,否則將會(huì)找不到指定的二進(jìn)制日志文件。56【例9-16】使用mysqlbinlog命令,查看C:\log目錄下的mylog.000001文件。打開命令行(cmd)窗口,代碼執(zhí)行如下:C:\Users\11645>cdC:\logC:\log>mysqlbinlogmylog.000001/*!50530SET@@SESSION.PSEUDO
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 算法類課程設(shè)計(jì)報(bào)告
- 2025版智慧城市建設(shè)項(xiàng)目監(jiān)理專業(yè)承包合同范本3篇
- 2025年度城市道路橋梁伸縮縫安裝與維護(hù)施工合同3篇
- 美容護(hù)膚初步課程設(shè)計(jì)
- 二零二五年度VIP會(huì)員專屬旅行定制服務(wù)協(xié)議3篇
- 2024年知名品牌服裝設(shè)計(jì)定制合同
- 2025年高純銦及氧化銦合作協(xié)議書
- 2025版金融理財(cái)顧問(wèn)服務(wù)合同范本協(xié)議書
- 二零二五年公路橋梁施工勞務(wù)分包合同示范2篇
- 2024年物流運(yùn)輸與人力資源服務(wù)合同
- 中國(guó)普通食物營(yíng)養(yǎng)成分表(修正版)
- 醫(yī)院抗菌藥物遴選和采購(gòu)管理制度
- 《法學(xué)概論》課程教學(xué)大綱
- 西安市城市規(guī)劃管理技術(shù)規(guī)定
- Geoframe操作流程(詳解版)
- 三類醫(yī)療器械最新管理制度修訂版(2022)
- 環(huán)境清潔消毒與醫(yī)院感染控制ppt課件
- 腦卒中康復(fù)治療流程圖
- 《Something Just Like This》歌詞
- 人民網(wǎng)刪除稿件(帖文)申請(qǐng)登記表
- 橋梁加固、拼寬流程圖(共9頁(yè))
評(píng)論
0/150
提交評(píng)論