Repository navigation
Expand file tree
/
Copy pathmysql
More file actions
92 lines (81 loc) · 3.5 KB
/
Copy pathmysql
File metadata and controls
92 lines (81 loc) · 3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/env bash
# --------------------------------------------------------
# setup-mysql-interactivo.sh
# Instalación robusta de MySQL
# --------------------------------------------------------
set -euo pipefail
# Cargar librería UI
source "$(dirname "$0")/lib.sh"
ui_init "Configuración de MySQL"
# 1) Verificaciones iniciales
if [[ $EUID -ne 0 ]]; then
ui_error "Este script requiere privilegios de root (sudo)."
exit 1
fi
if [[ ! -f /etc/debian_version ]]; then
ui_error "Este script solo está soportado en sistemas Debian/Ubuntu."
exit 1
fi
# 2) Recoger datos
DB_NAME=$(ui_input "Nombre de la base de datos")
DB_USER=$(ui_input "Nombre del nuevo usuario MySQL")
DB_PASS=$(ui_secret "Contraseña para el usuario")
TABLE_NAME=$(ui_input "Nombre de una tabla inicial (deja vacío para omitir)")
ROOT_PASS=$(ui_secret "Contraseña de root MySQL (presiona Enter si no requieres o ya existe)")
# 3) Instalar MySQL/MariaDB
export DEBIAN_FRONTEND=noninteractive
if ! command -v mysql >/dev/null 2>&1; then
ui_step "Instalando servidor de base de datos..."
# Intentar instalar MariaDB (estándar en Debian) o MySQL
if apt-get install -y -qq mariadb-server >/dev/null 2>&1; then
ui_success "MariaDB instalado correctamente."
elif apt-get install -y -qq mysql-server >/dev/null 2>&1; then
ui_success "MySQL instalado correctamente."
else
ui_error "No se pudo instalar ni MariaDB ni MySQL. Verifica tus repositorios."
exit 1
fi
else
ui_success "Servidor de base de datos ya instalado."
fi
# 4) Configurar Root
if [[ -n "$ROOT_PASS" ]]; then
ui_step "Configurando seguridad de root..."
mysql --user=root --execute "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '${ROOT_PASS}'; FLUSH PRIVILEGES;" \
|| ui_error "No se pudo cambiar la contraseña de root (quizás ya está establecida)."
fi
# 5) Crear BD y usuario
ui_step "Creando base de datos '${DB_NAME}' y usuario '${DB_USER}'..."
mysql --user=root --password="${ROOT_PASS:-}" <<SQL
CREATE DATABASE IF NOT EXISTS \`${DB_NAME}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS '${DB_USER}'@'%' IDENTIFIED BY '${DB_PASS}';
GRANT ALL PRIVILEGES ON \`${DB_NAME}\`.* TO '${DB_USER}'@'%';
FLUSH PRIVILEGES;
SQL
ui_success "Base de datos y usuario creados."
# 6) Crear tabla opcional
if [[ -n "$TABLE_NAME" ]]; then
ui_step "Creando tabla '${TABLE_NAME}'..."
mysql --user=root --password="${ROOT_PASS:-}" "${DB_NAME}" <<SQL
CREATE TABLE IF NOT EXISTS \`${TABLE_NAME}\` (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
SQL
ui_success "Tabla '${TABLE_NAME}' creada."
fi
# 7) Permitir acceso remoto
ui_step "Configurando acceso remoto (bind-address 0.0.0.0)..."
sed -i "s/^bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/mysql.conf.d/mysqld.cnf || true
systemctl restart mysql
ui_success "Acceso remoto configurado y servicio reiniciado."
# 8) Resumen final
echo -e "\n${COLOR_SUCCESS}========================================="
echo -e "🎉 Configuración completada exitosamente."
echo -e "=========================================${COLOR_RESET}"
echo -e " Base de datos : ${DB_NAME}"
echo -e " Usuario : ${DB_USER}"
echo -e " Password : ${DB_PASS}"
[[ -n "$TABLE_NAME" ]] && echo -e " Tabla inicial : ${TABLE_NAME}"
echo -e "\n Host (ext) : <IP-servidor> Puerto: 3306"
echo -e "=========================================\n"