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