MYSQL数据库备份还原软件

易语言 2020-08-24 17:26:32

MYSQL数据库备份还原软件

.如果 (参数_指定的还原点 ≠ “”)
库信息编辑框.内容 = #换行符 + “************” + 到文本 (取现行时间 ()) + “开始还原已选定的时间点上的数据库记录!” + “************” + #换行符
' ---------在指定的备份的目录下面找所有的目录,也就是备份的数据库名,并加到数组中
局部_文件夹名 = 寻找文件 (读配置项 (取运行目录 () + “\sysset.ini”, “备份”, “备份路径”, ) + 参数_指定的还原点 + “\*”, 16)
.判断循环首 (局部_文件夹名 ≠ “”)
处理事件 ()
.如果真 (局部_文件夹名 ≠ “.” 且 局部_文件夹名 ≠ “..”)
加入成员 (局部_待恢复库, 局部_文件夹名)
.如果真结束
局部_文件夹名 = 寻找文件 (, 16)
.判断循环尾 ()
库信息编辑框.加入文本 (“提取待恢复数据库名成功!” + #换行符)
' ---------对备份的数据库名进行合法性判断,主要考虑到网络多用户操作,有可能已把要备份的库删除了!如果这个库已不存在,就新建一个同名库
.计次循环首 (取数组成员数 (局部_待恢复库), 局部_计次)
.如果真 (查找库 (MySql句柄, 局部_待恢复库 [局部_计次]) = 假)
库信息编辑框.加入文本 (“系统发现待还原的数据库” + 局部_待恢复库 [局部_计次] + “已不存在!可能是其它用户在网络上删除了,系统将重新建库!” + #换行符)
.如果 (创建库 (MySql句柄, “`” + 局部_待恢复库 [局部_计次] + “`”) = 真)
库信息编辑框.加入文本 (“待还原的数据库” + 局部_待恢复库 [局部_计次] + “已重新创建!” + #换行符)
.否则
库信息编辑框.加入文本 (“待还原的数据库” + 局部_待恢复库 [局部_计次] + “创建失败!” + #换行符)
.如果结束

.如果真结束

.计次循环尾 ()
' ---------为安全考虑,在还原之前选把之前的库备份一次
处理事件 ()
库信息编辑框.加入文本 (“为保证数据安全,在恢复数据库之前要对原有数据库进行备份!” + #换行符)
库信息编辑框.加入文本 (“----------以下为备份数据库相关信息!-----------” + #换行符)
子程序_备份选定的数据库 (局部_待恢复库, 真)
库信息编辑框.加入文本 (“----------以上为备份数据库相关信息!----------” + #换行符)
' ---------初始化temp文件夹!
处理事件 ()
删除目录 (驱动器框1.驱动器 + “:\temp\”)
处理事件 ()
创建目录 (驱动器框1.驱动器 + “:\temp\”)
库信息编辑框.加入文本 (“初始化temp文件夹成功!” + #换行符)
' ---------将指定要还原的数据拷贝到temp临时目录下面,以方便sql备份语句,因这有些目录sql语句是不支持的---------另外注明一下,“复制目录”这个子程序功能代码是在坛子里一个易友写的,在此表示感谢!
复制目录 (读配置项 (取运行目录 () + “\sysset.ini”, “备份”, “备份路径”, ) + 参数_指定的还原点, 驱动器框1.驱动器 + “:\temp”)
处理事件 ()
库信息编辑框.加入文本 (“数据复制到temp文件夹!” + #换行符)
处理事件 ()
.计次循环首 (取数组成员数 (局部_待恢复库), 局部_计次)
' ---------在一个大循环里,开始逐个还原数据库!
处理事件 ()
选择库 (MySql句柄, 局部_待恢复库 [局部_计次])
库信息编辑框.加入文本 (“开始还原” + 局部_待恢复库 [局部_计次] + “库..........” + #换行符)
' ---------在temp的备份的目录下面找所有的扩展名为table的文件,也就是数据表的结构代码文件,并把它加到相应的数组中
清除数组 (局部_表名列表_结构)
局部_文件夹名 = 寻找文件 (驱动器框1.驱动器 + “:\temp\” + 局部_待恢复库 [局部_计次] + “\*.table”, )
.判断循环首 (局部_文件夹名 ≠ “”)
处理事件 ()
.如果真 (局部_文件夹名 ≠ “.” 且 局部_文件夹名 ≠ “..”)
加入成员 (局部_表名列表_结构, 局部_文件夹名)
.如果真结束
局部_文件夹名 = 寻找文件 (, )
.判断循环尾 ()
' ---------在一个小循环里,开始对表结构进行还原
.计次循环首 (取数组成员数 (局部_表名列表_结构), 局部_计次1)
处理事件 ()
' ---------先把库中原来对应的数据表删除
.如果 (删除表 (MySql句柄, “`” + 取文本左边 (局部_表名列表_结构 [局部_计次1], 取文本长度 (局部_表名列表_结构 [局部_计次1]) - 6) + “`”) = 假)
库信息编辑框.加入文本 (“删除” + 局部_表名列表_结构 [局部_计次1] + “表失败!” + #换行符)
.否则
库信息编辑框.加入文本 (“删除” + 局部_表名列表_结构 [局部_计次1] + “表成功!” + #换行符)
.如果结束
' ---------再利用刚刚读出来的创建表的代码生成新的表
局部_表名列表结构 = 到文本 (读入文件 (驱动器框1.驱动器 + “:/temp/” + 局部_待恢复库 [局部_计次] + “/” + 局部_表名列表_结构 [局部_计次1]))
.如果 (执行SQL语句 (MySql句柄, 局部_表名列表结构) = 假)
输出调试文本 (局部_表名列表结构)
库信息编辑框.加入文本 (“创建” + 局部_表名列表_结构 [局部_计次1] + “表失败!” + #换行符)
.否则
库信息编辑框.加入文本 (“创建” + 局部_表名列表_结构 [局部_计次1] + “表成功!” + #换行符)
.如果结束

.计次循环尾 ()
' ---------在temp的备份的目录下面找所有的扩展名为bak的文件,也就是数据表的内容备份文件,并把它加到相应的数组中
清除数组 (局部_表名列表)
局部_文件夹名 = 寻找文件 (驱动器框1.驱动器 + “:\temp\” + 局部_待恢复库 [局部_计次] + “\*.bak”, )
.判断循环首 (局部_文件夹名 ≠ “”)
处理事件 ()
.如果真 (局部_文件夹名 ≠ “.” 且 局部_文件夹名 ≠ “..”)
加入成员 (局部_表名列表, 局部_文件夹名)
.如果真结束
局部_文件夹名 = 寻找文件 (, )
.判断循环尾 ()
' ---------在一个小循环里,开始对表的内容进行还原
处理事件 ()
.计次循环首 (取数组成员数 (局部_表名列表), 局部_计次1)
处理事件 ()
' --------清空数据这一步可以不做了,因为前面我们把表重新生成了,出就是空的表
' ' --------要先清空原表中的数据,这个操作是比较危险的!
.' 如果 (执行SQL语句 (MySql句柄, “truncate table `” + 取文本左边 (局部_表名列表 [局部_计次1], 取文本长度 (局部_表名列表 [局部_计次1]) - 4) + “`”) = 假)
' 输出调试文本 (“truncate table `” + 取文本左边 (局部_表名列表 [局部_计次1], 取文本长度 (局部_表名列表 [局部_计次1]) - 4) + “`”)
' 信息框 (“清空数据库” + 局部_表名列表 [局部_计次1] + “失败!”, #错误图标, )
.否则
' 库信息编辑框.加入文本 ( “清空” + 局部_表名列表 [局部_计次1] + “表成功!”+ #换行符)
.如果结束
' ' --------运用还原的sql代码,把temp备份文件夹中的数据文件还原到相应的表中
.如果 (执行SQL语句 (MySql句柄, “load data infile '” + 驱动器框1.驱动器 + “:/temp/” + 局部_待恢复库 [局部_计次] + “/” + 局部_表名列表 [局部_计次1] + “' into table `” + 取文本左边 (局部_表名列表 [局部_计次1], 取文本长度 (局部_表名列表 [局部_计次1]) - 4) + “`”) = 假)
输出调试文本 (“load data infile '” + 驱动器框1.驱动器 + “:/temp/” + 局部_待恢复库 [局部_计次] + “/” + 局部_表名列表 [局部_计次1] + “' into table `” + 取文本左边 (局部_表名列表 [局部_计次1], 取文本长度 (局部_表名列表 [局部_计次1]) - 4) + “`”)
信息框 (“恢复数据库” + 局部_表名列表 [局部_计次1] + “失败!”, #错误图标, )
返回 ()
.否则
库信息编辑框.加入文本 (“恢复” + 局部_表名列表 [局部_计次1] + “表成功!” + #换行符)
.如果结束

.计次循环尾 ()
.计次循环尾 ()
库信息编辑框.加入文本 (到文本 (取现行时间 ()) + “还原数据库成功!” + #换行符)
.否则
库信息编辑框.内容 = 到文本 (取现行时间 ()) + “没有指定待还原数据库的还原点名称!不能完成还原操作!” + #换行符