Drop multiple databases with names matching a pattern

后端 未结 10 2326
南旧
南旧 2021-02-02 10:39

I want to drop all the databases starting with a word.

abc
xyz
cms_db1
cms_db2
cms_xyz
pqr

In the example given above, I will like to drop all

10条回答
  •  眼角桃花
    2021-02-02 10:58

    Improved @neurino solution to avoid storing of MySQL credentials in the script and passing them through a command line (it might be visible in the list of processes then)

    #!/bin/bash
    
    DB_STARTS_WITH="cms"
    MYSQL="mysql"
    
    read -p "Enter MySQL user name: " MYSQL_USER
    read -s -p "Enter password: " MYSQL_PASSWORD
    
    CREDENTIALS_FILE="$(mktemp)"
    chmod 600 $CREDENTIALS_FILE
    cat > $CREDENTIALS_FILE <<- EOM
    [client]
    user=$MYSQL_USER
    password=$MYSQL_PASSWORD
    EOM
    
    trap "{ rm -f $CREDENTIALS_FILE; }" EXIT
    
    DATABASES="$(echo "show databases;" | $MYSQL --defaults-file=$CREDENTIALS_FILE)"
    
    for DATABASE in $DATABASES; do
        if [[ $DATABASE =~ ^${DB_STARTS_WITH} ]]; then
            echo Removing $DATABASE...
            echo "drop database $DATABASE" | $MYSQL --defaults-file=$CREDENTIALS_FILE
        fi
    done
    

提交回复
热议问题