from Common import * current_dir = os.path.dirname(sys.executable) if getattr(sys, 'frozen', False) else os.path.dirname( os.path.abspath(__file__)) log_dir = os.path.join(current_dir, "logs") class InstallMariaDb: def __init__(self): self.service_name = 'ComacMariaDB' self.mariadb_data_path = os.path.join(current_dir, 'mariadb', 'data') self.init_sql = os.path.join(current_dir, 'mariadb', 'data', 'init.sql') pass def start_install_mariadb(self): existStatus = check_service_exist(self.service_name) if existStatus: start_service_if_not_running(self.service_name) return logger.info("开始安装") self.__register_service() logger.info("启动数据库") self.__start_mariadb() logger.info("数据库初始化") self.__init_db_user() logger.info("安装完成,10秒自动退出") time.sleep(10) pass def __start_mariadb(self): args1 = 'net' args2 = 'start' res = subprocess.run([args1, args2, self.service_name], text=True, capture_output=True) if res.returncode != 0: logger.info(res.stdout) logger.info("服务启动失败") logger.error(res.stderr) else: logger.info("服务启动成功") def __register_service(self): args1 = current_dir + '/mariadb/bin/mysql_install_db.exe' args2 = '--datadir=' + self.mariadb_data_path args3 = '--service=' + self.service_name args4 = '--password=' + mariadb_passowrd args5 = '--port=' + str(mariadb_port) res = subprocess.run([args1, args2, args3, args4, args5], text=True, capture_output=True) if res.returncode != 0: logger.info(res.stdout) logger.info("服务注册失败") logger.error(res.stderr) else: logger.info("服务注册成功") def __init_db_user(self): command1 = fr'{current_dir}\mariadb\bin\mysql.exe -u root -p{mariadb_passowrd} -P {mariadb_port} -e "create database if not exists {mariadb_init_schema}; use {mariadb_init_schema};"' command2 = fr'{current_dir}\mariadb\bin\mysql.exe -u ****** -p****** -P { mariadb_port} -e "create database if not exists {mariadb_init_schema}; use {mariadb_init_schema};"' logger.info(command2) with os.popen(command1) as stream: res = stream.read() logger.info(res) schema_dir = fr'{current_dir}\mariadb\data\{mariadb_init_schema}' if not os.path.exists(schema_dir): logger.error("数据库初始化失败") raise MyCustomError("数据库安装失败") logger.info("数据库初始化成功") if __name__ == '__main__': ensure_dir(log_dir) logger.add( sink=os.path.join(log_dir, "InstallMariaDB_{time}.log"), # 文件路径模板 rotation="10 MB", # 文件大小达到10MB时轮转 retention="1 days", # 保留最近1天的日志 compression="zip", # 压缩旧日志节省空间 enqueue=True, # 线程安全写入 format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}" # 自定义格式 ) InstallMariaDb().start_install_mariadb() pass