diff --git a/plugins/mysql/index.py b/plugins/mysql/index.py index 959876786..93396c8d7 100755 --- a/plugins/mysql/index.py +++ b/plugins/mysql/index.py @@ -1070,6 +1070,81 @@ def importDbExternal(): return mw.returnJson(True, 'ok') +def importDbExternalProgress(): + args = getArgs() + data = checkArgs(args, ['file', 'name']) + if not data[0]: + return data[1] + + file = args['file'] + name = args['name'] + + cmd = 'cd '+mw.getServerDir()+'/mdserver-web && source bin/activate && ' + cmd += 'python3 '+mw.getServerDir()+'/mdserver-web/plugins/mysql/index.py import_db_external_progress_bar {"file":"'+file+'","name":"'+name+'"}' + return mw.returnJson(True, 'ok',cmd) + +def importDbExternalProgressBar(): + args = getArgs() + data = checkArgs(args, ['file', 'name']) + if not data[0]: + return data[1] + + file = args['file'] + name = args['name'] + + import_dir = mw.getRootDir() + '/backup/import/' + + file_path = import_dir + file + if not os.path.exists(file_path): + return mw.returnJson(False, '文件突然消失?') + + exts = ['sql', 'gz', 'zip'] + ext = mw.getFileSuffix(file) + if ext not in exts: + return mw.returnJson(False, '导入数据库格式不对!') + + tmp = file.split('/') + tmpFile = tmp[len(tmp) - 1] + tmpFile = tmpFile.replace('.sql.' + ext, '.sql') + tmpFile = tmpFile.replace('.' + ext, '.sql') + tmpFile = tmpFile.replace('tar.', '') + + # print(tmpFile) + import_sql = "" + if file.find("sql.gz") > -1: + cmd = 'cd ' + import_dir + ' && gzip -dc ' + \ + file + " > " + import_dir + tmpFile + info = mw.execShell(cmd) + if info[1] == "": + import_sql = import_dir + tmpFile + + if file.find(".zip") > -1: + cmd = 'cd ' + import_dir + ' && unzip -o ' + file + mw.execShell(cmd) + import_sql = import_dir + tmpFile + + if file.find("tar.gz") > -1: + cmd = 'cd ' + import_dir + ' && tar -zxvf ' + file + mw.execShell(cmd) + import_sql = import_dir + tmpFile + + if file.find(".sql") > -1 and file.find(".sql.gz") == -1: + import_sql = import_dir + file + + if import_sql == "": + return mw.returnJson(False, '未找SQL文件') + + pwd = pSqliteDb('config').where('id=?', (1,)).getField('mysql_root') + sock = getSocketFile() + + my_cnf = getConf() + mysql_cmd = getServerDir() + '/bin/mysql --defaults-file=' + my_cnf + \ + ' -uroot -p"' + pwd + '" -f ' + name + mysql_cmd_progress_bar = "pv -t -p " + import_sql + '|'+ mysql_cmd + print(mysql_cmd_progress_bar) + rdata = os.system(mysql_cmd_progress_bar) + return "" + def importDbBackup(): args = getArgs() @@ -1107,6 +1182,53 @@ def importDbBackup(): return mw.returnJson(True, 'ok') +def importDbBackupProgress(): + args = getArgs() + data = checkArgs(args, ['file', 'name']) + if not data[0]: + return data[1] + + file = args['file'] + name = args['name'] + + cmd = 'cd '+mw.getServerDir()+'/mdserver-web && source bin/activate && ' + cmd += 'python3 '+mw.getServerDir()+'/mdserver-web/plugins/mysql/index.py import_db_backup_progress_bar {"file":"'+file+'","name":"'+name+'"}' + return mw.returnJson(True, 'ok',cmd) + + return mw.returnJson(True, 'ok') + +def importDbBackupProgressBar(): + args = getArgs() + data = checkArgs(args, ['file', 'name']) + if not data[0]: + return data[1] + + file = args['file'] + name = args['name'] + + file_path = mw.getRootDir() + '/backup/database/' + file + file_path_sql = mw.getRootDir() + '/backup/database/' + file.replace('.gz', '') + + if not os.path.exists(file_path_sql): + cmd = 'cd ' + mw.getRootDir() + '/backup/database && gzip -d ' + file + mw.execShell(cmd) + + local_mode = recognizeDbMode() + if local_mode == 'gtid': + pdb = pMysqlDb() + pdb.execute('reset master') + + pwd = pSqliteDb('config').where('id=?', (1,)).getField('mysql_root') + sock = getSocketFile() + + mysql_cmd = getServerDir() + '/bin/mysql -S ' + sock + ' -uroot -p"' + pwd + \ + '" ' + name + mysql_cmd_progress_bar = "pv -t -p " + file_path_sql + '|'+ mysql_cmd + print(mysql_cmd_progress_bar) + rdata = os.system(mysql_cmd_progress_bar) + return '' + + def deleteDbBackup(): args = getArgs() data = checkArgs(args, ['filename', 'path']) @@ -3258,8 +3380,16 @@ if __name__ == "__main__": print(setDbBackup()) elif func == 'import_db_backup': print(importDbBackup()) + elif func == 'import_db_backup_progress': + print(importDbBackupProgress()) + elif func == 'import_db_backup_progress_bar': + print(importDbBackupProgressBar()) elif func == 'import_db_external': print(importDbExternal()) + elif func == 'import_db_external_progress': + print(importDbExternalProgress()) + elif func == 'import_db_external_progress_bar': + print(importDbExternalProgressBar()) elif func == 'delete_db_backup': print(deleteDbBackup()) elif func == 'get_db_backup_list': diff --git a/plugins/mysql/js/mysql.js b/plugins/mysql/js/mysql.js index 6402d440d..1ccb51c8a 100755 --- a/plugins/mysql/js/mysql.js +++ b/plugins/mysql/js/mysql.js @@ -929,6 +929,31 @@ function importBackup(file,name){ }); } +function importBackupProgress(file,name){ + myPost('import_db_backup_progress',{file:file,name:name}, function(data){ + var rdata = $.parseJSON(data.data); + layer.open({ + title: "手动导入命令CMD【显示进度】", + area: ['600px', '180px'], + type:1, + closeBtn: 1, + shadeClose: false, + btn:["复制","取消"], + content: '
'+rdata.data+'\ +
'+rdata.data+'\ +