# -*- mode: shell-script -*- include pretty export DB_NAME="$SERVICE_NAME" ## general type of database (ie: postgres/mysql...) export DB_DATADIR=/var/lib/mysql export DATA_DIR=$SERVICE_DATASTORE$DB_DATADIR export LOCAL_DB_PASSFILE="$DATA_DIR/my.cnf" export CLIENT_DB_PASSFILE=/root/.my.cnf is_db_locked() { local host_db_volume if [ "${HOST_DATASTORE+x}" ]; then host_db_volume="$HOST_DATASTORE/${SERVICE_NAME}" else host_db_volume="$DATASTORE/${SERVICE_NAME}" fi ## ``are_files_locked_in_dir`` doesn't work with mysql here as ## tested is_volume_used "$host_db_volume" } _set_db_params() { local docker_ip="$1" docker_network="$2" if [ "${HOST_DATASTORE+x}" ]; then export HOST_DB_PASSFILE="$HOST_DATASTORE/${SERVICE_NAME}$DB_DATADIR/my.cnf" else export HOST_DB_PASSFILE="$CLIENT_DB_PASSFILE" fi [ -f "$CLIENT_DB_PASSFILE" ] || touch "$CLIENT_DB_PASSFILE" server_docker_opts+=() db_docker_opts+=("--network" "$docker_network") db_cmd_opts+=("-h" "$docker_ip") check_command="SELECT 1;" } _set_server_db_params() { server_docker_opts+=() } ddb () { dcmd mysql "$@"; } ## ## Entrypoints ## db_create () { local dbname="$1" ## Using this instead of pipes is important so that trap works debug "Create if not exists '$dbname' database..." ddb < <(echo "CREATE DATABASE IF NOT EXISTS \`$dbname\`") } db_grant_rights () { local dbname="$1" user="$2" password="$3" ## Using this instead of pipes is important so that trap works debug "Grant all on $dbname to $user" ddb < <(echo "GRANT ALL ON \`$dbname\`.* TO '$user'@'%' IDENTIFIED BY '$password'") } check_access() { local dbname="$1" user="$2" password="$3" ## Using this instead of pipes is important so that trap works debug "Check if credentials for user '$user' can access database '$dbname'" ddb --user="$user" --password="$password" "$dbname" < <(echo "SELECT 1") }