194 lines
6.1 KiB
Bash
Executable File
194 lines
6.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Mysql management using mariadb
|
|
|
|
databaseName="mariadb"
|
|
databasePackages="mariadb-server mariadb-client"
|
|
|
|
step_1_info() {
|
|
echo "Installation of ${databaseName} packages:"
|
|
echoinfo "$databasePackages"
|
|
echoinfo "(Consider step \"latest\" first to setup official repository with the latest version)"
|
|
}
|
|
step_1_alias() { ALIAS=install; }
|
|
step_1() {
|
|
exe apt update
|
|
exe apt install $databasePackages
|
|
endReturn -o $? "Error instaling $databaseName"
|
|
}
|
|
|
|
step_2_info() { echo "Secure ${databaseName} installation"; }
|
|
step_2() {
|
|
exe mysql_secure_installation
|
|
}
|
|
|
|
step_3_info() { echo -e "${databaseName} configuration\n"; }
|
|
step_3() {
|
|
addConf -c "$mariadbConfig" "$mariadbConfigLoc"
|
|
|
|
echo -n "Restarting mysql ... "
|
|
exe service mysql restart && echo "ok"
|
|
}
|
|
mariadbConfigLoc="/etc/mysql/mariadb.conf.d/90-myconfig.cnf"
|
|
mariadbConfig="[mysqld]
|
|
innodb_large_prefix=on
|
|
innodb_file_format=barracuda
|
|
innodb_file_per_table=true
|
|
|
|
lower_case_table_names=0
|
|
|
|
#innodb_force_recovery=6"
|
|
|
|
step_8_info() { echo "Setup ubuntu $databaseName repository"; }
|
|
step_8_alias() { ALIAS="latest"; }
|
|
step_8() {
|
|
exe apt install curl
|
|
exep "curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash -s -- --skip-maxscale --skip-tools"
|
|
}
|
|
|
|
step_10_info() { echo "Create mysql database without specific characterset"; }
|
|
step_10_alias() { ALIAS="createdb"; }
|
|
step_10() {
|
|
local mysqlDatabase
|
|
local mysqlUser
|
|
local mysqlPass
|
|
|
|
echo " [I] Existing mysql databases:"
|
|
exe mysql -u root -e 'SHOW DATABASES;'
|
|
|
|
read -p "Enter database name: " mysqlDatabase
|
|
endCheckEmpty mysqlDatabase "database name"
|
|
exe mysql -u root -e 'CREATE DATABASE '$mysqlDatabase';'
|
|
endReturn -o $? "Cannot create database $mysqlDatabase"
|
|
|
|
echo " [I] Existing mysql user:"
|
|
exe mysql -u root -e 'SELECT User, Host FROM mysql.user;'
|
|
read -p "Enter mysql user name: " mysqlUser
|
|
endCheckEmpty mysqlUser "user name"
|
|
|
|
if ! echo "SELECT COUNT(*) FROM mysql.user WHERE user = '$mysqlUser';" | mysql | grep 1 &>/dev/null; then
|
|
# User does not exist
|
|
read -s -p "Enter mysql user password: " mysqlPass
|
|
endCheckEmpty mysqlPass "password"
|
|
exe mysql -u root -e 'CREATE USER '"'"$mysqlUser"'"'@'"'"'localhost'"'"' IDENTIFIED BY '"'"$mysqlPass"'"';'
|
|
endReturn -o $? "Error creating mysql user"
|
|
fi
|
|
|
|
exe mysql -u root -e 'GRANT ALL PRIVILEGES ON '$mysqlDatabase'.* TO '"'"$mysqlUser"'"'@'"'"'localhost'"'"';'
|
|
endReturn -o $? "Error assigning privileges on database"
|
|
|
|
exe mysql -u root -e 'FLUSH PRIVILEGES;'
|
|
}
|
|
|
|
step_12_info() { echo -e "Create mysql database with characterset utf8mb4\n"; }
|
|
step_12_alias() { ALIAS="createdb_utf8mb4"; }
|
|
step_12() {
|
|
local mysqlDatabase
|
|
local mysqlUser
|
|
local mysqlPass
|
|
|
|
echo "Existing mysql databases:"
|
|
exe mysql -u root -e 'SHOW DATABASES;'
|
|
|
|
read -p "Enter database name: " mysqlDatabase
|
|
endCheckEmpty mysqlDatabase "database name"
|
|
# it is recommended NOT to use utf8mb4_general_ci anymore
|
|
exe mysql -u root -e 'CREATE DATABASE '$mysqlDatabase' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'
|
|
endReturn -o $? "Cannot create database $mysqlDatabase"
|
|
|
|
echo "Existing mysql user:"
|
|
exe mysql -u root -e 'SELECT User, Host FROM mysql.user;'
|
|
read -p "Enter mysql user name: " mysqlUser
|
|
endCheckEmpty mysqlUser "user name"
|
|
|
|
if ! echo "SELECT COUNT(*) FROM mysql.user WHERE user = '$mysqlUser';" | mysql | grep 1 &>/dev/null; then
|
|
# User does not exist
|
|
read -s -p "Enter mysql user password: " mysqlPass
|
|
endCheckEmpty mysqlPass "password"
|
|
exe mysql -u root -e 'CREATE USER '"'"$mysqlUser"'"'@'"'"'localhost'"'"' IDENTIFIED BY '"'"$mysqlPass"'"';'
|
|
endReturn -o $? "Error creating mysql user"
|
|
fi
|
|
|
|
exe mysql -u root -e 'GRANT ALL PRIVILEGES ON '$mysqlDatabase'.* TO '"'"$mysqlUser"'"'@'"'"'localhost'"'"';'
|
|
endReturn -o $? "Error assigning privileges on database"
|
|
|
|
exe mysql -u root -e 'FLUSH PRIVILEGES;'
|
|
}
|
|
|
|
step_14_info() { echo "List mysql databases"; }
|
|
step_14_alias() { ALIAS="listdb"; }
|
|
step_14() {
|
|
exe mysql -u root -e 'SHOW DATABASES;'
|
|
echo -e "\nDrop userdb by: mysql -u root -e 'DROP DATABASE userdb;'"
|
|
}
|
|
|
|
step_16_info() { echo "List mysql user"; }
|
|
step_16_alias() { ALIAS="listdbuser"; }
|
|
step_16() {
|
|
exe mysql -u root -e 'SELECT User, Host FROM mysql.user;'
|
|
echo -e "\nDrop dbuser by: mysql -u root -e 'DROP USER dbuser@localhost;'"
|
|
}
|
|
|
|
step_18_info() { echo "Size of database [DATABASE_NAME]"; }
|
|
step_18_alias() { ALIAS="sizedb"; }
|
|
step_18() {
|
|
if [ -z "$2" ]; then
|
|
echo "Please provide a database name. e.g. $0 sizedb mydb_db"
|
|
else
|
|
exe mysql -u root -e 'SELECT table_schema "DB Name",
|
|
ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB"
|
|
FROM information_schema.tables
|
|
WHERE table_schema="'$2'"
|
|
GROUP BY table_schema;'
|
|
fi
|
|
}
|
|
|
|
step_20_info() { echo "Backup (dump) a mysql database <DATABASE NAME> <TARGET DIR>"; }
|
|
step_20_alias() { ALIAS="backup"; }
|
|
step_20() {
|
|
shift # step number not used
|
|
if [ -z $1 ] ; then
|
|
echoerr " [E] No database name provided"
|
|
return 1
|
|
fi
|
|
local dbName="$1"
|
|
local buTarget="$2"
|
|
if [ -z $2 ] ; then
|
|
echoerr " [W] No target directory provided. Using home of current user"
|
|
buTarget="~/"
|
|
fi
|
|
|
|
echo " [I] Dumping database $dbName to $buTarget"
|
|
exep "mysqldump --single-transaction $dbName > \"${buTarget}/${dbName}_backup_\`date +%Y%m%d-%H%M%S\`.sql\""
|
|
endReturn -o $? "Error creating $dbName backup"
|
|
}
|
|
|
|
step_22_info() { echo "Restore a mysql database"; }
|
|
step_22_alias() { ALIAS="restore"; }
|
|
step_22() {
|
|
echo "Restore with:"
|
|
echo " mysql -e \"DROP DATABASE nextcloud_db\""
|
|
echo " mysql -e \"CREATE DATABASE nextcloud_db\""
|
|
echo " mysql nextcloud_db < NextcloudBackup_DB_20170912.sql"
|
|
}
|
|
|
|
# Read database information dbname/user/pass if empty
|
|
readDatabaseInfos() {
|
|
if [ "$dbName" == "" ] ; then
|
|
read -p "Enter postgres database name: " dbName
|
|
endCheckEmpty dbName "database"
|
|
fi
|
|
if [ "$dbUser" == "" ] ; then
|
|
read -p "Enter postgres user name: " dbUser
|
|
endCheckEmpty dbUser "user name"
|
|
fi
|
|
if [ "$dbPass" == "" ] ; then
|
|
read -s -p "Enter postgres password: " dbPass
|
|
endCheckEmpty postgresPass "password"
|
|
fi
|
|
echo
|
|
}
|
|
|
|
VERSION_SEQREV=10
|
|
. /usr/local/bin/sequencer.sh
|