#!/bin/bash # Mysql management using mariadb databaseName="mariadb" databasePackages="mariadb-server mariadb-client" dbName= dbUser= dbPass= 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 # coming from friendica warning 2020.07 table_definition_cache=1400 #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 [OPTIONS]" echoinfo " [OPTIONS]" echoinfo " --charset,-c : character set and collate" echoinfo " --database, -d : database name" echoinfo " --user, -u : user name" echoinfo " Manual password entry for non existing user" } step_10_alias() { ALIAS="createdb"; } step_10() { local arg local dbOption= shift for arg in "$@" ; do case "$1" in --charset|-c) dbOption="$2" shift 2;; --database|-d) dbName="$2" shift 2 ;; --user|-u) dbUser="$2" shift 2 ;; *) break ;; esac done case "$dbOption" in utf8) dbOption="CHARACTER SET utf8 COLLATE utf8_unicode_ci";; utf8mb4) dbOption="CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";; *) dbOption="";; esac if [ -z "$dbName" ] ; then echo " [I] Existing mysql databases:" exe mysql -u root -e 'SHOW DATABASES;' read -p "Enter database name: " dbName fi endCheckEmpty dbName "database name" exe mysql -u root -e 'CREATE DATABASE '$dbName' '"$dbOption"';' endReturn -o $? "Cannot create database $dbName" if [ -z "$dbUser" ] ; then echo " [I] Existing mysql user:" exe mysql -u root -e 'SELECT User, Host FROM mysql.user;' read -p "Enter mysql user name: " dbUser fi endCheckEmpty dbUser "user name" if ! echo "SELECT COUNT(*) FROM mysql.user WHERE user = '$dbUser';" | mysql | grep 1 &>/dev/null; then # User does not exist read -s -p "Enter mysql user password: " dbPass endCheckEmpty dbPass "password" exe mysql -u root -e 'CREATE USER '"'"$dbUser"'"'@'"'"'localhost'"'"' IDENTIFIED BY '"'"$dbPass"'"';' endReturn -o $? "Error creating mysql user" fi exe mysql -u root -e 'GRANT ALL PRIVILEGES ON '$dbName'.* TO '"'"$dbUser"'"'@'"'"'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="listuser"; } 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