单元9 数据库管理_第1页
单元9 数据库管理_第2页
单元9 数据库管理_第3页
单元9 数据库管理_第4页
单元9 数据库管理_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单元九数据库管理项目知识要点与目标项目知识要点与目标项目知识要点项目知识要点知识能力目标知识能力目标学时学时9.1 9.1 任务任务1 1 用户和数据安全性用户和数据安全性9.1.1 9.1.1 添加和删除用户添加和删除用户9.1.2 9.1.2 授予权限和回收权限授予权限和回收权限9.1.3 9.1.3 界面方式操作用户与权界面方式操作用户与权9.2 9.2 任务任务2 2 备份与恢复备份与恢复9.2.1 9.2.1 备份和恢复需求分析备份和恢复需求分析9.2.2 9.2.2 数据库备份和恢复数据库备份和恢复9.2.3 MySQL9.2.3 MySQL日志日志9.3 9.3 任务任务3 3

2、事务和多用户事务和多用户9.3.1 9.3.1 多用户使用的问题多用户使用的问题9.3.2 9.3.2 事务事务9.4 9.4 综合实例综合实例 PetStorePetStore数据库管理数据库管理【情境】:【情境】:PetstorePetstore数据库管理数据库管理【职业岗位】:数据库管理员【职业岗位】:数据库管理员【典型工作任务】:数据库日常【典型工作任务】:数据库日常管理管理【技能要求】:【技能要求】:1 1、用户账户管理、用户账户管理2 2、角色管理、角色管理3 3、权限管理、权限管理【知识要求】:【知识要求】:1 1、数据库用户账户设置和管理、数据库用户账户设置和管理2 2、对数据

3、库的各种操作权限进行、对数据库的各种操作权限进行合理分配合理分配4 4项目实训九项目实训九“员工管理系统员工管理系统”数据库管理数据库管理2 2任务一任务一用户和数据安全性用户和数据安全性用户要访问用户要访问MySQLMySQL数据库,首先必须拥有登录到数据库,首先必须拥有登录到MySQLMySQL服务器的用户服务器的用户名和口令。登录到服务器后,名和口令。登录到服务器后,MySQLMySQL允许用户在其权限内使用数据库资允许用户在其权限内使用数据库资源。源。MySQLMySQL的安全系统很灵活,它允许以多种不同的方式创建用户和设的安全系统很灵活,它允许以多种不同的方式创建用户和设置用户权限。

4、置用户权限。可以使用可以使用CREATE USERCREATE USER语法添加一个或多个用户,并设置相应的密码。语法添加一个或多个用户,并设置相应的密码。语法格式:语法格式:CREATE USER 用户名用户名 IDENTIFIED BY PASSWORD 密码密码用户名用户名的格式为:的格式为:user_name host_name。其中。其中user_name为用户为用户名,名,host_name为主机名为主机名CREATE USERCREATE USER用于创建新的用于创建新的MySQLMySQL账户。账户。CREATE USERCREATE USER会在系统本身的会在系统本身的mys

5、qlmysql数据库的数据库的useruser表中添加一个新记录。要使用表中添加一个新记录。要使用CREATE USERCREATE USER,必须拥有,必须拥有mysqlmysql数据数据库的全局库的全局CREATE USERCREATE USER权限或权限或INSERTINSERT权限。如果账户已经存在,则出现错误。权限。如果账户已经存在,则出现错误。添加用户举例添加用户举例【例例9.19.1】添加两个新的用户,添加两个新的用户,kingking的密码为的密码为queenqueen,palopalo的密码为的密码为530415530415CREATE USER kinglocalhost

6、IDENTIFIED BY queen, palolocalhost IDENTIFIED BY 530415; 说明:说明: 在用户名的后面声明了关键字在用户名的后面声明了关键字localhostlocalhost。这个关键字指定了用户。这个关键字指定了用户创建的使用创建的使用MySQLMySQL的连接所来自的主机。如果一个用户名和主机名中包含的连接所来自的主机。如果一个用户名和主机名中包含特殊符号如特殊符号如“_”_”,或通配符如,或通配符如“%”%”,则需要用单引号将其括起。,则需要用单引号将其括起。“%”%”表示一组主机。表示一组主机。 如果两个用户具有相同的用户名但主机不同,如果两个

7、用户具有相同的用户名但主机不同,MySQLMySQL将其视为不同将其视为不同的用户,允许为这两个用户分配不同的权限集合。的用户,允许为这两个用户分配不同的权限集合。 如果没有输入密码,那么如果没有输入密码,那么MySQLMySQL允许相关的用户不使用密码登录。允许相关的用户不使用密码登录。但是从安全的角度并不推荐这种做法。但是从安全的角度并不推荐这种做法。 刚刚创建的用户还没有很多权限。它们可以登录到刚刚创建的用户还没有很多权限。它们可以登录到MySQLMySQL,但是,但是它们不能使用它们不能使用USEUSE语句来让用户已经创建的任何数据库成为当前数据库,语句来让用户已经创建的任何数据库成为

8、当前数据库,因此,它们无法访问那些数据库的表,只允许进行不需要权限的操作,因此,它们无法访问那些数据库的表,只允许进行不需要权限的操作,例如,用一条例如,用一条SHOWSHOW语句查询所有存储引擎和字符集的列表。语句查询所有存储引擎和字符集的列表。用户的修改与删除用户的修改与删除删除用户语法格式:删除用户语法格式: DROP USER user DROP USERDROP USER语句用于删除一个或多个语句用于删除一个或多个MySQLMySQL账户,并取消其权限。要使账户,并取消其权限。要使用用DROP USERDROP USER,必须拥有,必须拥有mysqlmysql数据库的全局数据库的全局

9、CREATE USERCREATE USER权限或权限或DELETEDELETE权权限。限。【例例9.29.2】 删除用户删除用户kingking。 DROP USER kinglocalhost;如果删除的用户已经创建了表、索引或其他的数据库对象,它们将继如果删除的用户已经创建了表、索引或其他的数据库对象,它们将继续保留,因为续保留,因为MySQLMySQL并没有记录是谁创建了这些对象。并没有记录是谁创建了这些对象。可以使用可以使用RENAME USERRENAME USER语句来修改一个已经存在的语句来修改一个已经存在的SQLSQL用户的名字。用户的名字。 语法格式:语法格式: RENAM

10、E USER old_user TO new_user【例例9.39.3】 将用户将用户palopalo修改为修改为kenken。RENAME USER palolocalhost TO kenlocalhostRENAME USER palolocalhost TO kenlocalhost; ;若要将命令立即生效,可用命令:若要将命令立即生效,可用命令: Flush privileges;修改密码修改密码要修改某个用户的登录密码,可以使用要修改某个用户的登录密码,可以使用SET PASSWORDSET PASSWORD语语句。句。语法格式:语法格式: SET PASSWORD FOR us

11、er= PASSWORD(newpassword)说明:说明:如果不加如果不加FOR userFOR user,表示修改当前用户的密码。加了,表示修改当前用户的密码。加了FOR FOR useruser则是修改当前主机上的特定用户的密码,则是修改当前主机上的特定用户的密码,useruser为用户名。为用户名。useruser的值必须以的值必须以user_namehost_nameuser_namehost_name的格式给定。的格式给定。【例例9.49.4】 将用户将用户kenken的密码修改为的密码修改为queenqueen。 SET PASSWORD FOR kenlocalhost =

12、PASSWORD(queen);课堂练习课堂练习1 1、创建数据库用户、创建数据库用户user1user1和和user2user2,密码为,密码为“12341234”2 2、将用户、将用户user2user2的名称改为的名称改为user3user33 3、将用户、将用户user3user3的密码改为的密码改为“123456123456”4 4、删除用户、删除用户user3user3授予权限授予权限新的新的SQLSQL用户不允许访问属于其他用户不允许访问属于其他SQLSQL用户的表,也不能立即创建自用户的表,也不能立即创建自己的表,它必须被授权。可以授予的权限有以下几组。己的表,它必须被授权。可

13、以授予的权限有以下几组。(1 1)列权限:和表中的一个具体列相关。例如,使用)列权限:和表中的一个具体列相关。例如,使用UPDATEUPDATE语句语句更新表更新表XSXS学号列的值的权限。学号列的值的权限。(2 2)表权限:和一个具体表中的所有数据相关。例如,使用)表权限:和一个具体表中的所有数据相关。例如,使用SELECTSELECT语句查询表语句查询表XSXS的所有数据的权限。的所有数据的权限。(3 3)数据库权限:和一个具体的数据库中的所有表相关。例如,)数据库权限:和一个具体的数据库中的所有表相关。例如,在已有的在已有的XSCJXSCJ数据库中创建新表的权限。数据库中创建新表的权限。

14、(4 4)用户权限:和)用户权限:和MySQLMySQL所有的数据库相关。例如,删除已有的数所有的数据库相关。例如,删除已有的数据库或者创建一个新的数据库的权限。据库或者创建一个新的数据库的权限。给某用户授予权限可以使用给某用户授予权限可以使用GRANTGRANT语句。使用语句。使用SHOW GRANTSSHOW GRANTS语句可以语句可以查看当前账户拥有什么权限。查看当前账户拥有什么权限。GRANTGRANT语法格式:语法格式: GRANT 权限权限1(列名列表列名列表1) ,权限权限2 (列名列表列名列表2) . ON 目标目标 表名表名 | * | *.* | 库名库名.* TO 用户

15、用户1 IDENTIFIED BY PASSWORD 密码密码1 ,用户用户2 IDENTIFIED BY PASSWORD 密码密码2 . WITH 权限限制权限限制1 权限限制权限限制2 .授予权限举例授予权限举例(1 1)授予表权限和列权限)授予表权限和列权限在授予表权限时,在授予表权限时,ONON关键字后面跟表名或视图名。关键字后面跟表名或视图名。【例例9.59.5】 授予用户授予用户kingking在在XSXS表上的表上的SELECTSELECT权限。权限。GRANT SELECT ON XS TO kinglocalhost;说明:说明:这里假设是在这里假设是在ROOTROOT用户

