1、刘刚苑超影编著刘刚苑超影编著用户管理用户管理 权限管理权限管理 表空间管理(表空间管理(InnoDBInnoDB)备份与还原备份与还原 主从同步配置主从同步配置 小结小结 本章介绍本章介绍MySQLMySQL管理,包括用户管理、权限管理、表空间管管理,包括用户管理、权限管理、表空间管理、备份与还原,以及主从同步配置。理、备份与还原,以及主从同步配置。9.19.1用户管理用户管理 MySQL MySQL数据库的用户管理包括创建用户、修改用户、删除用数据库的用户管理包括创建用户、修改用户、删除用户等操作。户等操作。9.1.19.1.1创建用户创建用户#创建用户,任何创建用户,任何ipip的客户端都
2、可以访问的客户端都可以访问create user xiaogang%identified by 123456;create user xiaogang%identified by 123456;#创建用户,只有本地的客户端才可以访问创建用户,只有本地的客户端才可以访问create user xiaoganglocalhost identified by 123456;create user xiaoganglocalhost identified by 123456;#创建用户,只有指定的创建用户,只有指定的192.168.1.90192.168.1.90这个这个ipip才可以访问才可以访问c
3、reate user xiaogang192.168.1.90 identified by 123456;create user xiaogang192.168.1.90 identified by 123456;MySQLMySQL数据库使用数据库使用createcreate关键字来创建用户,在关键字来创建用户,在 符号前面符号前面是用户的名称,在是用户的名称,在 符号后面是限制访问数据库客户端的符号后面是限制访问数据库客户端的ipip。(1 1)使用)使用%,则说明任何,则说明任何ipip的客户端都可以连接到这个数据库上的客户端都可以连接到这个数据库上进行相关操作。进行相关操作。(2 2)
4、使用)使用localhostlocalhost,则说明只能允许数据库服务器的本地客户,则说明只能允许数据库服务器的本地客户端连接到这个数据库上进行相关操作。端连接到这个数据库上进行相关操作。(3 3)使用指定的)使用指定的ipip,如,如192.168.1.90192.168.1.90,则只有这个,则只有这个ipip的客户端的客户端才可以访问,为了安全起见,往往会设置指定的才可以访问,为了安全起见,往往会设置指定的ipip来连接数据库。来连接数据库。采用关键字采用关键字identified byidentified by来指定密码,可以根据自己的需来指定密码,可以根据自己的需要设置密码的复杂度
5、。创建的用户是允许重复的,如果要查询数要设置密码的复杂度。创建的用户是允许重复的,如果要查询数据库有哪些用户以及访问数据库的客户端据库有哪些用户以及访问数据库的客户端ipip权限,则可以使用以权限,则可以使用以下命令。下命令。SELECT user,host FROM mysql.user;SELECT user,host FROM mysql.user;9.1.29.1.2修改用户修改用户 MySQL 5.7 MySQL 5.7版本的数据库采用以下命令来修改用户的密码。版本的数据库采用以下命令来修改用户的密码。update mysql.user set authentication_stri
6、ng=password(update mysql.user set authentication_string=password(新密码新密码)where user=xiaogang and host=localhost;where user=xiaogang and host=localhost;用户客户端访问数据库的用户客户端访问数据库的ipip限制,可以采用以下命令进行修改。限制,可以采用以下命令进行修改。update mysql.user set host=192.168.1.100 where user=xiaoying;update mysql.user set host=192.
7、168.1.100 where user=xiaoying;创建好的用户如果要修改密码,要更新创建好的用户如果要修改密码,要更新MySQLMySQL的用户表,在的用户表,在5.75.7版本的版本的MySQLMySQL中,密码存放在中,密码存放在authentication_stringauthentication_string中,需中,需要对它进行修改。在修改密码的时候,用户需要获得要对它进行修改。在修改密码的时候,用户需要获得reloadreload权限,权限,否则使用否则使用flush privilegesflush privileges刷新刷新MySQLMySQL的系统权限相关表会报错,
8、的系统权限相关表会报错,可以使用以下命令进行授权。可以使用以下命令进行授权。GRANT reload ON GRANT reload ON*.*to root%;to root%;如果不对用户授予如果不对用户授予reloadreload权限,也可以在更新密码之后重启权限,也可以在更新密码之后重启MySQLMySQL服务,不使用服务,不使用flush privilegesflush privileges刷新刷新MySQLMySQL的系统权限相关的系统权限相关表。表。9.1.39.1.3删除用户删除用户 删除用户使用以下命令。删除用户使用以下命令。DELETE FROM mysql.user WH
9、ERE user=xiaoying and DELETE FROM mysql.user WHERE user=xiaoying and host=localhost;host=localhost;9.29.2权限管理权限管理 MySQL MySQL的用户权限管理主要包括以下几个方面。的用户权限管理主要包括以下几个方面。(1 1)设置用户拥有访问数据库、表的权限。)设置用户拥有访问数据库、表的权限。(2 2)设置用户拥有的操作权限()设置用户拥有的操作权限(SELECTSELECT、CREATECREATE、UPDATEUPDATE、DELETEDELETE等)。等)。(3 3)设置用户使用指
10、定的)设置用户使用指定的IPIP访问权限。访问权限。(4 4)设置用户是否可以给其他用户授权的权限。)设置用户是否可以给其他用户授权的权限。9.2.19.2.1权限授权语法权限授权语法 授予权限:授予权限:GRANT ALL PRIVILEGES ON GRANT ALL PRIVILEGES ON*.*TO xiaogang%IDENTIFIED BY TO xiaogang%IDENTIFIED BY 123456 WITH GRANT OPTION;123456 WITH GRANT OPTION;撤销权限:撤销权限:REVOKE ALL PRIVILEGES ON REVOKE ALL
11、 PRIVILEGES ON*.*FROM xiaogang%;FROM xiaogang%;(1 1)GRANTGRANT:授予权限的关键字。:授予权限的关键字。(2 2)REVOKEREVOKE:撤销权限的关键字。:撤销权限的关键字。(3 3)ALL PRIVILEGESALL PRIVILEGES:将所有权限授予用户,也可指定具体的:将所有权限授予用户,也可指定具体的权限,如增删改查(权限,如增删改查(SELECTSELECT、CREATECREATE、DROPDROP)等权限。)等权限。(4 4)ONON:权限对哪些数据库和表生效,格式为数据库名:权限对哪些数据库和表生效,格式为数据库
12、名.表名,表名,“*.*”是指对所有数据库和数据表授权。是指对所有数据库和数据表授权。(5 5)TOTO:权限授予用户,格式:权限授予用户,格式“用户名用户名”“”“登录登录IPIP或域名或域名”,%没有限制,在任何主机都可以登录,也可以指定没有限制,在任何主机都可以登录,也可以指定ipip或者或者ipip段,段,“192.168.1.%”“192.168.1.%”,用户只能在,用户只能在192.168.1IP192.168.1IP段登录。段登录。(6 6)FROMFROM:从用户那里回收权限。:从用户那里回收权限。(7 7)IDENTIFIED BYIDENTIFIED BY:指定用户的登录
13、密码。:指定用户的登录密码。(8 8)WITH GRANT OPTIONWITH GRANT OPTION:允许用户将自己的权限授予其他用户。:允许用户将自己的权限授予其他用户。可以使用可以使用GRANTGRANT给用户添加多个权限,给用户添加了一个给用户添加多个权限,给用户添加了一个SELECTSELECT权限后,又给用户添加了一个权限后,又给用户添加了一个INSERTINSERT权限,该用户就同时权限,该用户就同时拥有了拥有了SELECTSELECT和和INSERTINSERT权限。权限。MySQLMySQL数据库权限表如表数据库权限表如表9.19.1所示。所示。表9.1MySQL数据库权
14、限表续表 对于数据库表、数据库列以及存储过程应该给予什么权限,对于数据库表、数据库列以及存储过程应该给予什么权限,官方文档指导说明如表官方文档指导说明如表9.29.2所示。所示。表9.2权限配置9.2.29.2.2账户权限体系账户权限体系 账户权限体系分为服务级用户权限、数据库级用户权限、表级账户权限体系分为服务级用户权限、数据库级用户权限、表级用户权限、字段级用户权限,不同的用户级别拥有不同的权限。用户权限、字段级用户权限,不同的用户级别拥有不同的权限。1 1服务级用户权限服务级用户权限 服务级用户权限拥有对所有数据库进行操作的权限,如同服务级用户权限拥有对所有数据库进行操作的权限,如同ro
15、otroot用户一样,可以删除所有数据库以及表,权限存储在用户一样,可以删除所有数据库以及表,权限存储在mysql.usermysql.user表表中。中。GRANT ALL ON GRANT ALL ON*.*和和REVOKE ALL ON REVOKE ALL ON*.*只授予和撤销全局权只授予和撤销全局权限,限,*.*表示所有数据库、所有数据表。表示所有数据库、所有数据表。#授予用户授予用户xiaogangxiaogang为服务级用户权限,具有为服务级用户权限,具有grant grant 权限,可以创建其他权限,可以创建其他用户的权限用户的权限GRANT ALL PRIVILEGES O
16、N GRANT ALL PRIVILEGES ON*.*TO xiaogang%IDENTIFIED BY TO xiaogang%IDENTIFIED BY 123456 WITH GRANT OPTION;123456 WITH GRANT OPTION;2 2数据库级用户权限数据库级用户权限 在具有数据库级用户权限的数据库中可以进行增删改查等操在具有数据库级用户权限的数据库中可以进行增删改查等操作(依据分配的权限),权限存储在作(依据分配的权限),权限存储在mysql.dbmysql.db和和mysql.hostmysql.host表表中,中,GRANT ALL ON db_name.G
17、RANT ALL ON db_name.*和和REVOKE ALL ON db_name.REVOKE ALL ON db_name.*只只授予和撤销数据库级权限,授予和撤销数据库级权限,db_name.db_name.*表示指定的数据库。表示指定的数据库。#授予用户授予用户xiaogangxiaogang数据库级用户权限,可以操作数据库级用户权限,可以操作staffstaff数据库的所有权限数据库的所有权限GRANT ALL PRIVILEGES ON staff.GRANT ALL PRIVILEGES ON staff.*TO xiaogang%IDENTIFIED TO xiaogan
18、g%IDENTIFIED BY 123456 WITH GRANT OPTION;BY 123456 WITH GRANT OPTION;3 3表级用户权限表级用户权限 表级用户权限即对给定表中的所有列进行操作的权限(依据表级用户权限即对给定表中的所有列进行操作的权限(依据分配的权限),权限存储在分配的权限),权限存储在mysql.tables_privmysql.tables_priv表中,表中,GRANT ALL GRANT ALL ON db_name.tbl_nameON db_name.tbl_name和和REVOKE ALL ON db_name.tbl_nameREVOKE AL
19、L ON db_name.tbl_name只授只授予和撤销表权限,予和撤销表权限,db_name.tbl_namedb_name.tbl_name表示指定的数据库和指定的表示指定的数据库和指定的表。表。#授予用户授予用户xiaogangxiaogang表级用户权限,可以对表级用户权限,可以对staffstaff数据库中的数据库中的employeeemployee表进表进行操作的所有权限行操作的所有权限GRANTALLPRIVILEGESONstaff.employeeTOxiaogang%IDENTIFIEDBYGRANTALLPRIVILEGESONstaff.employeeTOxiaog
20、ang%IDENTIFIEDBY123456WITHGRANTOPTION;123456WITHGRANTOPTION;4 4字段级用户权限字段级用户权限 字段级用户权限是对给定表中的单一列操作的权限(依据分配字段级用户权限是对给定表中的单一列操作的权限(依据分配的权限),权限存储在的权限),权限存储在mysql.columns_privmysql.columns_priv表中,当使用表中,当使用REVOKEREVOKE时,必须指定与被授权列相同的列。字段级用户权限使用频率低,时,必须指定与被授权列相同的列。字段级用户权限使用频率低,每次访问时都需要权限校验,效率低下。每次访问时都需要权限校验
21、,效率低下。9.2.39.2.3权限授予原则权限授予原则 在进行信息安全检查或者信息系统安全等级保护测评的过程在进行信息安全检查或者信息系统安全等级保护测评的过程中,需要对数据库进行安全扫描,如果权限授予有问题,就会产中,需要对数据库进行安全扫描,如果权限授予有问题,就会产生漏洞。下面列举一些常见的数据库漏洞。生漏洞。下面列举一些常见的数据库漏洞。(1 1)super super 权限授予了除权限授予了除 root root 外的用户。外的用户。风险等级:中。风险等级:中。产生原因:产生原因:super super 权限授予了除权限授予了除 root root 外的用户。外的用户。漏洞描述:该
22、策略检测漏洞描述:该策略检测supersuper的权限是否授予了除的权限是否授予了除rootroot外的用户。外的用户。拥有拥有supersuper权限的用户可以终止其他用户的权限的用户可以终止其他用户的mySQLmySQL进程。在一个安进程。在一个安全的环境中,全的环境中,supersuper权限只授予权限只授予rootroot用户。用户。修复建议:回收授予的除修复建议:回收授予的除 root root 外的用户权限。命令为外的用户权限。命令为revoke revoke super on super on*.*from userhost;from userhost;其中参数其中参数 user
23、 user 为需为需要修改的用户名,要修改的用户名,host host 为用户所在主机名。为用户所在主机名。(2 2)create user create user 权限授予了除权限授予了除 root root 外的用户。外的用户。风险等级:中。风险等级:中。产生原因:产生原因:create user create user 的权限授予了除的权限授予了除 root root 外的用户。外的用户。漏洞描述:该策略检测漏洞描述:该策略检测create usercreate user的权限是否授予了除的权限是否授予了除rootroot外的外的用户。拥有创建用户权限的用户可以在数据库服务器中创建用户,
24、用户。拥有创建用户权限的用户可以在数据库服务器中创建用户,并且可以把对数据库操作的权限赋予新创建的用户,如并且可以把对数据库操作的权限赋予新创建的用户,如selectselect、insertinsert、updateupdate、deletedelete,也就是说得到了创建用户权限的用户,也就是说得到了创建用户权限的用户可以间接控制数据库服务器。在一个安全的环境中,可以间接控制数据库服务器。在一个安全的环境中,create usercreate user的权限只授予的权限只授予rootroot用户。用户。修复建议:回收授予的除修复建议:回收授予的除 root root 外的用户权限。命令为外
25、的用户权限。命令为revoke revoke create user on create user on*.*from userhost;from userhost;其中参数其中参数 user user 为需要修改的用户名,为需要修改的用户名,host host 为用户所在主机名。为用户所在主机名。(3 3)存在)存在 file file 全局权限用户。全局权限用户。风险等级:中。风险等级:中。产生原因:存在产生原因:存在 file file全局权限的普通用户。全局权限的普通用户。漏洞描述:该策略检测是否存在漏洞描述:该策略检测是否存在filefile全局权限的普通用户。如用全局权限的普通用户
26、。如用户被授予户被授予filefile全局权限,则可以通过全局权限,则可以通过LOADDATAINFILELOADDATAINFILE和和SELECT.SELECT.INTOOUTFILEINTOOUTFILE语句读写服务器上的任何文件。从数据库安全角度考语句读写服务器上的任何文件。从数据库安全角度考虑,只有管理员用户才被授予虑,只有管理员用户才被授予filefile全局权限。全局权限。修复建议:通过命令修复建议:通过命令update mysql.user set file_priv=N update mysql.user set file_priv=N where user=user and
27、 host=hostwhere user=user and host=host撤销用户的撤销用户的 file file全全局权限;其中参数局权限;其中参数 user user 为需要修改的用户名,为需要修改的用户名,host host 为用户所为用户所在主机名。在主机名。(4 4)存在)存在 drop drop 全局权限用户。全局权限用户。风险等级:中。风险等级:中。产生原因:存在产生原因:存在 drop drop 全局权限的普通用户。全局权限的普通用户。漏洞描述:该策略检测是否存在漏洞描述:该策略检测是否存在dropdrop全局权限的普通用户。如用全局权限的普通用户。如用户被授予户被授予dr
28、opdrop全局权限,则可能会有重要数据库或表被删除的危全局权限,则可能会有重要数据库或表被删除的危险。从数据库安全角度考虑,只有管理员用户才被授予险。从数据库安全角度考虑,只有管理员用户才被授予dropdrop全局全局权限。权限。修复建议:通过命令修复建议:通过命令drop user userhostdrop user userhost删除拥有删除拥有 drop drop 全局权限的普通用户;或通过命令全局权限的普通用户;或通过命令update mysql.user set update mysql.user set drop_priv=N where user=user and host=
29、hostdrop_priv=N where user=user and host=host撤销撤销普通用户的普通用户的 drop drop全局权限;其中参数全局权限;其中参数 user user 为需要修改的用户名,为需要修改的用户名,host host 为用户所在主机名。为用户所在主机名。(5 5)存在)存在 grant grant 数据库级权限用户。数据库级权限用户。风险等级:中。风险等级:中。产生原因:存在产生原因:存在 grant grant 数据库级权限的普通用户。数据库级权限的普通用户。漏洞描述:该策略检测是否存在漏洞描述:该策略检测是否存在grantgrant数据库级权限的普通用
30、户。数据库级权限的普通用户。grantgrant数据库级权限允许用户在全局范围内授予其他用户权限。数据库级权限允许用户在全局范围内授予其他用户权限。在某些版本中,具有在某些版本中,具有grantgrant权限的用户可以重置其他任何用户的权限的用户可以重置其他任何用户的密码,这可能会导致一个用户通过修改其他所有用户密码而控制密码,这可能会导致一个用户通过修改其他所有用户密码而控制整个数据。整个数据。修复建议:通过命令修复建议:通过命令update mysql.db set grant_priv=N update mysql.db set grant_priv=N where user=user
31、and host=hostwhere user=user and host=host撤销普通用户对撤销普通用户对 grant grant 的数据库级权限;其中参数的数据库级权限;其中参数 user user 为需要修改的用户名,为需要修改的用户名,host host 为用户所在主机名。为用户所在主机名。(6 6)存在)存在 drop drop 数据库级权限用户。数据库级权限用户。风险等级:中。风险等级:中。产生原因:存在产生原因:存在 drop drop 数据库级权限的普通用户。数据库级权限的普通用户。漏洞描述:该策略检测是否存在漏洞描述:该策略检测是否存在dropdrop数据库级权限的普通用
32、户。数据库级权限的普通用户。如用户被授予如用户被授予dropdrop数据库级权限,则可能会有重要数据库或表被数据库级权限,则可能会有重要数据库或表被删除的危险。从数据库安全角度考虑,只有管理员用户才被授予删除的危险。从数据库安全角度考虑,只有管理员用户才被授予dropdrop数据库级权限。数据库级权限。修复建议:通过命令修复建议:通过命令update mysql.db set drop_priv=N update mysql.db set drop_priv=N where user=user and host=hostwhere user=user and host=host撤销普通用户对撤
33、销普通用户对 drop drop 的数据库级权限;其中参数的数据库级权限;其中参数 user user 为需要修改的用户名,为需要修改的用户名,host host 为用户所在主机名。为用户所在主机名。(7 7)存在)存在 process process 全局权限用户。全局权限用户。风险等级:中。风险等级:中。产生原因:存在产生原因:存在 process process 权限的用户。权限的用户。漏洞描述:该策略检测是否存在漏洞描述:该策略检测是否存在processprocess权限的用户。权限的用户。processprocess是管理权限,是管理权限,processprocess权限能被用来查看
34、当前执行查询的明文文权限能被用来查看当前执行查询的明文文本,包括设定或改变密码的查询。从数据库安全角度考虑,只有本,包括设定或改变密码的查询。从数据库安全角度考虑,只有管理员用户才可以被授予管理员用户才可以被授予processprocess权限。权限。修复建议:通过命令修复建议:通过命令update mysql.user setprocess_priv=N update mysql.user setprocess_priv=N where user=user and host=hostwhere user=user and host=host撤销用户的撤销用户的 process process
35、 权限;其中参数权限;其中参数 user user 为需要修改的用户名,为需要修改的用户名,host host 为用户所在主为用户所在主机名。机名。(8 8)从任意主机登录的用户。)从任意主机登录的用户。风险等级:中。风险等级:中。产生原因:存在从任意主机都能登录数据库的用户。产生原因:存在从任意主机都能登录数据库的用户。漏洞描述:该策略检测是否存在从任意主机都能登录数据库的用漏洞描述:该策略检测是否存在从任意主机都能登录数据库的用户。当用户请求连接时,服务器会用户。当用户请求连接时,服务器会用useruser表中的表中的hosthost、useruser、password 3password
36、 3个字段进行身份验证,其中个字段进行身份验证,其中hosthost为用户所在主机,为用户所在主机,如果如果useruser表中某一用户的表中某一用户的hosthost字段值为空或者为通配符字段值为空或者为通配符“%”“%”,则意味着该用户可以从任意主机登录数据库,从安全角度来考虑则意味着该用户可以从任意主机登录数据库,从安全角度来考虑这是不允许的。这是不允许的。修复建议:通过命令修复建议:通过命令update mysql.user set host=newhost update mysql.user set host=newhost where user=usernameand host i
37、n(,%);flush where user=usernameand host in(,%);flush privilegesprivileges修改修改 user user 的的 host host 字段;其中参数字段;其中参数 newhost newhost 表示表示指定的主机指定的主机 ip ip 或者主机名,或者主机名,usernameusername表示需要修改的用户名。表示需要修改的用户名。(9 9)存在拥有)存在拥有 replication slave replication slave 权限的普通用户。权限的普通用户。风险等级:低。风险等级:低。产生原因:存在拥有产生原因:存在
38、拥有 replication slave replication slave 权限的普通用户。权限的普通用户。漏洞描述:该策略检测是否存在拥有漏洞描述:该策略检测是否存在拥有replication slavereplication slave权限的权限的普通用户。如用户被授予普通用户。如用户被授予replication slavereplication slave权限,则可以查看权限,则可以查看从服务器,从主服务器读取二进制日志。因此,建议该权限只授从服务器,从主服务器读取二进制日志。因此,建议该权限只授权给真正需要该权限的用户。权给真正需要该权限的用户。修复建议:通过命令:修复建议:通过命令
39、:drop user userhostdrop user userhost删除拥有删除拥有 replication slave replication slave 权限的普通用户;或通过命令权限的普通用户;或通过命令update mysql.update mysql.user set repl_slave_priv=N where user=user and user set repl_slave_priv=N where user=user and host=hosthost=host撤销普通用户的撤销普通用户的 replication slave replication slave 权限;
40、其中权限;其中参数参数 user user 为需要修改的用户名,为需要修改的用户名,host host 为用户所在主机名。为用户所在主机名。(1010)存在拥有)存在拥有 show database show database 权限的普通用户。权限的普通用户。风险等级:低。风险等级:低。产生原因:存在拥有产生原因:存在拥有 show database show database 权限的普通用户。权限的普通用户。漏洞描述:该策略检测是否存在拥有漏洞描述:该策略检测是否存在拥有show databaseshow database权限的普通权限的普通用户。如用户被授予用户。如用户被授予show da
41、tabaseshow database权限,则可以查看数据库服权限,则可以查看数据库服务器中所有的数据库,得到数据库服务器的敏感信息。因此,建务器中所有的数据库,得到数据库服务器的敏感信息。因此,建议该权限只授权给真正需要该权限的用户。议该权限只授权给真正需要该权限的用户。修复建议:通过命令修复建议:通过命令drop user userhostdrop user userhost删除拥有删除拥有 show database show database 权限的普通用户,或通过命令权限的普通用户,或通过命令update mysql.update mysql.user set show_db_pri
42、v=N where user=user and user set show_db_priv=N where user=user and host=hosthost=host撤销普通用户的撤销普通用户的 show database show database 权限;其中参权限;其中参数数 user user 为需要修改的用户名,为需要修改的用户名,host host 为用户所在主机名为用户所在主机名 从以上从以上1010个个MySQLMySQL数据库漏洞,可以总结出以下权限授予原数据库漏洞,可以总结出以下权限授予原则。则。(1 1)不要授予普通用户)不要授予普通用户super super 权限、
43、权限、create user create user 权限、权限、drop drop 全局权限、全局权限、grant grant 数据库级权限等这些管理员所拥有的权限。数据库级权限等这些管理员所拥有的权限。(2 2)授予普通用户最小权限,权限够用就行,如用户需要增删)授予普通用户最小权限,权限够用就行,如用户需要增删改查的权限,就不要授予其删除用户的权限。改查的权限,就不要授予其删除用户的权限。(3 3)数据库用户可以限制登录的主机,可以指定)数据库用户可以限制登录的主机,可以指定IPIP或者或者IPIP段。段。(4 4)用户的密码要足够复杂,可以用字母、数字、特殊字符、)用户的密码要足够复杂
44、,可以用字母、数字、特殊字符、大小写组成复杂密码。大小写组成复杂密码。(5 5)清理不用的数据库和用户,减少数据库使用空间以及不用)清理不用的数据库和用户,减少数据库使用空间以及不用的用户。的用户。9.39.3表空间管理(表空间管理(InnoDBInnoDB)MySQL MySQL数据库采用数据库采用InnoDBInnoDB存储引擎,就会有两种表空间可以存储引擎,就会有两种表空间可以使用:一种是共享表空间;另外一种是独占表空间。使用:一种是共享表空间;另外一种是独占表空间。(1 1)共享表空间。共享表空间是指一个数据库的所有表数据以)共享表空间。共享表空间是指一个数据库的所有表数据以及索引文件
45、全部放在一个文件中。共享表空间的默认文件路径在及索引文件全部放在一个文件中。共享表空间的默认文件路径在datadata目录下,默认的文件名为目录下,默认的文件名为ibdata1ibdata1,初始化为,初始化为10M10M,如图,如图9.19.1所示。所示。图9.1共享表空间文件 共享表空间可以将表空间分成多个文件存放到各个磁盘上,共享表空间可以将表空间分成多个文件存放到各个磁盘上,数据和文件放在一起方便管理,同时数据和文件都放到一个文件数据和文件放在一起方便管理,同时数据和文件都放到一个文件里会产生一个很大的文件,对一个表做了大量删除操作后其表空里会产生一个很大的文件,对一个表做了大量删除操
46、作后其表空间中将会有大量的空隙,这样会浪费空间。间中将会有大量的空隙,这样会浪费空间。(2 2)独占表空间。独占表空间是将每个表都以独立的文件方式)独占表空间。独占表空间是将每个表都以独立的文件方式来进行存储,每个表都有一个来进行存储,每个表都有一个frmfrm、ibdibd表文件。表文件。frmfrm文件保存了文件保存了每个表的元数据,包括表结构的定义等;每个表的元数据,包括表结构的定义等;ibdibd文件存放该表的数文件存放该表的数据和索引文件,如图据和索引文件,如图9.29.2所示。所示。图9.2独占表空间文件 独占表空间使每一个数据库的每一个表都有自己独立的表空独占表空间使每一个数据库
47、的每一个表都有自己独立的表空间,每个表的数据和索引都会存放在自己的表空间中,可以实现间,每个表的数据和索引都会存放在自己的表空间中,可以实现单表在不同的数据库中移动。与共享表空间相比,使用独占表空单表在不同的数据库中移动。与共享表空间相比,使用独占表空间的效率以及性能会更高一点。间的效率以及性能会更高一点。(3 3)开启表空间。默认情况下,数据库使用的表空间为共享表)开启表空间。默认情况下,数据库使用的表空间为共享表空间,但是可以通过参数空间,但是可以通过参数innodb_file_per_table innodb_file_per_table 来将其设置来将其设置为独占表空间,如果值为为独占
48、表空间,如果值为OFFOFF说明所使用的是独占表空间。说明所使用的是独占表空间。mysql show variables like innodb_file_per_table;mysql show variables like innodb_file_per_table;+-+-+-+-+|Variable_name|Value|Variable_name|Value|+-+-+-+-+|innodb_file_per_table|ON|innodb_file_per_table|ON|+-+-+-+-+1 row in set,1 warning(0.00 sec)1 row in set,
49、1 warning(0.00 sec)在配置文件在配置文件my.inimy.ini或者或者f里配置里配置innodb_file_per_table=1 innodb_file_per_table=1 是否使用共享以及独占表空间,是否使用共享以及独占表空间,1 1为使用独占表空间,为使用独占表空间,0 0 为使用共享表为使用共享表空间。空间。(4 4)查看数据库共享表空间。使用)查看数据库共享表空间。使用show variables like innodb_ show variables like innodb_ data%;data%;查看共享表空间的大小,查看共享表空间的大小,ibdata1
50、ibdata1的默认大小为的默认大小为10M10M,超过,超过10M10M可以自动扩展。可以自动扩展。innodb_data_file_pathinnodb_data_file_path可以进行多路径存储设置,可以进行多路径存储设置,innodb_data_file_path=/data1/db1/ibdata1:100M:autoextend;innodb_data_file_path=/data1/db1/ibdata1:100M:autoextend;/data2/db2/ibdata2:100M:autoextend/data2/db2/ibdata2:100M:autoextend放
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。