186 lines
4.4 KiB
Go
186 lines
4.4 KiB
Go
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)
|
||
}
|
||
|
||
}
|
||
|
||
}
|