16、中输入了这些语句,这样用户用户中输入了这些语句,这样用户kingking就可以使用就可以使用SELECTSELECT语句来查询语句来查询XSXS表,而不管是谁创建的这个表。表,而不管是谁创建的这个表。若在若在TOTO子句中给存在的用户指定密码,则新密码将原密码覆盖。如果权限子句中给存在的用户指定密码,则新密码将原密码覆盖。如果权限授予了一个不存在的用户,授予了一个不存在的用户,MySQLMySQL会自动执行一条会自动执行一条CREATE USERCREATE USER语句来创建这个语句来创建这个用户,但必须为该用户指定密码。用户,但必须为该用户指定密码。【例例9.69.6】 用户用户liuli

17、u和和zhangzhang不存在,授予它们在不存在,授予它们在XSXS表上的表上的SELECTSELECT和和UPDATEUPDATE权限。权限。GRANT SELECT,UPDATE ON XS TO liulocalhost IDENTIFIED BY LPWD, zhanglocalhost IDENTIFIED BY ZPWD;授予权限举例授予权限举例【例例9.59.5】 授予用户授予用户user1user1在在BookBook表上的表上的SELECTSELECT权限。权限。 USE Bookstore; USE Bookstore; GRANT SELECT GRANT SELECT

18、 ON Book ON Book TO user1localhost; TO user1localhost; 若在若在TOTO子句中给存在的用户指定密码,则新密码将原密码覆盖。子句中给存在的用户指定密码,则新密码将原密码覆盖。如果权限授予了一个不存在的用户,如果权限授予了一个不存在的用户,MySQLMySQL会自动执行一条会自动执行一条CREATE USERCREATE USER语句来创建这个用户,但必须为该用户指定密码。语句来创建这个用户,但必须为该用户指定密码。【例例9.79.7】 授予授予user1user1在在BookBook表上的图书编号列和书名列的表上的图书编号列和书名列的UPDA

19、TEUPDATE权限。权限。 GRANT UPDATE(GRANT UPDATE(图书编号图书编号, , 书名书名) )ON BookON Book TO user1localhost; TO user1localhost;授予授予数据库权限数据库权限(2 2)授予数据库权限)授予数据库权限在在GRANTGRANT语法格式中,授予数据库权限时语法格式中,授予数据库权限时ONON关键字后面跟关键字后面跟“* *”和和“db_name.db_name.* *”。“* *”表示当前数据库中的所有表;表示当前数据库中的所有表;“db_name.db_name.* *”表示某个数据库中的所有表。表示某个

20、数据库中的所有表。【例例9.89.8】 授予授予user1user1在在BookstoreBookstore数据库中的所有表的数据库中的所有表的SELECTSELECT权限。权限。 GRANT SELECTGRANT SELECT ON Bookstore. ON Bookstore.* * TO user1localhost; TO user1localhost;这个权限适用于所有已有的表,以及此后添加到这个权限适用于所有已有的表,以及此后添加到BookstoreBookstore数据库中数据库中的任何表。的任何表。【例例9.99.9】 授予授予user1user1在在BookstoreBo

21、okstore数据库中拥有所有的数据库权限。数据库中拥有所有的数据库权限。 USE Bookstore; USE Bookstore; GRANT ALL GRANT ALL ON ON * * TO user1localhost; TO user1localhost;课堂练习课堂练习1 1、授予用户、授予用户user1user1对对ygglyggl库中库中employeesemployees表有表有SELECTSELECT操作权限操作权限2 2、授予用户、授予用户user1user1对对ygglyggl库中库中employeesemployees表有插入、修改、删除表有插入、修改、删除操作权

22、限操作权限3 3、授予用户、授予用户user1user1对对ygglyggl库所有操作权限库所有操作权限授予用户权限授予用户权限(3 3)授予用户权限)授予用户权限最有效率的权限就是用户权限,对于需要授予数据库权限的所有语句,也最有效率的权限就是用户权限,对于需要授予数据库权限的所有语句,也可以定义在用户权限上。例如,在用户级别上授予某人可以定义在用户权限上。例如,在用户级别上授予某人CREATECREATE权限,这个用户权限,这个用户可以创建一个新的数据库,也可以在所有的数据库(而不是特定的数据库)中可以创建一个新的数据库,也可以在所有的数据库(而不是特定的数据库)中创建新表。创建新表。My

23、SQLMySQL授予用户权限时授予用户权限时priv_typepriv_type还可以是以下值。还可以是以下值。 CREATE USERCREATE USER:给予用户创建和删除新用户的权力。:给予用户创建和删除新用户的权力。 SHOW DATABASESSHOW DATABASES:给予用户使用:给予用户使用SHOW DATABASESSHOW DATABASES语句查看所有已有的语句查看所有已有的数据库的定义的权利。数据库的定义的权利。在在GRANTGRANT语法格式中,授予用户权限时语法格式中,授予用户权限时ONON子句中使用子句中使用“* *. .* *”,表示所有数,表示所有数据库的

