Инициализация проекта

Стабильный рабочий проект.
This commit is contained in:
Falknat
2025-10-02 06:02:45 +07:00
commit 7a87617282
47 changed files with 6057 additions and 0 deletions

185
Backend/WebServer/MySQL.go Normal file
View File

@@ -0,0 +1,185 @@
package webserver
import (
"fmt"
"os/exec"
"path/filepath"
"strconv"
"time"
config "vServer/Backend/config"
tools "vServer/Backend/tools"
)
var mysqlProcess *exec.Cmd
var mysql_status bool = false
var mysql_secure bool = false
var mysqldPath string
var configPath string
var dataDirAbs string
var binDirAbs string
var binPathAbs string
var mysql_port int
var mysql_ip string
var console_mysql bool = false
func AbsPathMySQL() {
var err error
mysqldPath, err = tools.AbsPath(filepath.Join("WebServer/soft/MySQL/bin", "mysqld.exe"))
tools.CheckError(err)
configPath, err = tools.AbsPath("WebServer/soft/MySQL/my.ini")
tools.CheckError(err)
dataDirAbs, err = tools.AbsPath("WebServer/soft/MySQL/bin/data")
tools.CheckError(err)
binDirAbs, err = tools.AbsPath("WebServer/soft/MySQL/bin")
tools.CheckError(err)
binPathAbs, err = tools.AbsPath("WebServer/soft/MySQL/bin")
tools.CheckError(err)
}
// config_patch возвращает путь к mysqld, аргументы и бинарную директорию
func config_patch(secures bool) (string, []string, string) {
// Получаем абсолютные пути
AbsPathMySQL()
// Объявляем args на уровне функции
var args []string
if secures {
args = []string{
"--defaults-file=" + configPath,
"--datadir=" + dataDirAbs,
"--shared-memory",
"--skip-grant-tables",
"--console",
}
} else {
args = []string{
"--defaults-file=" + configPath,
"--port=" + fmt.Sprintf("%d", mysql_port),
"--bind-address=" + mysql_ip,
"--datadir=" + dataDirAbs,
"--console",
}
}
return mysqldPath, args, binDirAbs
}
// StartMySQLServer запускает MySQL сервер
func StartMySQLServer(secure bool) {
mysql_port = config.ConfigData.Soft_Settings.Mysql_port
mysql_ip = config.ConfigData.Soft_Settings.Mysql_host
if tools.Port_check("MySQL", mysql_ip, strconv.Itoa(mysql_port)) {
return
}
if mysql_status {
tools.Logs_file(1, "MySQL", "Сервер MySQL уже запущен", "logs_mysql.log", true)
return
}
if false {
return
}
// Настройка режима
mysql_secure = secure
mysqldPath, args, binDirAbs := config_patch(secure)
// Выбор сообщения
if secure {
tools.Logs_file(0, "MySQL", "Запуск сервера MySQL в режиме безопасности", "logs_mysql.log", true)
} else {
tools.Logs_file(0, "MySQL", "Запуск сервера MySQL в обычном режиме", "logs_mysql.log", true)
}
// Общая логика запуска
mysqlProcess = exec.Command(mysqldPath, args...)
mysqlProcess.Dir = binDirAbs
tools.Logs_console(mysqlProcess, console_mysql)
tools.Logs_file(0, "MySQL", fmt.Sprintf("Сервер MySQL запущен на %s:%d", mysql_ip, mysql_port), "logs_mysql.log", true)
mysql_status = true
}
// StopMySQLServer останавливает MySQL сервер
func StopMySQLServer() {
if mysql_status {
cmd := exec.Command("taskkill", "/F", "/IM", "mysqld.exe")
err := cmd.Run()
tools.CheckError(err)
tools.Logs_file(0, "MySQL", "Сервер MySQL остановлен", "logs_mysql.log", true)
mysql_status = false
} else {
tools.Logs_file(1, "MySQL", "Сервер MySQL уже остановлен", "logs_mysql.log", true)
}
}
func ResetPasswordMySQL() {
NewPasswordMySQL := "root"
StopMySQLServer()
time.Sleep(2 * time.Second)
mysql_secure = true
StartMySQLServer(true)
time.Sleep(2 * time.Second)
query := "FLUSH PRIVILEGES; ALTER USER 'root'@'%' IDENTIFIED BY '" + NewPasswordMySQL + "';"
СheckMySQLPassword(query)
tools.Logs_file(0, "MySQL", "Новый пароль: "+NewPasswordMySQL, "logs_mysql.log", true)
println()
StopMySQLServer()
StartMySQLServer(false)
}
// СheckMySQLPassword проверяет пароль для MySQL
func СheckMySQLPassword(query string) {
AbsPathMySQL()
if mysql_secure {
// В безопасном режиме подключаемся без пароля
cmd := exec.Command(filepath.Join(binPathAbs, "mysql.exe"), "-u", "root", "-pRoot", "-e", query)
cmd.Dir = binPathAbs
// Захватываем вывод для логирования
err := tools.Logs_console(cmd, false)
if err != nil {
tools.Logs_file(1, "MySQL", "Вывод MySQL (stdout/stderr):", "logs_mysql.log", true)
} else {
tools.Logs_file(0, "MySQL", "Команда выполнена успешно", "logs_mysql.log", true)
}
}
}