Фикс
This commit is contained in:
187
install.sh
187
install.sh
@@ -907,6 +907,8 @@ EOF
|
||||
chmod 600 "$WEBROOT/db_config.php" 2>/dev/null || true
|
||||
log_success "Права доступа настроены"
|
||||
|
||||
log_info "Текущий пользователь: $CURRENT_USER"
|
||||
|
||||
log_step "Настройка базы данных MariaDB..."
|
||||
|
||||
# Проверка и запуск MariaDB
|
||||
@@ -923,35 +925,182 @@ EOF
|
||||
CURRENT_USER=$(logname 2>/dev/null || whoami)
|
||||
log_info "Текущий пользователь: $CURRENT_USER"
|
||||
|
||||
# Функция для выполнения SQL с подробным логированием
|
||||
execute_sql() {
|
||||
local user="$1"
|
||||
local password="$2"
|
||||
local sql_script="$3"
|
||||
local connection_params=""
|
||||
# Функция для безопасного выполнения SQL с детальными ошибками
|
||||
execute_sql_safe() {
|
||||
local connection_cmd="$1"
|
||||
local description="$2"
|
||||
local sql_commands="$3"
|
||||
|
||||
if [[ -n "$password" ]]; then
|
||||
connection_params="-u $user -p$password"
|
||||
else
|
||||
connection_params="-u $user"
|
||||
fi
|
||||
log_info "$description"
|
||||
|
||||
log_info "Попытка выполнения SQL как пользователь: $user"
|
||||
|
||||
# Создаем временный файл для вывода ошибок
|
||||
local temp_file="/tmp/mysql_commands_$$.sql"
|
||||
local error_file="/tmp/mysql_error_$$.log"
|
||||
|
||||
if echo "$sql_script" | mysql $connection_params 2>"$error_file"; then
|
||||
rm -f "$error_file"
|
||||
echo "$sql_commands" > "$temp_file"
|
||||
|
||||
if eval "$connection_cmd < '$temp_file'" 2>"$error_file"; then
|
||||
rm -f "$temp_file" "$error_file"
|
||||
log_success "Выполнено: $description"
|
||||
return 0
|
||||
else
|
||||
log_error "Ошибка выполнения SQL:"
|
||||
cat "$error_file" >&2
|
||||
rm -f "$error_file"
|
||||
log_error "Ошибка: $description"
|
||||
if [[ -s "$error_file" ]]; then
|
||||
cat "$error_file" | head -10 >&2
|
||||
fi
|
||||
rm -f "$temp_file" "$error_file"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Функция создания базы данных (минимальный набор команд)
|
||||
create_database_only() {
|
||||
local connection_cmd="$1"
|
||||
local sql="CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
||||
|
||||
if execute_sql_safe "$connection_cmd" "Создание базы данных ALTCor" "$sql"; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Функция для современной установки пароля MariaDB
|
||||
set_password_modern() {
|
||||
local connection_cmd="$1"
|
||||
local password="$2"
|
||||
|
||||
# Используем только современные команды MariaDB
|
||||
local sql="
|
||||
-- Установка пароля современным способом
|
||||
ALTER USER 'root'@'localhost' IDENTIFIED BY '$password';
|
||||
FLUSH PRIVILEGES;"
|
||||
|
||||
if execute_sql_safe "$connection_cmd" "Установка пароля root (современный способ)" "$sql"; then
|
||||
return 0
|
||||
else
|
||||
# Если не получилось, попробуем SET PASSWORD
|
||||
local sql_alt="
|
||||
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('$password');
|
||||
FLUSH PRIVILEGES;"
|
||||
|
||||
if execute_sql_safe "$connection_cmd" "Установка пароля root (альтернативный способ)" "$sql_alt"; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Основная логика - пробуем разные способы подключения
|
||||
DB_CONFIGURED=false
|
||||
|
||||
log_info "Попытка подключения к MariaDB..."
|
||||
|
||||
# 1. Попробуем подключиться как root без пароля
|
||||
if mysql -u root -e "SELECT 1;" >/dev/null 2>&1; then
|
||||
log_success "Подключение как root без пароля успешно"
|
||||
|
||||
# Сначала создаем базу данных
|
||||
if create_database_only "mysql -u root"; then
|
||||
log_success "База данных создана"
|
||||
|
||||
# Пытаемся установить пароль (не критично, если не получится)
|
||||
if set_password_modern "mysql -u root" "$DB_PASSWORD"; then
|
||||
log_success "Пароль root установлен"
|
||||
DB_CONFIGURED=true
|
||||
else
|
||||
log_info "Пароль не установлен, но база данных создана"
|
||||
DB_CONFIGURED=true
|
||||
fi
|
||||
fi
|
||||
|
||||
# 2. Попробуем подключиться как root с паролем
|
||||
elif mysql -u root -p"$DB_PASSWORD" -e "SELECT 1;" >/dev/null 2>&1; then
|
||||
log_success "Подключение как root с паролем успешно"
|
||||
|
||||
if create_database_only "mysql -u root -p$DB_PASSWORD"; then
|
||||
log_success "База данных проверена/создана"
|
||||
DB_CONFIGURED=true
|
||||
fi
|
||||
|
||||
# 3. Попробуем подключиться как текущий пользователь
|
||||
elif mysql -u "$CURRENT_USER" -e "SELECT 1;" >/dev/null 2>&1; then
|
||||
log_success "Подключение как $CURRENT_USER без пароля успешно"
|
||||
|
||||
if create_database_only "mysql -u $CURRENT_USER"; then
|
||||
log_success "База данных создана пользователем $CURRENT_USER"
|
||||
DB_CONFIGURED=true
|
||||
fi
|
||||
|
||||
# 4. Попробуем через sudo
|
||||
elif sudo mysql -e "SELECT 1;" >/dev/null 2>&1; then
|
||||
log_success "Подключение через sudo успешно"
|
||||
|
||||
if create_database_only "sudo mysql"; then
|
||||
log_success "База данных создана через sudo"
|
||||
|
||||
# Попробуем установить пароль через sudo
|
||||
local sql="ALTER USER 'root'@'localhost' IDENTIFIED BY '$DB_PASSWORD'; FLUSH PRIVILEGES;"
|
||||
if echo "$sql" | sudo mysql >/dev/null 2>&1; then
|
||||
log_success "Пароль root установлен через sudo"
|
||||
else
|
||||
log_info "Пароль не удалось установить, но база создана"
|
||||
fi
|
||||
DB_CONFIGURED=true
|
||||
fi
|
||||
|
||||
# 5. Последняя попытка - возможно MariaDB запущен в безопасном режиме
|
||||
elif systemctl stop mariadb && mysqld_safe --skip-grant-tables --skip-networking &
|
||||
then
|
||||
sleep 5
|
||||
MYSQL_PID=$!
|
||||
|
||||
if mysql -u root -e "SELECT 1;" >/dev/null 2>&1; then
|
||||
log_info "Подключение в безопасном режиме успешно"
|
||||
|
||||
if create_database_only "mysql -u root"; then
|
||||
log_success "База данных создана в безопасном режиме"
|
||||
DB_CONFIGURED=true
|
||||
fi
|
||||
fi
|
||||
|
||||
# Завершаем безопасный режим
|
||||
kill $MYSQL_PID 2>/dev/null || true
|
||||
sleep 2
|
||||
systemctl start mariadb
|
||||
fi
|
||||
|
||||
# Проверяем результат
|
||||
if [[ "$DB_CONFIGURED" == "true" ]]; then
|
||||
log_success "База данных настроена успешно"
|
||||
|
||||
# Финальная проверка - можем ли мы подключиться к созданной базе
|
||||
if mysql -u root -e "USE ALTCor; SELECT 'OK' as status;" >/dev/null 2>&1; then
|
||||
log_success "Подключение к базе ALTCor как root работает"
|
||||
elif mysql -u root -p"$DB_PASSWORD" -e "USE ALTCor; SELECT 'OK' as status;" >/dev/null 2>&1; then
|
||||
log_success "Подключение к базе ALTCor как root с паролем работает"
|
||||
elif mysql -u "$CURRENT_USER" -e "USE ALTCor; SELECT 'OK' as status;" >/dev/null 2>&1; then
|
||||
log_success "Подключение к базе ALTCor как $CURRENT_USER работает"
|
||||
else
|
||||
log_info "База создана, но требуется проверка подключения"
|
||||
fi
|
||||
else
|
||||
log_error "Не удалось настроить базу данных автоматически"
|
||||
log_info ""
|
||||
log_info "Попробуйте выполнить настройку вручную:"
|
||||
log_info "1. Проверьте статус MariaDB: sudo systemctl status mariadb"
|
||||
log_info "2. Запустите мастер настройки: sudo mysql_secure_installation"
|
||||
log_info "3. Создайте базу данных вручную:"
|
||||
log_info " sudo mysql -e \"CREATE DATABASE ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\""
|
||||
log_info "4. Или создайте отдельного пользователя:"
|
||||
log_info " sudo mysql -e \"CREATE USER 'altcor'@'localhost' IDENTIFIED BY 'password';\""
|
||||
log_info " sudo mysql -e \"CREATE DATABASE ALTCor; GRANT ALL ON ALTCor.* TO 'altcor'@'localhost';\""
|
||||
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "Настройка базы данных завершена"
|
||||
|
||||
# Функция для проверки подключения
|
||||
test_connection() {
|
||||
local user="$1"
|
||||
|
||||
Reference in New Issue
Block a user