24、所有表。据库的所有表。【例例9.109.10】 授予授予PeterPeter对所有数据库中的所有表的对所有数据库中的所有表的CREATECREATE、ALTERTALTERT和和DROPDROP权限。权限。GRANT CREATE ,ALTER ,DROP ON *.* TO Peterlocalhost IDENTIFIED BY ppwd;【例例9.119.11】 授予授予PeterPeter创建新用户的权力。创建新用户的权力。GRANT CREATE USER ON *.* TO Peterlocalhost;权限的转移和限制权限的转移和限制GRANTGRANT语句的最后可以使用语句的最

25、后可以使用WITHWITH子句。如果指定为子句。如果指定为WITH GRANT WITH GRANT OPTIONOPTION,则表示,则表示TOTO子句中指定的所有用户都有把自己所拥有的权限授予子句中指定的所有用户都有把自己所拥有的权限授予其他用户的权利,而不管其他用户是否拥有该权限。其他用户的权利,而不管其他用户是否拥有该权限。【例例9.129.12】 授予授予user3user3在在BookBook表上的表上的SELECTSELECT权限,并允许其将该权限授权限,并允许其将该权限授予其他用户。予其他用户。首先在首先在rootroot用户下授予用户下授予user3user3用户用户SELE

26、CTSELECT权限:权限: GRANT SELECTGRANT SELECT ON ON Bookstore.BookBookstore.Book TO user3localhost IDENTIFIED BY 123456 TO user3localhost IDENTIFIED BY 123456 WITH GRANT OPTION; WITH GRANT OPTION;接着,以接着,以user3user3用户身份登录用户身份登录MySQLMySQL,登录后,登录后,user3user3用户只有查询用户只有查询BookstoreBookstore数据库中数据库中BookBook表的权利,

27、它可以把这个权限传递给其他用户表的权利,它可以把这个权限传递给其他用户(这里假设用户(这里假设用户JimJim已经创建):已经创建): GRANT SELECT GRANT SELECT ON ON Bookstore.BookBookstore.Book TO TO JimlocalhostJimlocalhost; ;权限的限制权限的限制WITHWITH子句也可以对一个用户授予使用限制,其中,子句也可以对一个用户授予使用限制,其中,MAX_QUERIES_PER_HOUR countMAX_QUERIES_PER_HOUR count表示每小时可以查询数据库的次数;表示每小时可以查询数据库

28、的次数;MAX_CONNECTIONS_PER_HOUR countMAX_CONNECTIONS_PER_HOUR count表示每小时可以连接数据库的次数;表示每小时可以连接数据库的次数;MAX_UPDATES_PER_HOUR countMAX_UPDATES_PER_HOUR count表示每小时可以修改数据库的次数。表示每小时可以修改数据库的次数。MAX_USER_CONNECTIONS countMAX_USER_CONNECTIONS count表示同时连接表示同时连接MySQLMySQL的最大用户数。的最大用户数。countcount是一个数值,对于前三个指定,是一个数值,对于

29、前三个指定,countcount如果为如果为0 0则表示不起限制则表示不起限制作用。作用。【例例9.139.13】 授予授予JimJim每小时只能处理一条每小时只能处理一条SELECTSELECT语句的权限。语句的权限。 GRANT SELECT GRANT SELECT ON Book ON Book TO TO JimlocalhostJimlocalhost WITH MAX_QUERIES_PER_HOUR 1; WITH MAX_QUERIES_PER_HOUR 1; 回收权限回收权限要从一个用户回收权限,但不从要从一个用户回收权限,但不从USERUSER表中删除该用户,可以使用表中

30、删除该用户,可以使用REVOKEREVOKE语句,这条语句和语句,这条语句和GRANTGRANT语句格式相似,但具有相反的效果。要使语句格式相似,但具有相反的效果。要使用用REVOKEREVOKE,用户必须拥有,用户必须拥有mysqlmysql数据库的全局数据库的全局CREATE USERCREATE USER权限或权限或UPDATEUPDATE权限。权限。用来回收某些特定的权限语法格式:用来回收某些特定的权限语法格式: REVOKE 权限权限1(列名列表列名列表1) ,权限权限2 (列名列表列名列表2) . ON 表名表名 | * | *.* | 库名库名.* FROM 用户用户1 ,用户用

31、户2 . 回收所有该用户的权限语法格式:回收所有该用户的权限语法格式:REVOKE ALL PRIVILEGES, GRANT OPTION FROM user【例例9.149.14】 回收用户回收用户user3user3在在BookBook表上的表上的SELECTSELECT权限。权限。 REVOKE SELECTREVOKE SELECT ON Book ON Book FROM user3localhost; FROM user3localhost;课堂练习课堂练习1 1、授予用户、授予用户user1user1对对ygglyggl库中库中salarysalary表有表有SELECTSEL

