MYSQL + Opening ports installation
Choose your system:
Variants:
Install/Uninstall script (Clean /
Warning: Undefined array key "
Deprecated: htmlspecialchars(): Passing null to parameter " in /var/www/scripts/PHP_HTML/maininstall.php on line 49
Warning: Trying to access array offset on null in /var/www/scripts/PHP_HTML/maininstall.php on line 49
Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /var/www/scripts/PHP_HTML/maininstall.php on line 49
)
#!/bin/bash
set -e
# ========== COLORS ==========
NC='\033[0m'
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
BLUE='\033[38;5;117m'
BOLD='\033[1m'
# ========== SPINNER FUNCTIONS ==========
spinner_pid=""
start_spinner() {
local msg="$1"
echo -ne "${BLUE}[INFO]${NC} $msg... "
trap stop_spinner INT
(
local spin='-\|/'
while true; do
for i in $(seq 0 $(( ${#spin} - 1 )) ); do
echo -ne "\b${spin:$i:1}"
sleep 0.1
done
done
) & spinner_pid=$!
disown
}
stop_spinner() {
if [[ -n "$spinner_pid" ]]; then
kill "$spinner_pid" &>/dev/null || true
wait "$spinner_pid" 2>/dev/null || true
spinner_pid=""
fi
echo -e "\b${GREEN}[OK] ✓${NC}"
trap - INT
}
run_step() {
start_spinner "$1"
shift
"$@" &>/dev/null
stop_spinner
}
run_multistep() {
start_spinner "$1"
shift
{
"$@"
} &>/dev/null
stop_spinner
}
# ========== PRINT BOX FUNCTION ==========
print_in_box() {
local title="$1"
shift
local lines=("$@")
local max_len=${#title}
for line in "${lines[@]}"; do
(( ${#line} > max_len )) && max_len=${#line}
done
local border_top="┌$(printf '─%.0s' $(seq 1 $((max_len + 2))))┐"
local border_bottom="└$(printf '─%.0s' $(seq 1 $((max_len + 2))))┘"
echo -e "${BLUE}${border_top}${NC}"
local padding_left=$(( (max_len - ${#title}) / 2 ))
local padding_right=$(( max_len - padding_left - ${#title} ))
printf "${BLUE}│%*s%s%*s│${NC}\n" $((padding_left + 1)) "" "$title" $((padding_right + 1)) ""
printf "${BLUE}│%*s│${NC}\n" $((max_len + 2)) ""
for line in "${lines[@]}"; do
local padding=$((max_len - ${#line}))
printf "${BLUE}│ %s%*s │${NC}\n" "$line" $padding ""
done
echo -e "${BLUE}${border_bottom}${NC}"
}
# ========== PRINT mysql_secure_installation INFO ==========
print_mysql_secure_installation_intro() {
print_in_box "MySQL Secure Installation" \
"This wizard will help you:" \
" - Set the MySQL root password" \
" - Remove anonymous users" \
" - Disallow remote root login" \
" - Remove the test database" \
" - Reload privilege tables"
echo -e "\n${YELLOW}[INFO]${NC} Launching the original MySQL secure installation wizard..."
sleep 1
sudo mysql_secure_installation
}
# ========== DETECT DISTRIBUTION ==========
DISTRO=""
if [[ -f /etc/os-release ]]; then
. /etc/os-release
DISTRO=$(echo "$ID" | tr '[:upper:]' '[:lower:]')
fi
[[ "$DISTRO" == "rhel" ]] && DISTRO="centos"
echo -e "${BLUE}[INFO] Detected distribution: ${BOLD}${DISTRO}${NC}"
# ========== PACKAGE MANAGER COMMANDS ==========
case "$DISTRO" in
debian|ubuntu)
PKG_UPDATE="sudo apt update -y && sudo apt upgrade -y"
PKG_INSTALL="sudo apt install -y"
PKG_REMOVE="sudo apt remove --purge -y"
PKG_CLEAN="sudo apt autoremove -y && sudo apt clean"
MYSQL_PACKAGE="mysql-server"
MYSQL_SERVICE="mysql"
;;
almalinux|rocky|centos)
PKG_UPDATE="sudo dnf update -y"
PKG_INSTALL="sudo dnf install -y"
PKG_REMOVE="sudo dnf remove -y"
PKG_CLEAN="sudo dnf autoremove -y && sudo dnf clean all"
MYSQL_PACKAGE="mysql-server"
MYSQL_SERVICE="mysqld"
;;
*)
echo -e "${RED}[ERROR] Unsupported distribution: $DISTRO${NC}"
exit 1
;;
esac
# ========== DETECT EXISTING DATABASE SERVER ==========
if command -v mysql >/dev/null 2>&1; then
mysql_version=$(mysql --version)
echo -e "${YELLOW}[WARNING]${NC} A MySQL/MariaDB installation has been detected:"
echo -e " ${mysql_version}"
echo -ne "${YELLOW}[INFO]${NC} Do you want to continue anyway? [y/n]: "
read -r CONTINUE_ANYWAY
if [[ ! "$CONTINUE_ANYWAY" =~ ^[Yy]$ ]]; then
echo -e "${RED}[ABORTED]${NC} Operation cancelled by user."
exit 0
fi
fi
# ========== USER ACTION ==========
echo -e "\n${BOLD}${YELLOW}=== MySQL Installer / Uninstaller ===${NC}\n"
echo "1) Install"
echo "2) Uninstall"
read -rp "Choose an option [1-2]: " ACTION
# ========== INSTALL ==========
if [[ "$ACTION" == "1" ]]; then
echo -e "\n${BOLD}${YELLOW}=== Installation ===${NC}\n"
if [[ "$DISTRO" == "almalinux" || "$DISTRO" == "rocky" || "$DISTRO" == "centos" ]]; then
if ! sudo dnf repolist | grep -q "mysql.*community"; then
echo "[INFO] Adding MySQL Community repository..."
sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm &>/dev/null
fi
fi
run_multistep "Updating system" bash -c "$PKG_UPDATE"
run_multistep "Installing MySQL Server" bash -c "$PKG_INSTALL $MYSQL_PACKAGE"
run_step "Enabling MySQL service" sudo systemctl enable "$MYSQL_SERVICE"
run_step "Starting MySQL service" sudo systemctl start "$MYSQL_SERVICE"
mysql_version=$(mysql --version 2>/dev/null || echo "MySQL not found")
echo -e "${GREEN}[INFO]${NC} Installed MySQL version: ${BOLD}$mysql_version${NC}"
read -p "$(echo -e "${YELLOW}[INFO]${NC} Run mysql_secure_installation? [y/n]: ")" run_secure
if [[ "$run_secure" =~ ^[Yy]$ ]]; then
print_mysql_secure_installation_intro
fi
read -p "$(echo -e "${YELLOW}[INFO]${NC} Create a new user and database? [y/n]: ")" create_user
if [[ "$create_user" =~ ^[Yy]$ ]]; then
read -rp "MySQL root password (for login): " MYSQL_ROOT_PWD
read -rp "New MySQL username: " MYSQL_USER
read -rp "New user password: " MYSQL_USER_PWD
read -rp "Database name: " MYSQL_DB
sudo mysql -uroot -p"$MYSQL_ROOT_PWD" <<EOF
CREATE DATABASE IF NOT EXISTS $MYSQL_DB;
CREATE USER IF NOT EXISTS '$MYSQL_USER'@'localhost' IDENTIFIED BY '$MYSQL_USER_PWD';
GRANT ALL PRIVILEGES ON $MYSQL_DB.* TO '$MYSQL_USER'@'localhost';
FLUSH PRIVILEGES;
EOF
echo -e "${GREEN}[INFO]${NC} User and database created."
fi
mapfile -t mysql_status < <(sudo systemctl status "$MYSQL_SERVICE" | head -n 10)
print_in_box "MySQL Service Status" "${mysql_status[@]}"
echo -e "\n${GREEN}[DONE] ✅${NC} Installation complete."
# ========== UNINSTALL ==========
elif [[ "$ACTION" == "2" ]]; then
echo -e "\n${BOLD}${YELLOW}=== Uninstallation ===${NC}\n"
run_step "Stopping MySQL" sudo systemctl stop "$MYSQL_SERVICE" || true
run_step "Disabling MySQL" sudo systemctl disable "$MYSQL_SERVICE" || true
run_multistep "Removing MySQL server" bash -c "$PKG_REMOVE $MYSQL_PACKAGE"
# Usunięcie repozytorium MySQL Community
if rpm -q mysql80-community-release &>/dev/null; then
echo "[INFO] Removing MySQL Community repository..."
sudo dnf remove -y mysql80-community-release &>/dev/null
fi
read -rp "$(echo -e "${YELLOW}[INFO]${NC} Remove /var/lib/mysql (all data)? [y/n]: ")" remove_data
if [[ "$remove_data" =~ ^[Yy]$ ]]; then
run_step "Deleting MySQL data directory" sudo rm -rf /var/lib/mysql
fi
run_multistep "Cleaning up unused packages" bash -c "$PKG_CLEAN"
echo -e "\n${GREEN}[DONE] ✅${NC} Uninstallation complete."
# ========== INVALID ==========
else
echo -e "${RED}[ERROR] Invalid option selected.${NC}"
exit 1
fi
Use the following command to auto-download and run:
Warning: Undefined array key "
Deprecated: htmlspecialchars(): Passing null to parameter " in /var/www/scripts/PHP_HTML/autoscripts.php on line 87
Warning: Trying to access array offset on null in /var/www/scripts/PHP_HTML/autoscripts.php on line 87
curl -fsSL -o script.sh "https://krotek.serveblog.net/how-to-install/DATABASE/MYSQL/scripts.php?variant=clean&type=script&system=%3Cbr+%2F%3E%3Cb%3EDeprecated%3C%2Fb%3E%3A++htmlspecialchars%28%29%3A+Passing+null+to+parameter+" && chmod +x script.sh && sudo ./script.sh