MySQL数据库任务驱动式教程(第3版)项目七.pptx
1 项目七数据库安全与性能优化项目七数据库安全与性能优化MySQL数据库任务驱动式教程(第3版)(微课版)人民邮电出版社北京2 项目七数据库安全与性能优化任务 17 用户与权限【任务背景】MySQL用户包括root用户和普通用户。这两种用户的权限是不一样的。root用户是管理员,拥有所有的权限,包括创建用户、删除用户和修改普通用户的密码等管理权限;普通用户只拥有创建该用户时赋予它的权限。某校的教学管理系统,对用户权限的要求如下:教务处管理员有对课程、学生表和成绩表的所有权限(INSERT、UPDATE、DELETE等);任课教师可以录入成绩,但不能修改学生表、课程表数据;学生只能查看(SELECT)相关表数据,而不能更新、删除。那么,该怎样建立这些用户并设置相应的权限呢?数据库的安全性是指,只允许合法用户进行其权限范围内的数据库相关操作,保护数据库以防止任何不合法的使用所造成的数据泄露、更改或破坏。数据库安全性措施主要涉及以下两个方面的问题。(1)用户认证问题。(2)访问权限问题。3 项目七数据库安全与性能优化【任务背景】MySQL8.0新加了很多功能。其中在用户管理中增加了角色的管理;默认的密码加密方式也做了调整,由之前的SHA1改为了SHA2;同时,增加了MySQL5.7的禁用用户和用户过期的功能设置,提高了数据库的安全性。【任务要求】本任务将学习用CREATEUSER语句来创建用户,用ALTER语句设置用户密码,用GRANT语句授予权限,以及使用REVOKE语句收回权限,通过修改MySQL授权表来创建用户、设置密码和授予权限,学习掌握权限转移、权限限制以及密码管理策略、角色管理等方面的知识和技能。任务 17 用户与权限续4 项目七数据库安全与性能优化创建用户账户用CREATEUSER分别创建能在本地主机、任意主机连接数据库的用户,并设置密码。语法格式如下。用CREATE USER创建用户CREATEUSERuserIDENTIFIEDBYPASSWORDpassword,userIDENTIFIEDBYPASSWORDpassword.【任务17.1】创建用户KING,从本地主机连接MySQL服务器。mysqlCREATEUSERKINGlocalhost;【任务17.2】创建两个用户,用户名为palo,分别从任意主机和本地主机连接MySQL服务器,指定用户密码为“123456”。mysqlCREATEUSERpalo%IDENTIFIEDBY123456,palolocalhostIDENTIFIEDBY123456;创建的用户信息将保存在USER表中。如下命令可以查看创建的用户情况。MySQLSELECTUSER,HOST,AUTHENTICATION_STRINGFROMUSER;运行结果如图17.1所示。5 项目七数据库安全与性能优化图17.1【任务17.2】运行结果创建用户账户6 项目七数据库安全与性能优化创建用户账户n只有root用户才可以设置或修改当前用户或其他特定用户的密码。修改用户密码【任务17.3】查看MySQL8.0中用户表默认的身份验证插件。mysqlselectuser,host,pluginfrommysql.user;运行结果如图所示。图17.2【任务17.3】运行结果【任务17.4】修改king的密码为queen。mysqlALTERUSERkinglocalhostIDENTIFIEDWITHmysql_native_passwordBYqueen;mysqlflushprivileges;【任务17.5】修改密码时效为永不过期。mysqlALTERUSERroot%IDENTIFIEDBY123456PASSWORDEXPIRENEVER;7 项目七数据库安全与性能优化创建用户账户n重命名用户名的语法格式如下。nRENAMEUSERold_userTOnew_user,old_userTOnew_user.n其中,old_user为已经存在的SQL用户,new_user为新的SQL用户。重命名用户名【任务17.6】修改king用户名为ken。mysqlRENAMEUSERkinglocalhosttokenlocalhost;8 项目七数据库安全与性能优化授予用户权限n新的SQL用户不允许访问属于其他SQL用户的表,也不能立即创建自己的表,它必须被授权。n在DOS终端运行如下命令,用刚才创建的king用户登录MySQL服务器。cdC:ProgramFilesMySQLMySQLServer8.0binMySQLukingp123456尝试使用USEXSCJ语句进入XSCJ数据库,将出现图17.3所示的错误。因为king用户尚未被授权,所以不能进入XSCJ数据库。图17.3用户未授权错误提示9 项目七数据库安全与性能优化授予用户权限nMySQL的权限可以分为多个层级。关于MySQL的权限数据库层级全局层级列层级表层级便用ON*.*语法赋予权限。便用ONdb_name.*语法赋予权限。使用ONdb_name.tbl_name语法赋予权限。语法格式采用SELECT(col1,col2)、INSERT(col1,col2)和UPDATE(col1,col2)。10 项目七数据库安全与性能优化授予用户权限n新创建的用户还没有任何权限,不能访问数据库,不能做任何事情。针对不同用户对数据库的实际操作要求,分别授予用户对特定表的特定字段、特定表、数据库的特定权限。n语法格式如下。用GRANT授权GRANTpriv_type(column_list),priv_type(column_list).ONobject_typetbl_name|*|.|db_name.*TOuserIDENTIFIEDBYPASSWORDpassword,userIDENTIFIEDBYPASSWORDpassword.WITHwith_optionwith_option.11 项目七数据库安全与性能优化授予用户权限授予对字段或表的权限字段或表的权限与说明见表17.1。01OPTION权限说明SELECT给予用户使用SELECT语句访问特定表的权限INSERT给予用户使用INSERT语句向一个特定表中添加行的权限DELETE给予用户使用DELETE语句从一个特定表中删除行的权限UPDATE给予用户使用UPDATE语句修改特定表中值的权限REFERENCES给予用户创建一个外键来参照特定表的权限CREATE给予用户使用特定的名字创建一个表的权限ALTER给予用户使用ALTERTABLE语句修改表的权限INDEX给予用户在表上定义索引的权限DROP给予用户删除表的权限ALL或ALLPRIVILEGES给予用户对表所有的权限12 项目七数据库安全与性能优化授予用户权限【任务17.7】授予用户king对students表的S_NO列和S_NAME列的UPDATE权限。mysqlGRANTUPDATE(S_NO,S_NAME)ONstudentsTOkinglocalhost;【任务17.8】授予用户peter、king查看、更新JXGL库STUDENTS表的权限。mysqlGRANTSELECT,UPDATEONJXGL.studentsTOpeterlocalhost,kinglocalhost;【任务17.9】授予用户peter在students表上定义索引的权限。mysqlGRANTINDEXONJXGL.STUDENTSTOpeterlocalhost;13 项目七数据库安全与性能优化授予用户权限授予对库的权限数据库的权限与说明见表17.2。01OPTION权限说明SELECT给予用户使用SELECT语句访问所有表的权限INSERT给予用户使用INSERT语句向所有表中添加行的权限DELETE给予用户使用DELETE语句从所有表中删除行的权限UPDATE给予用户使用UPDATE语句修改所有表中值的权限REFERENCES给予用户创建一个外键来参照所有的表的权限CREATE给予用户使用特定的名字创建一个表的权限ALTER给予用户使用ALTERTABLE语句修改表的权限INDEX给予用户在所有表上定义索引的权限DROP给予用户删除所有表和视图的权限CREATETEMPORARYTABLES给予用户在特定数据库中创建临时表的权限CREATEVIEW给予用户在特定数据库中创建新的视图的权限SHOWVIEW给予用户查看特定数据库中已有视图的视图定义的权限CREATEROUTINE给予用户为特定的数据库创建存储过程和存储函数等权限ALTERROUTINE给予用户更新和删除数据库中已有的存储过程和存储函数等权限EXECUTEROUTINE给予用户调用特定数据库的存储过程和存储函数的权限LOCKTABLES给予用户锁定特定数据库的已有表的权限ALL或ALLPRIVILEGES表示所有权限14 项目七数据库安全与性能优化授予用户权限【任务17.10】授予用户king对JXGL数据库中所有表SELECT、INSERT、UPDATE、DELETE、CREATE、DROP的权限。mysqlGRANTSELECT,INSERT,UPDATE,DELETE,CREATE,DROPONJXGL.*TOkinglocalhost;【任务17.11】授予用户david对JXGL数据库中所有表所有的权限。mysqlGRANTALLONJXGL.*TOdavidlocalhost;【任务17.12】授予用户stone为JXGL数据库创建存储过程和存储函数权限。mysqlGRANTCREATEROUTINEONJXGL.*TOstonelocalhost;授予对所有库的权限【任务17.13】授予用户stone操作所有数据库的权限。03OPTIONmysqlGRANTCREATEUSERON*.*TOstonelocalhost;15 项目七数据库安全与性能优化用REVOKE收回权限n根据实际情况需要,可以使用REVOKE语句收回用户的部分或所有权限。n语法格式如下(第一种)。REVOKEpriv_type(column_list),priv_type(column_list).ONtbl_name|*|.|db_name.*FROMuser,user.n语法格式如下(第二种)。REVOKEALLPRIVILEGES,GRANTOPTIONFROMuser,user.n其中,第一种格式用来收回某些特定的权限,第二种格式用来收回某用户的所有权限。【任务17.14】收回用户king在JXGL库的SELECT权限。mysqlREVOKEselectonJXGL.*FROMkinglocalhost;【任务17.15】收回用户king在JXGL库的所有权限。mysqlREVOKEallonJXGL.*FROMkinglocalhost;16 项目七数据库安全与性能优化权限限制WITH子句也可以对一个用户的权限进行限制,语句如下。MAX_QUERIES_PER_HOURcount表示每小时可以查询数据库的最大次数。MAX_CONNECTIONS_PER_HOURcount表示每小时可以连接数据库的最大次数。MAX_UPDATES_PER_HOURcount表示每小时可以修改数据库的最大次数。其中,count表示次数。【任务17.17】授予用户Jim每小时只能处理一条SELECT语句的权限。mysqlGRANTSELECTONXSTOJimlocalhostWITHMAX_QUERIES_PER_HOUR1;【任务17.18】授予用户king每小时可以发出查询20次、每小时可以发出更新10次、每小时可以连接数据库5次的权限。mysqlGRANTALLON*.*TOkinglocalhostIDENTIFIEDBYfrankWITHMAX_QUERIES_PER_HOUR20MAX_UPDATES_PER_HOUR10MAX_CONNECTIONS_PER_HOUR5;17 项目七数据库安全与性能优化密码管理策略要全局建立自动密码到期策略,请使用default_password_lifetime系统变量。其默认值为0,表示禁用自动密码到期。如果default_password_lifetime的值为正整数N,则表示允许的密码生存期为N天,以便密码必须每N天更改。该变量可以加在配置文件中。过期时间管理(1)要建立全局策略,密码的使用期限大约为6个月,可在服务器f文件中使用以下命令启动服务器。mysqlddefault_password_lifetime=180(2)要建立全局策略,以便密码永不过期,请将default_password_lifetime设置为0。mysqlddefault_password_lifetime=0这个参数是可以动态设置并保存的,示例代码如下。SETPERSISTdefault_password_lifetime=180;SETPERSISTdefault_password_lifetime=0;18 项目七数据库安全与性能优化密码管理策略(3)创建和修改带有密码过期的用户,账户特定的到期时间设置示例如下。要求每60天更换密码的代码如下。CREATEUSERjacklocalhostPASSWORDEXPIREINTERVAL60DAY;ALTERUSERjacklocalhostPASSWORDEXPIREINTERVAL60DAY;禁用密码到期的代码如下。CREATEUSERjacklocalhostPASSWORDEXPIRENEVER;ALTERUSERjacklocalhostPASSWORDEXPIRENEVER;遵循全局到期策略的代码如下。CREATEUSERwangweilocalhostPASSWORDEXPIREDEFAULT;ALTERUSERwangweilocalhostPASSWORDEXPIREDEFAULT;19 项目七数据库安全与性能优化密码管理策略MySQL允许限制重复使用以前的密码,可以根据密码更改次数、已用时间或两者来建立重用限制。账户的密码历史由过去分配的密码组成。MySQL可以限制从此历史记录中选择新密码。MySQL用户密码重用策略设置(1)如果根据密码更改次数限制账户,则无法从指定数量的最新密码中选择新密码。例如,如果密码更改的最小数量设置为3,则新密码不能与任何最近的3个密码相同。(2)如果账户因时间的限制而被限制,则无法从历史记录中的新密码中选择新密码,该新密码时间限制不会超过指定的天数。例如,如果密码重用间隔设置为60天,则新密码不得与最近60天内选择的密码相同。注意:空密码不记录在密码历史记录中,并随时可以重复使用。20 项目七数据库安全与性能优化角色管理MySQL提供的角色管理功能总结如下。CREATEROLE与DROPROLE为角色创建和删除。GRANT与REVOKE为用户的角色分配和撤销权限。SHOWGRANTS表示显示用户的角色权限和角色分配。SETDEFAULTROLE表示指定哪些账户角色默认处于活动状态。SETROLE表示更改当前会话中的活动角色。CURRENT_ROLE()表示显示当前会话中的活动角色。21 项目七数据库安全与性能优化角色管理【任务17.19】应用程序使用名为app_db的数据库,假设需要1个开发人员账户、2个需要只读访问权限的用户,以及1个需要读取/写入权限的用户,应使用角色功能分配权限。创建角色并授予用户角色权限CREATEUSERdev1localhostIDENTIFIEDBY123456;CREATEUSERread_user1localhostIDENTIFIEDBY123456;CREATEUSERread_user2localhostIDENTIFIEDBY123456;CREATEUSERrw_user1localhostIDENTIFIEDBY123456;n首先,使用CREATEUSER创建用户。CREATEROLEapp_developer,app_read,app_write;GRANTALLONapp_db.*TOapp_developer;GRANTSELECTONapp_db.*TOapp_read;GRANTINSERT,UPDATE,DELETEapp_db.*TOapp_write;n然后,使用CREATEROLE创建角色并用GRANT分配权限给角色。GRANTapp_developerTOdev1localhost;GRANTapp_readTOread_user1localhost,read_user2localhost;GRANTapp_read,app_writeTOrw_user1localhost;n最后,为每个用户分配其所需的权限,使用GRANT语句列举每个用户的个人权限。22 项目七数据库安全与性能优化角色管理要验证分配给用户的权限,可使用SHOWGRANTS,如下所示。检查角色权限mysqlSHOWGRANTSFORdev1localhost;mysqlSHOWGRANTSFORdev1localhostUSINGapp_developer;n但是,它会显示每个授予的角色,而不会将其显示为角色所代表的权限。如果要显示角色权限,需要添加一个USING。mysqlSHOWGRANTSFORread_user1localhostUSINGapp_read;n同样验证其他类型的用户。23 项目七数据库安全与性能优化角色管理正如可以授权某个用户角色一样,也可以从账户中撤销这些角色。撤销角色或角色权限REVOKEroleFROMuser;REVOKEINSERT,UPDATE,DELETEONapp_db.*FROMapp_write;nREVOKE可以修改角色权限。这不仅影响角色本身权限,还影响任何被授予该角色的用户权限。假设想临时让所有用户只读,可使用REVOKE从该app_write角色中撤销修改权限。mysqlSHOWGRANTSFORapp_write;nSHOWGRANTS语句可以与角色一起使用,查询查看app_write角色权限:mysqlSHOWGRANTSFORrw_user1localhostUSINGapp_read,app_write;n从角色中撤销权限会影响到该角色中每个用户的权限,因此rw_user1现在已经没有表修改权限(INSERT、UPDATE、和DELETE权限已经没有了)。GRANTINSERT,UPDATE,DELETEONapp_db.*TOapp_write;n实际上,rw_user1读/写用户已成为只读用户,被授予app_write角色的任何其他用户也会这样,说明通过修改角色就可以个人账户的权限。n要恢复角色的修改权限,只需重新授权给该角色即可。n现在rw_user1再次具有修改权限,就像授权该app_write角色的其他任何账户一样。24 项目七数据库安全与性能优化角色管理要删除角色,我们可以使用DROPROLE,如下所示。DROPROLEapp_read,app_write;删除角色会从授权它的每个账户中撤销该角色。删除角色25 项目七数据库安全与性能优化角色管理假设应用开发项目在MySQL中的角色出现之前就开始了,那么与该项目相关联的所有用户都是直接被授予权限,而不是被授予角色权限。其中一个账户是最初被授予权限的开发人员用户,代码如下所示。角色和用户在实际中的应用CREATEUSERold_app_devlocalhostIDENTIFIEDBYold_app_devpass;GRANTALLONold_app.*TOold_app_devlocalhost;如果此开发人员离开项目,则有必要将权限分配给其他用户;或者项目参与人增多,则可能需要多个用户。以下是解决该问题的一些方法。(1)不使用角色:更改账户密码,使原始开发人员不能使用它,并让新的开发人员使用该账户。ALTERUSERold_app_devlocalhostIDENTIFIEDBYnew_password;(2)使用角色:锁定账户以防止任何人使用它来连接服务器。ALTERUSERold_app_devlocalhostACCOUNTLOCK;然后将该账户视为角色。对于每个新开发项目的开发人员,创建一个新账户并授予其原始开发人员账户。CREATEUSERnew_app_dev1localhostIDENTIFIEDBYnew_password;GRANTold_app_devlocalhostTOnew_app_dev1localhost;其效果是将原始开发人员账户权限分配给新账户。26 项目七数据库安全与性能优化项目实践用CREATEUSER语句创建一个DAVID用户,从本地主机登录MySQL服务器。用CREATEUSER语句同时创建两个用户ZHUANG和WANG,从任意主机登录MySQL服务器,并指定密码分别为“333”和“222”。用ALTER语句对用户DAVID设置密码为“123”。用GRANT创建用户FANG,并指定密码为“123456”。用GRANT授予用户ZHUANG访问数据库的所有权限,授予用户WANG对Employees表查看、更新的权限。授予WANG每小时只能处理10条SELECT语句的权限。授予DAVID每小时可以发出查询10次、每小时可以连接数据库6次、每小时可以发出更新5次的权限。用REVOKE语句收回用户WANG的权限。利用角色功能,授予DAVID对YSGL数据库的读写权限。在YSGL数据库中进行如下操作。27 项目七数据库安全与性能优化习题一、填空题1在MySQL中,可以使用_语句来为指定的数据库添加用户。2在MySQL中,可以使用_语句来实现权限的撤销。二、单项选择题1MySQL中存储用户全局权限的表是_。Atables_privBprocs_privCcolumns_privDuser2删除用户的语句是_。AdropuserBdeleteuserCdroprootDtruncateuser3给名字是zhangsan的用户分配对数据库studb中的stuinfo表的查询和插入数据权限的语句是_。Agrantselect,insertonstudb.stuinfoforzhangsanlocalhostBgrantselect,insertonstudb.stuinfotozhangsanlocalhostCgrantzhangsanlocalhosttoselect,insertforstudb.stuinfoDgrantzhangsanlocalhosttostudb.stuinfoonselect,insert28 项目七数据库安全与性能优化习题4创建用户的语句是_。AjoinuserBcreateuserCcreaterootDMySQLuser5修改自己的MySQL服务器密码的语句是_。AMySQLBgrantCsetpasswordDchangepassword三、编程与应用题用CREATEUSER语句创建一个用户zhang,登录MySQL服务器的密码为“123456”,同时授予该用户在数据库bookdb的表contentinfo上拥有SELECT和UPDATE权限。四、简答题1在MySQL中可以授予的权限有哪几组?2在MySQL的权限授予语句中,可用于指定权限级别的值有哪几类格式?29 项目七数据库安全与性能优化任务 18 数据库备份与恢复【任务背景】多种原因可能导致数据库系统的数据被破坏。例如,数据库系统在运行过程中出现故障,计算机系统出现操作失误或系统故障,计算机病毒或者物理介质故障等。银行数据库系统、股票交易系统等重要数据库存储着客户账户的重要信息,绝对不允许出现故障和数据破坏。为了保证数据的安全,需要定期对数据进行备份。如果数据库中的数据出现了错误,可以使用备份进行数据还原,将损失降至最低。【任务要求】本任务将学习使用SELECTINTOOUTFILE、LOADDATAINFILE、SOURCE语句备份与恢复表数据,使用MySQL的管理工具mysqldump和mysqlimport备份与恢复数据,以及用日志备份与恢复数据的方法。30 项目七数据库安全与性能优化用SELECTINTOOUTFILE备份表数据数据库备份与恢复的方法之一是使用SELECTINTOOUTFILE语句把表数据导出到一个文件中,并用LOADDATAINFILE语句恢复数据。【任务18.1】备份students表。mysqlSELECT*FROMstudentsINTOOUTFILEstudents.TXT;n系统将students表的数据备份在students.TXT中,默认保存在DATA目录下(C:ProgramDataMySQLMySQLServer5.5dataJXGL)。31 项目七数据库安全与性能优化用LOADDATAINFILE恢复表数据数据库备份与恢复的方法之一是使用SELECTINTOOUTFILE语句把表数据导出到一个文件中,并用LOADDATAINFILE语句恢复数据。【任务18.2】恢复students表数据。mysqlDELETEFROMstudents;n尝试用DELETE删除students表的某些数据或全部数据。n用下面的语句恢复。mysqlLOADDATAINFILED:/BACKUP/students.TXTINTOTABLEstudents;n可用SELECT*FROMstudents查看恢复情况。【任务18.3】用备份好的course.xls文件恢复course表数据。mysqlLOADDATAINFILED:/BACKUP/course.xlsINTOTABLEcourse;32 项目七数据库安全与性能优化用mysqldump备份与恢复语法格式如下。mysqldumphhostname-uusername-ppasswordoptionsdb_nameTablefilenameMySQL提供了很多免费的客户端程序和实用工具,在MySQL目录下的bin子目录中存储着这些客户端程序。不同的MySQL客户端程序可以连接服务器以访问数据库或执行不同的管理任务。下面简单介绍一下mysqldump程序和mysqlimport程序。mysqldump默认导出的.sql文件中不仅包含了表数据,还包含导出数据库中所有数据表的结构信息。另外,使用mysqldump程序导出的SQL文件如果不带绝对路径,默认是保存在bin目录下的。33 项目七数据库安全与性能优化图18.1进入bin目录用mysqldump备份与恢复打开DOS终端,进入bin目录,路径为“C:ProgramFilesMySQLMySQLServer5.5bin”,如图18.1所示。进入mysqldump34 项目七数据库安全与性能优化用mysqldump备份与恢复备份与恢复表备份单个表【任务18.4】备份students表,将文件保存在“D:/BACKUP”文件夹中。01OPTIONmysqldump-uroot-p123456JXGLSTUDENTSD:/BACKUP/students.sql同时备份多个表【任务18.5】备份JXGL数据库的students、course和score表的数据和结构。02OPTIONmysqldump-uroot-p123456JXGLstudentscoursescoreD:/BACKUP/tables.sql恢复表【任务18.6】恢复students表的数据和结构。03OPTION假设不小心用DROP语句删除了students表,或改变了表的结构,或删除了数据。可以用下面的语句进行恢复。mysql-uroot-p123456JXGLD:/BACKUP/students.sql;由于上面备份好的tables.sql文件包含了students、course和score这3张表的数据和结构,因此也可以用该备份文件来恢复students表。mysql-uroot-p123456JXGLD:/BACKUP/JXGL.sql同时备份与恢复多个数据库【任务18.8】备份JXGL和YSGL数据库。02OPTIONmysqldump-urootp123456-databasesJXGLYSGLD:/BACKUP/twodb.sql【任务18.9】备份所有数据库。mysqldump-urootp123456-all-databasesD:/BACKUP/alldb.sql假设JXGL数据库被删除,可用上面备份的任何一个.sql文件恢复。mysql-urootp123456JXGLD:/BACKUP/alldb.sql36 项目七数据库安全与性能优化用mysqldump备份与恢复将表结构和数据分别备份可以通过使用“-tab=”选项,分别导出表数据和表结构的SQL语句。分别创建存储数据内容的.txt文件和包含创建表结构的SQL语句的.sql文件。如果某表数据或结构被破坏,可分别用相应的文件进行恢复,这种备份方式节省时间,提高效率。【任务18.10】将JXGL数据库的表结构和数据分别备份。mysqldump-uroot-p123456-tab=D:/BACKUP/JXGLmysql-urootp123456JXGLD/BACKUP/students.sql假设students表的数据被破坏。可用下面命令恢复。mysql-uroot-p123456JXGLstructurebackupfile.sql直接将MySQL数据库压缩备份直接将MySQL数据库压缩备份的语法格式如下。02OPTIONmysqldump-hhostname-uusername-ppassworddatabasename|gzipbackupfile.sql.gz还原压缩的MySQL数据库还原压缩的MySQL数据库的语法格式如下。03OPTIONgunzipDELETEFROMstudents;假设已有students表的备份文件,放在“D:/BACKUP”路径下,使用SOURCE命令把备份好的文件导入进行恢复。mysqlusejxgl;mysqlSOURCED:/BACKUP/students.sql;【任务18.13】误修改了表结构或误删了表,用SOURCE命令恢复。尝试修改表结构或删除表。mysqlALTERTABLEteachersDROPSEX;mysqlDROPTABLEcourse;假设已有teachers和course表的备份文件,放在“D:/BACKUP”路径下,使用SOURCE命令把备份好的文件导入进行恢复。mysqlusejxgl;mysqlSOURCED:/BACKUP/teachers.sql;mysqlSOURCED:/BACKUP/course.sql;42 项目七数据库安全与性能优化用SOURCE恢复表和数据库恢复数据库【任务18.14】假设JXGL数据库中的某张表被删除,恢复受损的数据库。02OPTIONmysqluseJXGL;mysqlsourceD:/BACKUP/students.sql;【任务18.15】假设JXGL数据库被删除,恢复受损的数据库。利用已备份的JXGL.sql文件恢复。mysqlCREATEDATABASEJXGL;mysqlUSEJXGL;mysqlSOURCED/BACKUP/JXGL.sql;43 项目七数据库安全与性能优化用日志备份log-bin=C:/ProgramBACKUPs/MySQL/MySQLServer5.5/bin/bin_lognMySQL启动时,在MySQL的data目录下自动创建二进制日志文件(C:ProgramDataMySQLMySQLServer8.0data)。默认文件名为主机名,例如mysql-bin.000001,每次启动服务器或刷新日志时该数字增加1。n当使用mysqlbinlog工具处理日志时,日志必须处于bin目录下,所以日志的路径就指定为bin目录,这需要修改“C:ProgramBACKUPMySQL”文件夹中的my.ini选项文件。打开该文件,找到“mysqld”所在行,在该行后面加上如下一行代码。n保存文件,重启服务器。n在DOS命令行中输入以下命令,先关闭服务器。netstopmysqln再启动服务器。netstartmysqln此时,MySQL安装目录的bin目录下会多出两个文件:bin_log.000001和bin_log.index。n使用日志恢复数据的语法格式:mysqlbinlogoptionslog-BACKUPs|mysqloptions【任务18.16】假设星期三12:00时数据库崩溃,经过查看日志,其中bin_log.000020是在星期三8:00创建的,现想将数据库恢复到8:00的状态。mysqlbinlogbin_log.000020|mysql-uroot-p12345644 项目七数据库安全与性能优化项目实践(1)用mysqldump备份YSGL数据库。尝试删除数据库的Departments表,还原数据库,然后查看恢复情况。尝试修改表Employees的结构,删除某字段,还原数据库,然后查看恢复情况。(2)用mysqldump备份Departments表,将文件保存在“D:/mysqlbackup”文件夹中,然后删除该表数据,再用.sql文件导入进行恢复,查看恢复情况。(3)用mysqldump分别备份所有表的数据和结构,将分别生成.txt文件和.sql文件。尝试破坏Departments表的结构和数据,然后用备份好的Departments.sql恢复表结构,用mysqlimport和备份好的Departments.txt文件恢复表数据。(4)用SELECTINTOOUTFILE语句把Employees表数据导出到一个文本文件“D:mysqlbackupEmployees.txt”,然后删除表中的所有数据,尝试使用LOADDATAINFILE语句将备份好的.txt文件导入表进行恢复,并查看恢复情况。在YSGL数据库中进行如下操作。45 项目七数据库安全与性能优化习题一、编程与应用题1请使用SELECTINTOOUTFILE语句,备份数据库bookdb中contentinfo表的全部数据到D盘的BACKUP目录下一个名为backupcontent.txt的文件中。假设表数据被破坏,使用LOADDATAINFILE语句将备份好的backupcontent.txt文件导入,恢复contentinfo表数据。2用mysqldump备份bookdb,备份在“D:BACKUP”目录下,文件名为bookdb.sql。假设数据库数据被破坏,使用命令用备份好的bookdb.sql文件恢复数据库。二、简答题1为什么在MySQL中需要进行数据库的备份与恢复操作?2MySQL数据库备份与恢复的常用方法有哪些?3当使用直接复制方法实现数据库备份与恢复时,需要注意哪些事项?4二进制日志文件的用途是什么?46 项目七数据库安全与性能优化任务 19 数据库性能优化【任务背景】Web数据库每天要接受来自网络的成千上万用户的连接访问。在对数据库频繁访问的情况下,数据库的性能越来越成为整个应用的性能瓶颈。可想而知,如果用户查询一条信息要花费很长时间,谁还会到你的网站查找信息?优化MySQL数据库是数据库管理员的必备技能。性能优化是通过某些有效的方法提高MySQL数据库的性能,使MySQL数据库运行速度更快、占用的磁盘空间更小。不管是在进行数据库表结构设计,还是在创建索引、创建查询数据库操作的时候,都需要注意数据库的性能。性能优化包括很多方面,例如,优化MySQL服务器、优化数据库表结构、优化查询速度或优化更新速度等。【任务要求】数据库性能优化的方法很多。本任务将学习优化MySQL服务器、数据表、查询的方法和技巧。包括学习使用ANALYZETABLE语句分析表,使用CHECKTABLE语句检查表,使用OPTIMIZETAB