32、ECT操作权限操作权限, ,并允并允许其将该权限授予其他用户许其将该权限授予其他用户2 2、收回用户、收回用户user1user1对对ygglyggl库中库中employeesemployees表上的表上的SELECTSELECT操作权限操作权限图形界面方式操作用户与权限图形界面方式操作用户与权限1 1添加和删除用户添加和删除用户(1 1)添加用户)添加用户(2 2)删除用户)删除用户2 2权限设置权限设置(1 1)全局权限设置)全局权限设置(2 2)数据库权限设置)数据库权限设置(3 3)表和列权限设置)表和列权限设置任务二任务二备份与恢复备份与恢复备份和恢复需求分析备份和恢复需求分析数据库

33、中的数据丢失或被破坏可能是由于以下原因:数据库中的数据丢失或被破坏可能是由于以下原因:(1 1)计算机硬件故障。由于使用不当或产品质量等原因,计算机硬件可)计算机硬件故障。由于使用不当或产品质量等原因,计算机硬件可能会出现故障,不能使用。如硬盘损坏会使得存储于其上的数据丢失。能会出现故障,不能使用。如硬盘损坏会使得存储于其上的数据丢失。(2 2)软件故障。由于软件设计上的失误或用户使用的不当,软件系统可)软件故障。由于软件设计上的失误或用户使用的不当,软件系统可能会误操作数据引起数据破坏。能会误操作数据引起数据破坏。(3 3)病毒。破坏性病毒会破坏系统软件、硬件和数据。)病毒。破坏性病毒会破坏

34、系统软件、硬件和数据。(4 4)误操作。如用户误使用了诸如)误操作。如用户误使用了诸如DELETEDELETE、UPDATEUPDATE等命令而引起数据丢等命令而引起数据丢失或破坏。失或破坏。(5 5)自然灾害。如火灾、洪水或地震等,它们会造成极大的破坏,会毁)自然灾害。如火灾、洪水或地震等,它们会造成极大的破坏,会毁坏计算机系统及其数据。坏计算机系统及其数据。(6 6)盗窃。一些重要数据可能会遭窃。)盗窃。一些重要数据可能会遭窃。因此,必须制作数据库的复本,即进行数据库备份,在数据库遭到破坏时因此,必须制作数据库的复本,即进行数据库备份,在数据库遭到破坏时能够修复数据库,即进行数据库恢复,数

35、据库恢复就是把数据库从错误状态恢能够修复数据库,即进行数据库恢复,数据库恢复就是把数据库从错误状态恢复到某一正确状态。复到某一正确状态。备份和恢复数据库也可以用于其他目的,如可以通过备份与恢复将数据库备份和恢复数据库也可以用于其他目的,如可以通过备份与恢复将数据库从一个服务器移动或复制到另一个服务器。从一个服务器移动或复制到另一个服务器。MySQL数据库备份数据库备份有多种可能会导致数据表的丢失或者服务器的崩溃,一个简单的有多种可能会导致数据表的丢失或者服务器的崩溃,一个简单的DROP TABLEDROP TABLE或者或者DROP DATABASEDROP DATABASE的语句,就会让数据

36、表化为乌有。更危险的是的语句,就会让数据表化为乌有。更危险的是DELETE DELETE * * FROM FROM table_nametable_name,可以轻易地清空数据表,而这样的错误是很容易发生的。,可以轻易地清空数据表,而这样的错误是很容易发生的。因此,拥有能够恢复的数据对于一个数据库系统来说是非常重要的。因此,拥有能够恢复的数据对于一个数据库系统来说是非常重要的。MySQLMySQL有三种保证数据安全的方法。有三种保证数据安全的方法。(1 1)数据库备份:通过导出数据或者表文件的拷贝来保护数据。)数据库备份:通过导出数据或者表文件的拷贝来保护数据。(2 2)二进制日志文件:保存

37、更新数据的所有语句。)二进制日志文件:保存更新数据的所有语句。(3 3)数据库复制:)数据库复制:MySQLMySQL内部复制功能建立在两个或两个以上服务器之间,内部复制功能建立在两个或两个以上服务器之间,通过设定它们之间的主从关系来实现的。其中一个作为主服务器,其他的作为从通过设定它们之间的主从关系来实现的。其中一个作为主服务器,其他的作为从服务器。服务器。本章主要介绍前两种方法。本章主要介绍前两种方法。数据库恢复就是当数据库出现故障时,将备份的数据库加载到系统,从而使数据库恢复就是当数据库出现故障时,将备份的数据库加载到系统,从而使数据库恢复到备份时的正确状态。数据库恢复到备份时的正确状态

