扩展数据库存储空间的方法及装置、 服务器 技术领域 本发明涉及数据库存储技术领域, 尤其涉及一种扩展数据库存储空间的方法及装 置、 服务器。
背景技术 Linux 系统中, 数据库的建立同时其所占用的空间也被设定。 在数据库中存储数据 时, 待存储的数据被自动放入所设定的相应空间。
在实际应用中, 经常会发生数据库所在服务器由于硬盘容量不够需要扩容的情 况。这种情况下, 往往通过在服务器中增加新硬盘的方式来解决硬盘容量不足的问题。
现有技术中, 由于数据库无法自动识别新增加的硬盘, 因此通过增加新硬盘的方 式进行扩容, 通常需要做大量的数据迁移工作, 使得数据可以存储到新硬盘中。 或者通过购 买可以自动扩容的存储设备用于数据库的存储。这类存储设备通过硬件上的功能, 使得操 作系统层面将存储设备中多个磁盘识别为一个整体, 即将多个硬盘模拟成了一个大硬盘。 这种方法的缺点就是设备价格昂贵, 远超同容量的普通硬盘的价格。
发明内容 本发明的目的在于提出一种扩展数据库存储空间的方法及装置、 服务器, 以实现 挂载新硬盘的情况下数据库存储空间的自动扩展。
本发明提供了一种扩展数据库存储空间的方法, 包括 :
服务器启动时, 操作系统检测是否有新硬盘挂载 ;
若检测到新硬盘, 则所述操作系统生成用于分区的脚本 ;
所述操作系统执行所述脚本对所述新硬盘进行分区 ;
所述操作系统为所述新硬盘创建文件系统 ;
所述操作系统将创建的文件系统加载到所述操作系统中 ;
数据库空间管理模块根据所述新硬盘的容量及挂载点扩展已有数据库的存储空 间。
本发明还提供了一种扩展数据库存储空间的装置, 包括 :
硬盘检测模块, 用于在服务器启动时, 检测是否有新硬盘挂载 ; 若检测到新硬盘, 则生成用于分区的脚本, 并执行所述脚本对所述新硬盘进行分区 ; 为所述新硬盘创建文件 系统, 将创建的文件系统加载到操作系统中 ;
数据库空间管理模块, 用于根据所述新硬盘的容量及挂载点扩展已有数据库的存 储空间。
本发明还提供了一种服务器, 包括上述扩展数据库存储空间的装置。
上述技术方案通过操作系统对新挂载的硬盘进行检测, 并对新挂载的硬盘进行加 载, 以及根据新硬盘的容量及挂载点扩展已有数据库的存储空间, 无需将新硬盘与已有硬 盘模拟为一个整体, 就直接实现了挂载新硬盘的情况下数据库存储空间的自动扩展到新硬
盘。
下面通过附图和实施例, 对本发明的技术方案做进一步的详细描述。附图说明
图 1 为本发明实施例提供的扩展数据库存储空间的方法的流程图 ; 图 2 为本发明实施例提供的一种扩展数据库存储空间的装置的结构示意图 ; 图 3 为本发明实施例提供的另一种扩展数据库存储空间的装置的结构示意图 ; 图 4 为图 3 所示装置的具体检测的流程图 ; 图 5 为图 3 所示装置的一种扩展数据库存储空间的流程图。具体实施方式
图 1 为本发明实施例提供的扩展数据库存储空间的方法的流程图。如图 1 所示, 该方法包括 :
步骤 11、 服务器启动时, 操作系统检测是否有新硬盘挂载 ;
如, linux 系统先读取原硬盘信息, 然后使用系统自带的 fdisk-1 命令获取当前系 统中的所有硬盘信息。fdisk-1 命令的结果示例如下 : Disk/dev/hda : 8589MB, 8589934592bytes
255heads, 63sectors/track, 1044cylinders
Units = cylinders ofl6065*512 = 8225280bytes
Device Boot Start End Blocks Id System
/dev/hdal * 1 978 7855753+ 83 Linux
/dev/hda2 979 1043 522112+ 82 Linux swap
Disk/dev/hdb : 27MB, 27262976bytes
16heads, 63sectors/track, 52cylinders
Units = cylinders of 1008*512 = 516096bytes
Disk/dev/hdb doesn′ t contain a valid partition table
上述结果中显示了 2 个硬盘 /dev/hda 和 /dev/hdb 的信息。其中 /dev/hdb 是新 硬盘, 尚未进行分区。
步骤 12、 若检测到新硬盘, 则所述操作系统生成用于分区的脚本 ;
如比对原硬盘信息和最新获取到的系统硬盘信息, 获得新挂载的硬盘的信息。自 动根据新硬盘的信息和使系统自带 sfdisk 命令生成分区的脚本 partition.sh。脚本内容 示例如下 :
sfdisk/dev/hdb << EOF
0 52
EOF。
其 中, /dev/hdb 是 新 硬 盘 名 称, 0 是 分 区 起 始 cylinder, 52 是 硬 盘 最 大 的 cylinder。
步骤 13、 所述操作系统执行所述脚本对所述新硬盘进行分区 ;
如生成脚本以后, 通过 sh partition.sh 命令执行本脚本, 完成分区。分区完成以
后新硬盘的信息显示如下 :
Disk/dev/hdb : 27MB, 27262976bytes
16heads, 63sectors/track, 52cylinders
Units = cylinders of 1008*512 = 516096bytes
Device Boot Start End Blocks Id System
/dev/hdb1 1 52 26207+83 Linux
可以看到, 整个新硬盘分成了一个区 /dev/hdb1。
步骤 14、 所述操作系统为所述新硬盘创建文件系统 ;
如自动使用 mkfs 系列命令自动为新硬盘创建文件系统。
文件系统的创建过程是存储设备建立文件系统的过程, 一般也被称为格式化或初 始化, 通过一些初始化工具来进行。如在 Linux 中通过 mkfs 系列工具即 mkfs 系列命令来 实现。常用的文件系统主要有 ext3、 ext2 及 reiserfs。
步骤 15、 所述操作系统将创建的文件系统加载到所述操作系统中 ;
如使用挂载 (mount) 命令将硬盘的文件系统自动加载到操作系统中, 使得新硬盘 可以被 linux 操作系统使用 .mount 命令示例如下 :
mount/dev/hdb1/mnt/disk1
其中, /dev/hdb1 是磁盘分区名称, /mnt/disk1 是挂载点 (mount point)。
文件系统只有挂载才能使用 mount 命令, linux 操作系统是通过 mount 命令进行 的, 挂载文件系统时要有挂载点, 比如在安装 Linux 的过程中, 有时会提示分区, 然后建立 文件系统, 接着是问挂载点是什么, 这时大多选择的是 “/” 。 在 Linux 系统的使用过程中, 也 会挂载其它的硬盘分区, 也要选中挂载点, 挂载点通常是一个空置的目录, 最好是自建的空 置目录。
步骤 16、 数据库空间管理模块根据所述新硬盘的容量及挂载点扩展已有数据库的 存储空间。具体地, 数据库空间管理模块可以根据所述新硬盘的容量及挂载点将所述已有 数据库的新增数据库表格建立到所述新硬盘上 ; 数据库空间管理模块也可以根据所述新硬 盘的容量及挂载点将所述已有数据库的已有数据库表格的新增存储空间建立到所述新硬 盘上。
数据库空间管理模块根据所述新硬盘的容量及挂载点扩展已有数据库的存储空 间之前还可包括 :
检测所述已有数据库的存储空间的剩余空间是否小于预先设定的阈值 ;
在所述已有数据库的存储空间的剩余空间小于阈值的情况下, 执行存储空间的扩 展操作。
图 2 为本发明实施例提供的一种扩展数据库存储空间的装置的结构示意图。如图 2 所示, 该装置包括 : 硬盘检测模块 21、 数据库空间管理模块 22。硬盘检测模块 21 用于在 服务器启动时, 检测是否有新硬盘挂载 ; 若检测到新硬盘, 则生成用于分区的脚本, 并执行 所述脚本对所述新硬盘进行分区 ; 为所述新硬盘创建文件系统, 将创建的文件系统加载到 操作系统中。数据库空间管理模块 22 用于根据所述新硬盘的容量及挂载点扩展已有数据 库的存储空间。其中, 硬盘检测模块 21 属于操作系统的一部分。
图 3 为本发明实施例提供的另一种扩展数据库存储空间的装置的结构示意图。如图 3 所示, 该装置包括 : 硬盘维护模块 31、 硬盘检测模块 32、 数据库空间管理模块 33。硬盘 维护模块 31 用于保存所述新硬盘的容量及挂载点信息。还可用来维护当前的硬盘信息, 如 当前服务器有哪些硬盘、 每个硬盘的剩余空间信息等。硬盘检测模块 32 用来检测是否有新 的硬盘挂载。数据库空间管理模块 33 用来进行数据库空间的管理, 包括进行数据库表维 护, 为数据库表分配磁盘空间等。 其中, 硬盘维护模块 31、 硬盘检测模块 32 属于操作系统的 一部分。硬盘检测模块 32、 数据库空间管理模块 33 详见图 2 所示装置的说明。
硬盘检测模块 32 在服务器启动的时候检测是否有新的硬盘挂载。如果有新硬盘 挂载进来, 则将新硬盘的信息传递给硬盘维护模块 31。传递的新硬盘的信息包括新硬盘的 容量, 剩余空间等信息。
具体检测的流程如图 4 所示, 包括 :
步骤 41、 硬盘检测模块首先从硬盘维护模块读取到原硬盘信息 ;
步骤 42、 硬盘检测模块检测服务器中当前存在哪些硬盘。具体地, linux 系统下使 用操作系统自带的 fdisk-1 命令即可获取到目前系统中的所有硬盘信息。fdisk-1 命令详 见上述方法实施例中的说明。
步骤 43、 硬盘检测模块比对原硬盘信息和最新获取到的系统硬盘信息, 判断是否 有新硬盘挂载 ; 若是, 则获得新挂载的硬盘的信息, 执行步骤 44 ; 否则, 结束。 硬盘检测模块发现新挂载的硬盘以后, 自动根据新硬盘的信息和使系统自带 sfdisk 命令生成分区的脚本 partition.sh。脚本内容详见上述方法实施例中的说明。
生成脚本以后, 通过 sh partition.sh 命令执行本脚本, 完成分区工作, 详见上述 方法实施例中的说明。
分区完成以后, 自动使用 mkfs 系列命令自动为新硬盘创建文件系统以及分区。然 后使用 mount 命令将创建的文件系统自动加载到操作系统中, 使得新硬盘可以被 linux 操 作系统使用。mount 命令详见上述方法实施例的说明。
步骤 44、 硬盘检测模块将新硬盘信息发送给硬盘维护模块进行保存维护。新硬盘 信息包括新硬盘的挂载点、 大小即容量。
硬盘维护模块接收到硬盘检测模块传递过来的新硬盘信息以后, 将信息保存起 来。可以保存到普通文件或者是数据库等可以持久化存储的地方。比如说可能保存了如下 信息, 其中磁盘分区名称为 “/dev/hdc1” 是新挂载的硬盘。并且通知数据库空间管理模块 有新的硬盘加载。
磁盘分区名称 /dev/hda1 /dev/hdb1 /dev/hdc1
总空间 100GB 200GB 500GB挂载点 /mnt/di sk1 /mnt/di sk2 /mnt/disk3数据库空间管理模块负责根据硬盘信息, 以及预先设置的扩展策略自动扩展数据 库的存储空间。扩展策略可以根据应用的需要进行灵活设置。一种扩展策略是当数据库空间不足的时候才进行扩展。这种策略下, 数据库空间 管理模块在检测到原有硬盘空间不足的时候, 才真正的执行扩展动作, 扩展数据库的存储 空间到新硬盘。具体地, 如图 5 所示, 每一次周期运行时的流程包括 :
步骤 51、 数据空间管理模块周期性扫描数据库当前使用的硬盘的剩余空间 ;
步骤 52、 判断数据库当前使用的硬盘的剩余空间是否小于阈值 ; 若是, 则执行步 骤 53 ; 否则, 执行步骤 51 ; 其中, 阈值需要预先设置, 规定剩余空间小于阈值时就扩展数据 库的存储空间 ;
步骤 53、 当检测到剩余空间小于预先设置的阈值时, 数据库空间管理模块执行扩 展。
其中, 扩展数据库存储空间可以通过数据库的 SQL 语句来完成, 也可以根据应用 的需要选择不同的扩展方式。 数据库空间管理模块可采用如下两种扩展方式扩展数据库存 储空间。
一种扩展方式是将新的数据库表格建立到新磁盘上。 这种方式用于需要按照日期 分别进行分表存储的应用。比如网络的 NAT 日志, 通常为每天的日志单独设置一张表。如 表 NAT 20091112 存储 2009 年 11 月 12 日的 NAT 日志, 表 NAT 20091113 存储 2009 年 11 月 13 日的数据。这样可以将一些新增的表格建立到新硬盘上, 使得新硬盘的空间被数据库利 用。这种扩展方式的实现使用标准 SQL 的创建表格 (CREATE TABLE) 命令即可。 另一种扩展方式是为现有表格新增存储空间, 并将新的存储空间建立到新硬盘上 来。目前主流的数据库技术都支持为同一个表格指定多个存储位置。数据库空间管理模块 可以利用数据库的这种特性, 将新的存储空间指向新硬盘, 使得数据库利用新挂载硬盘的 空间。这种扩展方式的实现同样是使用数据库提供的 SQL 语句来完成, 不同的数据库提供 的命令可能不一样。比如 oracle 可以通过表空间操作命令来完成数据文件的增加, 具体的 命令格式示例如下 :
ALTER TABLESPACE game
ADD DATAFILE′ /mnt/disk1/oracle/oradata/db/GAME02.dbf′ SIZE1000M。
另一种扩展策略是发现新硬盘后直接扩展数据库存储空间。这种策略下, 数据库 空间管理模块收到硬盘维护模块的通知以后, 立即执行扩展动作, 使得数据库可以立即使 用新挂载的硬盘。 具体地, 数据库空间管理模块监听硬盘维护模块的消息。 当数据库空间管 理模块接收到有新硬盘加载的包含新硬盘大小、 挂载点信息等的消息后, 使用数据库的 SQL 语句扩展数据库的存储空间。 具体扩展详见上述第一种扩展策略中扩展数据库存储空间的 说明。
上述方法、 装置及设备实施例可以自动识别新挂载的硬盘并且在新硬盘上自动扩 展数据库的存储空间, 避免了人工挂载新硬盘以及挂载新硬盘后需要手工扩展数据库空间 的繁琐工作, 非常适合产生数据量很大而需要廉价存储设备且经常需要扩展磁盘空间的应 用, 避免了人工操作的繁琐以及不确定。
本领域普通技术人员可以理解 : 实现上述方法实施例的全部或部分步骤可以通过 程序指令相关的硬件来完成, 前述的程序可以存储于一计算机可读取存储介质中, 该程序 在执行时, 执行包括上述方法实施例的步骤 ; 而前述的存储介质包括 : ROM、 RAM、 磁碟或者 光盘等各种可以存储程序代码的介质。
最后应说明的是 : 以上实施例仅用以说明本发明的技术方案, 而非对其限制 ; 尽 管参照前述实施例对本发明进行了详细的说明, 本领域的普通技术人员应当理解 : 其依然 可以对前述各实施例所记载的技术方案进行修改, 或者对其中部分技术特征进行等同替 换; 而这些修改或者替换, 并不使相应技术方案的本质脱离本发明各实施例技术方案的精 神和范围。