database-win-pkg/src/install/InstallMariaDB.py

82 lines
3.2 KiB
Python
Raw Normal View History

2025-06-19 15:28:33 +08:00
from Common import *
2025-08-11 12:00:25 +08:00
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")
2025-06-19 15:28:33 +08:00
class InstallMariaDb:
2025-08-11 12:00:25 +08:00
def __init__(self):
2025-06-19 15:28:33 +08:00
self.service_name = 'ComacMariaDB'
2025-08-11 12:00:25 +08:00
self.mariadb_data_path = os.path.join(current_dir, 'mariadb', 'data')
self.init_sql = os.path.join(current_dir, 'mariadb', 'data', 'init.sql')
2025-06-19 15:28:33 +08:00
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("数据库初始化")
2025-07-30 15:30:12 +08:00
self.__init_db_user()
2025-06-19 17:30:44 +08:00
logger.info("安装完成10秒自动退出")
2025-06-19 15:28:33 +08:00
time.sleep(10)
pass
def __start_mariadb(self):
2025-07-30 15:30:12 +08:00
args1 = 'net'
args2 = 'start'
res = subprocess.run([args1, args2, self.service_name], text=True, capture_output=True)
2025-08-11 11:50:47 +08:00
if res.returncode != 0:
logger.info(res.stdout)
logger.info("服务启动失败")
logger.error(res.stderr)
else:
logger.info("服务启动成功")
2025-06-19 15:28:33 +08:00
def __register_service(self):
2025-08-11 12:00:25 +08:00
args1 = current_dir + '/mariadb/bin/mysql_install_db.exe'
2025-06-19 15:28:33 +08:00
args2 = '--datadir=' + self.mariadb_data_path
args3 = '--service=' + self.service_name
2025-08-11 12:00:25 +08:00
args4 = '--password=' + mariadb_passowrd
args5 = '--port=' + str(mariadb_port)
2025-06-19 15:28:33 +08:00
res = subprocess.run([args1, args2, args3, args4, args5], text=True, capture_output=True)
2025-08-11 11:50:47 +08:00
if res.returncode != 0:
logger.info(res.stdout)
logger.info("服务注册失败")
logger.error(res.stderr)
else:
logger.info("服务注册成功")
2025-06-19 15:28:33 +08:00
def __init_db_user(self):
2025-08-11 12:00:25 +08:00
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};"'
2025-07-30 15:30:12 +08:00
logger.info(command2)
2025-06-19 15:28:33 +08:00
with os.popen(command1) as stream:
res = stream.read()
logger.info(res)
2025-08-11 12:00:25 +08:00
schema_dir = fr'{current_dir}\mariadb\data\{mariadb_init_schema}'
2025-07-30 15:30:12 +08:00
if not os.path.exists(schema_dir):
logger.error("数据库初始化失败")
raise MyCustomError("数据库安装失败")
2025-08-11 11:50:47 +08:00
logger.info("数据库初始化成功")
2025-06-19 15:28:33 +08:00
if __name__ == '__main__':
2025-07-30 15:30:12 +08:00
ensure_dir(log_dir)
logger.add(
sink=os.path.join(log_dir, "InstallMariaDB_{time}.log"), # 文件路径模板
rotation="10 MB", # 文件大小达到10MB时轮转
2025-07-30 16:46:29 +08:00
retention="1 days", # 保留最近1天的日志
2025-07-30 15:30:12 +08:00
compression="zip", # 压缩旧日志节省空间
enqueue=True, # 线程安全写入
format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}" # 自定义格式
)
2025-08-11 12:00:25 +08:00
InstallMariaDb().start_install_mariadb()
2025-06-19 15:28:33 +08:00
pass