38、。恢复是与备份相对应的系统维护和管理操作,系统进行恢复操作时,先执行恢复是与备份相对应的系统维护和管理操作,系统进行恢复操作时,先执行一些系统安全性的检查,包括检查所要恢复的数据库是否存在、数据库是否变化一些系统安全性的检查,包括检查所要恢复的数据库是否存在、数据库是否变化及数据库文件是否兼容等,然后根据所采用的数据库备份类型采取相应的恢复措及数据库文件是否兼容等,然后根据所采用的数据库备份类型采取相应的恢复措施。施。数据库备份数据库备份SQL语句语句用户可以使用用户可以使用SELECT INTOOUTFILESELECT INTOOUTFILE语句把表数据导出到一个文本语句把表数据导出到一个

39、文本文件中,并用文件中,并用LOAD DATA INFILELOAD DATA INFILE语句恢复数据。语句恢复数据。格式:格式:SELECT * INTO OUTFILE file_name export_options| DUMPFILE file_name 其中,其中,export_optionsexport_options为:为:FIELDS TERMINATED BY string OPTIONALLY ENCLOSED BY char ESCAPED BY char LINES TERMINATED BY string 但是这种方法只能导出或导入数据的内容,不包括表的结构,如果但

40、是这种方法只能导出或导入数据的内容,不包括表的结构,如果表的结构文件损坏,则必须先恢复原来的表的结构。表的结构文件损坏,则必须先恢复原来的表的结构。LOAD DATA INFILELOAD DATA INFILE语句是语句是SELECT INTOOUTFILESELECT INTOOUTFILE语句的补语,该语语句的补语,该语句可以将一个文件中的数据导入到数据库中。句可以将一个文件中的数据导入到数据库中。格式:格式:LOAD DATA INFILE file_name.txtINTO TABLE tbl_name FIELDS LINES (col_name_or_user_var,.)数据恢

41、复数据恢复SQL语句语句【例9.15】 备份Bookstore数据库中的Members表中数据到D盘FILE目录中,要求字段值如果是字符就用双引号标注,字段值之间用逗号隔开,每行以“?”为结束标志。最后将备份后的数据导入到一个和Members表结构一样的空表member_copy表中。首先导出数据: USE Bookstore; SELECT * FROM MembersINTO OUTFILE D:/myfile1.txtFIELDS TERMINATED BY , OPTIONALLY ENCLOSED BY LINES TERMINATED BY ? ;导出成功后可以查看D盘FILE文件

42、夹下的myfile1.txt文件。文件备份完后可以将文件中的数据导入到member_copy表中,使用以下命令: LOAD DATA INFILE D:/myfile14.txtINTO TABLE member_copyFIELDS TERMINATED BY ,OPTIONALLY ENCLOSED BY LINES TERMINATED BY ?;数据备份与恢复数据备份与恢复SQL语句举例语句举例其他其他备份和恢复备份和恢复方法方法2 2、phpmyadminphpmyadmin界面工具进行数据备份和恢复的方法界面工具进行数据备份和恢复的方法(1 1)数据备份)数据备份(2 2)数据恢复

43、)数据恢复3 3、直接复制直接复制 由于由于MySQLMySQL的数据库和表是直接通过目录和表文件实现的,因的数据库和表是直接通过目录和表文件实现的,因此可以通过直接复制文件的方法来备份数据库。不过,直接复制此可以通过直接复制文件的方法来备份数据库。不过,直接复制文件不能够移植到其他机器上,除非要复制的表使用文件不能够移植到其他机器上,除非要复制的表使用MyISAM MyISAM 存储存储格式。格式。 如果要把如果要把MyISAMMyISAM类型的表直接复制到另一个服务器使用,首类型的表直接复制到另一个服务器使用,首先要求两个服务器必须使用相同的先要求两个服务器必须使用相同的MySQLMySQ

44、L版本,而且硬件结构必须版本,而且硬件结构必须相同或相似。在复制之前要保证数据表不在被使用,保证复制完相同或相似。在复制之前要保证数据表不在被使用,保证复制完整性的最好方法是关闭服务器,复制数据库下的所有表文件整性的最好方法是关闭服务器,复制数据库下的所有表文件(* *.frm.frm、* *.MYD.MYD和和* *.MYI.MYI文件),然后重启服务器。文件复制出来文件),然后重启服务器。文件复制出来以后,可以将文件放到另外一个服务器的数据库目录下,这样另以后,可以将文件放到另外一个服务器的数据库目录下,这样另外一个服务器就可以正常使用这张表了外一个服务器就可以正常使用这张表了日志文件日志

45、文件启用日志启用日志 二进制日志可以在启动服务器的时候启用,这需要修改二进制日志可以在启动服务器的时候启用,这需要修改C:Program C:Program FilesMySQLFilesMySQL文件夹中的文件夹中的my.inimy.ini选项文件。打开该文件,找到选项文件。打开该文件,找到mysqldmysqld所在行,所在行,在该行后面加上以下格式的一行:在该行后面加上以下格式的一行:log-bin=filenamelog-bin=filename假设这里假设这里filenamefilename取名为取名为bin_logbin_log。若不指定目录,则在。若不指定目录,则在MySQLMy

46、SQL的的datadata目目录下自动创建二进制日志文件。录下自动创建二进制日志文件。若日志路径指定为若日志路径指定为C:/appserv/MySQL/binC:/appserv/MySQL/bin目录,添加以下一行:目录,添加以下一行:log-bin=C:/appserv/MySQL /bin/bin_loglog-bin=C:/appserv/MySQL /bin/bin_log保存,重启服务器。保存,重启服务器。日志文件记入文件中的信息类型错误日志记录启动、运行或停止mysqld时出现的问题。查询日志记录建立的客户端连接和执行的语句。更新日志记录更改数据的语句。不赞成使用该日志。二进制日

47、志记录所有更改数据的语句。还用于复制。慢日志记录所有执行时间超long_query_time秒的所有查询或不使用索引的查询MySQLMySQL日志文件类型日志文件类型用用mysqlbinlog管理日志管理日志使用使用mysqlbinlogmysqlbinlog实用工具可以检查二进制日志文件。实用工具可以检查二进制日志文件。命令格式为:命令格式为: mysqlbinlog options log-files.mysqlbinlog options log-files.说明:说明:log-fileslog-files是二进制日志的文件名。是二进制日志的文件名。例如,运行以下命令可以查看例如,运行以

48、下命令可以查看bin_log.000001bin_log.000001的内容:的内容: mysqlbinlog bin_log.000001 mysqlbinlog bin_log.000001由于二进制数据可能非常庞大,无法在屏幕上延伸,由于二进制数据可能非常庞大,无法在屏幕上延伸,可以保存到文本文件中:可以保存到文本文件中: mysqlbinlog bin_log.000001D:/FILE/lbin-log000001.txtmysqlbinlog bin_log.000001D:/FILE/lbin-log000001.txt使用日志恢复数据的命令格式如下:使用日志恢复数据的命令格式如

49、下: mysqlbinlog options log-files mysqlbinlog options log-files | mysql options | mysql options日志管理举例日志管理举例【例例7.177.17】 假设用户在星期一下午假设用户在星期一下午1 1点使用点使用mysqldumpmysqldump工具进行数据库工具进行数据库XSCJXSCJ的完全备份,备份文件为的完全备份,备份文件为file.sqlfile.sql。从星期一下午。从星期一下午1 1点开始用户启用日志,点开始用户启用日志,bin_log.000001bin_log.000001文件保存了从星期一

50、下午文件保存了从星期一下午1 1点到星期二下午点到星期二下午1 1点的所有更改,在星点的所有更改,在星期二下午期二下午1 1点运行一条点运行一条SQLSQL语句:语句: FLUSH LOGS; FLUSH LOGS;此时创建了此时创建了bin_log.000002bin_log.000002文件,在星期三下午文件,在星期三下午1 1点时数据库崩溃。现要将点时数据库崩溃。现要将数据库恢复到星期三下午数据库恢复到星期三下午1 1点时的状态。首先将数据库恢复到星期一下午点时的状态。首先将数据库恢复到星期一下午1 1点时的点时的状态,在状态,在DOSDOS窗口输入以下命令:窗口输入以下命令: mysq

51、ldump -uroot -p123456 XSCJfile.sqlmysqldump -uroot -p123456 XSCJfile.sql使用以下命令将数据库恢复到星期二下午时的状态:使用以下命令将数据库恢复到星期二下午时的状态: mysqlbinlog bin_log.000001 | mysql -uroot -p123456mysqlbinlog bin_log.000001 | mysql -uroot -p123456再使用以下命令即可将数据库恢复到星期三下午再使用以下命令即可将数据库恢复到星期三下午1 1点时的状态:点时的状态: mysqlbinlog bin_log.000

52、002 | mysql -uroot -p123456mysqlbinlog bin_log.000002 | mysql -uroot -p123456日志管理命令日志管理命令由于日志文件要占用很大的硬盘资源,所以要及时将没由于日志文件要占用很大的硬盘资源,所以要及时将没用的日志文件清除掉。以下这条用的日志文件清除掉。以下这条SQLSQL语句用于清除所有的日语句用于清除所有的日志文件:志文件:RESET MASTER;RESET MASTER;如果要删除部分日志文件,可以使用如果要删除部分日志文件,可以使用PURGE MASTER LOGSPURGE MASTER LOGS语句。语句。语法格

53、式为:语法格式为:PURGE MASTER | BINARY LOGS TO log_namePURGE MASTER | BINARY LOGS TO log_name或或PURGE MASTER | BINARY LOGS BEFORE datePURGE MASTER | BINARY LOGS BEFORE date说明:第一个语句用于删除特定的日志文件,说明:第一个语句用于删除特定的日志文件,log_namelog_name为文件名。第二个语句用于删除时间为文件名。第二个语句用于删除时间datedate之前的所有日志文之前的所有日志文件。件。MASTERMASTER和和BINARYB

