Skip to content

Instantly share code, notes, and snippets.

@ybucci
Last active September 16, 2023 00:38
Show Gist options
  • Save ybucci/7bd94be9381766408149ac17d98d378d to your computer and use it in GitHub Desktop.
Save ybucci/7bd94be9381766408149ac17d98d378d to your computer and use it in GitHub Desktop.
#!/bin/bash
clear
# Função para solicitar e verificar a confirmação da senha
confirm_password() {
local prompt="Digite novamente a senha: "
read -s -p "$prompt" confirmed_password
echo
while [ "$confirmed_password" != "$1" ]; do
echo "As senhas não correspondem. Tente novamente."
read -s -p "$prompt" confirmed_password
echo
done
}
# Função para instalar o MySQL
install_mysql() {
clear
# Configurar sources.list
echo -n > /etc/apt/sources.list
echo 'deb http://archive.debian.org/debian/ stretch main contrib non-free' | sudo tee -a /etc/apt/sources.list > /dev/null
echo 'deb http://archive.debian.org/debian/ stretch-proposed-updates main contrib non-free' | sudo tee -a /etc/apt/sources.list > /dev/null
echo 'deb http://archive.debian.org/debian-security stretch/updates main contrib non-free' | sudo tee -a /etc/apt/sources.list > /dev/null
# Atualizar pacotes
apt update
# Adicionar as linhas no mysql.list
echo -e 'deb [ allow-insecure=yes ] http://repo.mysql.com/apt/debian/ stretch mysql-5.6\ndeb-src [ allow-insecure=yes ] http://repo.mysql.com/apt/debian/ stretch mysql-5.6' | tee /etc/apt/sources.list.d/mysql.list > /dev/null
wget -O /tmp/RPM-GPG-KEY-mysql https://repo.mysql.com/RPM-GPG-KEY-mysql --no-check-certificate > /dev/null
apt-key add /tmp/RPM-GPG-KEY-mysql > /dev/null
# Atualizar pacotes
apt update
# Instalar o servidor MySQL
if apt-get install mysql-server -y --allow-unauthenticated; then
echo "MySQL Instalado com sucesso"
echo
echo -e "bind-address = 0.0.0.0\nlower_case_table_names = 1" | tee -a /etc/mysql/mysql.conf.d/mysqld.cnf > /dev/null
systemctl enable mysql.service
systemctl restart mysql.service
else
echo "Erro ao instalar o MySQL"
echo
fi
}
# Função para criar novo banco de dados
create_new_database() {
local mysql_host=""
local mysql_port=""
local mysql_user=""
local mysql_password=""
local db_name=""
read -p "Digite o host do MySQL (padrão: localhost): " mysql_host
mysql_host=${mysql_host:-localhost}
read -p "Digite a porta do MySQL (padrão: 3306): " mysql_port
mysql_port=${mysql_port:-3306}
read -p "Digite o usuário do MySQL (padrão: root): " mysql_user
mysql_user=${mysql_user:-root}
read -s -p "Digite a senha do usuário MySQL: " mysql_password
echo
read -p "Digite o nome do novo banco de dados: " db_name
if mysql -h $mysql_host -P $mysql_port -u $mysql_user -p$mysql_password -e "CREATE DATABASE IF NOT EXISTS $db_name;"; then
echo "Banco de dados '$db_name' criado com sucesso."
echo
else
echo "Erro ao criar o banco de dados '$db_name'"
echo
fi
}
# Função para criar novo usuário
create_new_user() {
local mysql_host=""
local mysql_port=""
local mysql_user=""
local mysql_password=""
local db_user=""
local db_password=""
read -p "Digite o host do MySQL (padrão: localhost): " mysql_host
mysql_host=${mysql_host:-localhost}
read -p "Digite a porta do MySQL (padrão: 3306): " mysql_port
mysql_port=${mysql_port:-3306}
read -p "Digite o usuário do MySQL (padrão: root): " mysql_user
mysql_user=${mysql_user:-root}
read -s -p "Digite a senha do usuário MySQL: " mysql_password
echo
read -p "Digite o nome do novo usuário: " db_user
read -s -p "Digite a senha para o usuário $db_user: " db_password
confirm_password "$db_password"
if mysql -h $mysql_host -P $mysql_port -u $mysql_user -p$mysql_password -e "CREATE USER '$db_user'@'%' IDENTIFIED BY '$db_password';"; then
echo "Usuário '$db_user' criado com sucesso."
echo
else
echo "Erro ao criar o usuário '$db_user'"
echo
fi
}
# Função para dar grant all para usuário em um banco de dados
grant_permissions() {
local mysql_host=""
local mysql_port=""
local mysql_user=""
local mysql_password=""
local db_user=""
local db_name=""
read -p "Digite o host do MySQL (padrão: localhost): " mysql_host
mysql_host=${mysql_host:-localhost}
read -p "Digite a porta do MySQL (padrão: 3306): " mysql_port
mysql_port=${mysql_port:-3306}
read -p "Digite o usuário do MySQL (padrão: root): " mysql_user
mysql_user=${mysql_user:-root}
read -s -p "Digite a senha do usuário MySQL: " mysql_password
echo
read -p "Digite o nome do usuário: " db_user
read -p "Digite o nome do banco de dados: " db_name
if mysql -h $mysql_host -P $mysql_port -u $mysql_user -p$mysql_password -e "GRANT ALL PRIVILEGES ON $db_name.* TO '$db_user'@'%';"; then
echo "Permissões concedidas para usuário '$db_user' no banco de dados '$db_name'."
echo
else
echo "Erro ao conceder permissões para o usuário '$db_user' no banco de dados '$db_name'"
echo
fi
}
# Função para alterar a senha do usuário root do MySQL
change_root_password() {
local mysql_host=""
local mysql_port=""
local mysql_user=""
local mysql_password=""
local new_root_password=""
read -p "Digite o host do MySQL (padrão: localhost): " mysql_host
mysql_host=${mysql_host:-localhost}
read -p "Digite a porta do MySQL (padrão: 3306): " mysql_port
mysql_port=${mysql_port:-3306}
read -p "Digite o usuário do MySQL (padrão: root): " mysql_user
mysql_user=${mysql_user:-root}
read -s -p "Digite a senha do usuário MySQL: " mysql_password
echo
read -s -p "Digite a nova senha para o usuário root do MySQL: " new_root_password
confirm_password "$new_root_password"
echo
if mysql -h $mysql_host -P $mysql_port -u $mysql_user -p$mysql_password -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('$new_root_password');"; then
echo "Senha do usuário root do MySQL alterada com sucesso."
echo
else
echo "Erro ao alterar a senha do usuário root do MySQL"
echo
fi
}
# Função para resetar a senha de um usuário no MySQL 5.6
reset_user_password() {
local mysql_host=""
local mysql_port=""
local mysql_user=""
local mysql_password=""
local reset_user=""
local new_user_password=""
read -p "Digite o host do MySQL (padrão: localhost): " mysql_host
mysql_host=${mysql_host:-localhost}
read -p "Digite a porta do MySQL (padrão: 3306): " mysql_port
mysql_port=${mysql_port:-3306}
read -p "Digite o usuário do MySQL (padrão: root): " mysql_user
mysql_user=${mysql_user:-root}
read -s -p "Digite a senha do usuário MySQL: " mysql_password
echo
read -p "Digite o nome do usuário para o qual deseja resetar a senha: " reset_user
read -s -p "Digite a nova senha para o usuário $reset_user: " new_user_password
echo
confirm_password "$new_user_password"
if mysql -h $mysql_host -P $mysql_port -u $mysql_user -p$mysql_password -e "SET PASSWORD FOR '$reset_user'@'%' = PASSWORD('$new_user_password');"; then
echo "Senha do usuário '$reset_user' resetada com sucesso."
echo
else
echo "Erro ao resetar a senha do usuário '$reset_user'"
echo
fi
}
# Função para reparar uma tabela específica
repair_table() {
local mysql_host=""
local mysql_port=""
local mysql_user=""
local mysql_password=""
local db_name=""
local table_name=""
read -p "Digite o host do MySQL (padrão: localhost): " mysql_host
mysql_host=${mysql_host:-localhost}
read -p "Digite a porta do MySQL (padrão: 3306): " mysql_port
mysql_port=${mysql_port:-3306}
read -p "Digite o usuário do MySQL (padrão: root): " mysql_user
mysql_user=${mysql_user:-root}
read -s -p "Digite a senha do usuário MySQL: " mysql_password
echo
read -p "Digite o nome do banco de dados: " db_name
read -p "Digite o nome da tabela a ser reparada: " table_name
if mysqlcheck -h $mysql_host -P $mysql_port -u $mysql_user -p$mysql_password --auto-repair --check "$db_name" "$table_name"; then
echo "Tabela '$table_name' no banco '$db_name' reparada com sucesso."
echo
else
echo "Erro ao reparar a tabela '$table_name' no banco '$db_name'"
echo
fi
}
# Função para reparar um banco de dados inteiro
repair_database() {
local mysql_host=""
local mysql_port=""
local mysql_user=""
local mysql_password=""
local db_name=""
read -p "Digite o host do MySQL (padrão: localhost): " mysql_host
mysql_host=${mysql_host:-localhost}
read -p "Digite a porta do MySQL (padrão: 3306): " mysql_port
mysql_port=${mysql_port:-3306}
read -p "Digite o usuário do MySQL (padrão: root): " mysql_user
mysql_user=${mysql_user:-root}
read -s -p "Digite a senha do usuário MySQL: " mysql_password
echo
read -p "Digite o nome do banco de dados a ser reparado: " db_name
if mysqlcheck -h $mysql_host -P $mysql_port -u $mysql_user -p$mysql_password --auto-repair --check "$db_name"; then
echo "Banco de dados '$db_name' reparado com sucesso."
echo
else
echo "Erro ao reparar o banco de dados '$db_name'"
echo
fi
}
# Função para fazer backup do banco de dados
backup_database() {
local mysql_host=""
local mysql_port=""
local mysql_user=""
local mysql_password=""
local db_name=""
local backup_path=""
read -p "Digite o host do MySQL (padrão: localhost): " mysql_host
mysql_host=${mysql_host:-localhost}
read -p "Digite a porta do MySQL (padrão: 3306): " mysql_port
mysql_port=${mysql_port:-3306}
read -p "Digite o usuário do MySQL (padrão: root): " mysql_user
mysql_user=${mysql_user:-root}
read -s -p "Digite a senha do usuário MySQL: " mysql_password
echo
read -p "Digite o nome do banco de dados a ser backup: " db_name
read -p "Digite o caminho completo para o arquivo de backup (Ex: /tmp/backup.sql): " backup_path
if mysqldump -h $mysql_host -P $mysql_port -u $mysql_user -p$mysql_password $db_name --single-transaction --quick --skip-lock-tables --routines --events --default-character=utf8 --column-statistics=0 > $backup_path; then
echo "Backup do banco de dados '$db_name' realizado com sucesso no arquivo '$backup_path'."
echo
else
echo "Erro ao fazer backup do banco de dados '$db_name'"
echo
fi
}
# Função para restaurar um banco de dados a partir de um arquivo de backup
restore_database() {
local mysql_host=""
local mysql_port=""
local mysql_user=""
local mysql_password=""
local db_name=""
local backup_path=""
read -p "Digite o host do MySQL (padrão: localhost): " mysql_host
mysql_host=${mysql_host:-localhost}
read -p "Digite a porta do MySQL (padrão: 3306): " mysql_port
mysql_port=${mysql_port:-3306}
read -p "Digite o usuário do MySQL (padrão: root): " mysql_user
mysql_user=${mysql_user:-root}
read -s -p "Digite a senha do usuário MySQL: " mysql_password
echo
read -p "Digite o nome do banco de dados a ser restaurado: " db_name
read -p "Digite o caminho completo para o arquivo de backup: " backup_path
mysql -h $mysql_host -P $mysql_port -u $mysql_user -p$mysql_password -e "CREATE DATABASE IF NOT EXISTS $db_name;"
if mysql -h $mysql_host -P $mysql_port -u $mysql_user -p$mysql_password $db_name < $backup_path; then
echo "Banco de dados '$db_name' restaurado com sucesso a partir do arquivo '$backup_path'."
echo
else
echo "Erro ao restaurar o banco de dados '$db_name' a partir do arquivo '$backup_path'"
echo
fi
}
# Exibir menu de seleção
while true; do
echo "1. Instalar o MySQL 5.6"
echo "2. Criar novo banco de dados"
echo "3. Criar novo usuário"
echo "4. Conceder todas as permissões a um usuário em um banco de dados"
echo "5. Alterar a senha do usuário root do MySQL"
echo "6. Resetar a senha de um usuário do banco"
echo "7. Reparar uma tabela específica"
echo "8. Reparar um banco de dados"
echo "9. Fazer backup de um banco de dados"
echo "10. Restaurar um banco de dados a partir de um arquivo de backup"
echo "11. Sair"
echo
read -p "Escolha uma opção: " choice
case $choice in
1)
install_mysql
;;
2)
create_new_database
;;
3)
create_new_user
;;
4)
grant_permissions
;;
5)
change_root_password
;;
6)
reset_user_password
;;
7)
repair_table
;;
8)
repair_database
;;
9)
backup_database
;;
10)
restore_database
;;
11)
echo "Saindo do script."
exit
;;
*)
echo "Opção inválida. Escolha novamente."
;;
esac
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment