#!/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() { 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 "; } 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