54、INARY是同义词。是同义词。任务三任务三事务和多用户事务和多用户 当用户对数据库并发访问时,为了确保事务完整性和数据库一致性,需要当用户对数据库并发访问时,为了确保事务完整性和数据库一致性,需要使用锁定,使用锁定,以以防止用户读取正在由其他用户更改的数据,并防止多个用户同时防止用户读取正在由其他用户更改的数据,并防止多个用户同时更改相同数据。如果不使用锁定,则数据库中的数据可能在逻辑上不正确,并更改相同数据。如果不使用锁定,则数据库中的数据可能在逻辑上不正确,并且对数据的查询可能会产生意想不到的结果。具体地说,锁定可以防止丢失更且对数据的查询可能会产生意想不到的结果。具体地说,锁定可以防止丢

55、失更新、脏读、不可重复读和幻读。新、脏读、不可重复读和幻读。 丢失更新(丢失更新(lost updatelost update):指当两个或多个事务选择同一行,然后基于最指当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,由于每个事务都不知道其他事务的存在,因此最后的初选定的值更新该行时,由于每个事务都不知道其他事务的存在,因此最后的更新将重写由其他事务所做的更新,这将导致数据丢失。更新将重写由其他事务所做的更新,这将导致数据丢失。 脏读(脏读(dirty readdirty read):指一个事务正在访问数据,而其他事务正在更新该指一个事务正在访问数据,而其他事务正在更新该数据,但

56、尚未提交,此时就会发生脏读问题,即第一个事务所读取的数据是数据,但尚未提交,此时就会发生脏读问题,即第一个事务所读取的数据是“脏脏”(不正确)数据,它可能会引起错误。(不正确)数据,它可能会引起错误。 不可重复读(不可重复读(unrepeatable readunrepeatable read):一个事务多次访问同一行而且每次读一个事务多次访问同一行而且每次读取不同的数据取不同的数据。 幻读(幻读(phantom readphantom read):当一个事务对某行执行插入或删除操作,而该行当一个事务对某行执行插入或删除操作,而该行属于某个事务正在读取的行的范围时,事务第一次读的行范围显示出其

57、中一行属于某个事务正在读取的行的范围时,事务第一次读的行范围显示出其中一行已不复存在于第二次读或后续读中,因为该行已被其他事务删除。同样,由于已不复存在于第二次读或后续读中,因为该行已被其他事务删除。同样,由于其他事务的插入操作,事务的第二次读或后续读显示有一行已不存在于原始读其他事务的插入操作,事务的第二次读或后续读显示有一行已不存在于原始读中。中。事务事务在在MySQLMySQL环境中,事务由作为一个单独单元的一个或多个环境中,事务由作为一个单独单元的一个或多个SQLSQL语句组语句组成。这个单元中的每个成。这个单元中的每个SQLSQL语句是互相依赖的,而且单元作为一个整体是语句是互相依赖

58、的,而且单元作为一个整体是不可分割的。如果单元中的一个语句不能完成,整个单元就会回滚(撤不可分割的。如果单元中的一个语句不能完成,整个单元就会回滚(撤销),所有影响到的数据将返回到事务开始以前的状态。因而,只有事销),所有影响到的数据将返回到事务开始以前的状态。因而,只有事务中的所有语句都成功地执行才能说这个事务被成功地执行。务中的所有语句都成功地执行才能说这个事务被成功地执行。向公司添加一名新的雇员事务:向公司添加一名新的雇员事务: (1 1)在雇员数据库中为雇员创建一条记录;在雇员数据库中为雇员创建一条记录; (2 2)为雇员分配部门;为雇员分配部门; (3 3)建立雇员的工资记录。建立雇

59、员的工资记录。 如果这三步中的任何一步失败,如为新成员分配如果这三步中的任何一步失败,如为新成员分配的雇员的雇员IDID已经被其他人使用或者输入到工资系统中已经被其他人使用或者输入到工资系统中的值太大,系统就必须撤销在失败之前所有的变化,的值太大,系统就必须撤销在失败之前所有的变化,删除所有不完整记录的踪迹,避免以后的不一致和删除所有不完整记录的踪迹,避免以后的不一致和计算失误。计算失误。 前面的三项任务构成了一个事务。任何一个任前面的三项任务构成了一个事务。任何一个任务的失败都会导致整个事务被撤销,系统返回到以务的失败都会导致整个事务被撤销,系统返回到以前的状态前的状态事务处理事务处理 首先

60、,首先,用户必须关闭自动提交,事务才能由多条用户必须关闭自动提交,事务才能由多条SQLSQL语句组成,使用如语句组成,使用如下语句:下语句: SET AUTOCOMMIT=0; SET AUTOCOMMIT=0;(1 1) 开始事务开始事务 当一个应用程序的第一条当一个应用程序的第一条SQLSQL语句或者在语句或者在COMMITCOMMIT或或ROLLBACKROLLBACK语句(后语句(后面介绍)后的第一条面介绍)后的第一条SQLSQL执行后,一个新的事务也就开始了。另外还可以执行后,一个新的事务也就开始了。另外还可以使用一条使用一条START TRANSACTIONSTART TRANSA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论