yarkov
@yarkov
Помог ответ? Отметь решением.

Как получить названия БД исключая системные?

Написал для себя скрипт дампа MySQL в файлы. Знаю что велосипед, но мне для тренировки. И вот результат на скрине:
525e3343d36842fdab07c815e7befb4d.png
Вот сам скрипт:
#!/bin/bash
#

DUMP_FOLDER=${PWD}/dump
DB_USER=root
DB_PASSWORD=root
DB_HOST=localhost

[ -d ${DUMP_FOLDER} ] || mkdir ${DUMP_FOLDER}

DB_LIST=$(echo "SHOW DATABASES;" | mysql --host=${DB_HOST} --user=${DB_USER} --password=${DB_PASSWORD})

for DB_NAME in $DB_LIST
do
    DB_FOLDER=${DUMP_FOLDER}/${DB_NAME}
    [ -d ${DB_FOLDER} ] || mkdir ${DB_FOLDER}
    TABLE_LIST=$(echo "USE ${DB_NAME};SHOW TABLES;" | mysql --host=${DB_HOST} --user=${DB_USER} --password=${DB_PASSWORD})
    for TABLE_NAME in $TABLE_LIST
    do
        mysqldump --host=${DB_HOST} --user=${DB_USER} --password=${DB_PASSWORD} -B ${DB_NAME} --tables ${TABLE_NAME} > ${DB_FOLDER}/${TABLE_NAME}.sql
    done
done


Собственно я создавал только базу bashorg (дамп цитат, выполненный с помощью grab на python).
Служебные данные, типа information_schema не нужны. Заранее имена нужных БД будут неизвестны. Как их исключить?
  • Вопрос задан
  • 127 просмотров
Решения вопроса 2
savostin
@savostin
Еще один программист
DB_LIST=$(echo "SHOW DATABASES where \`database\` != 'mysql' AND \`database\` not like '%_schema';" | mysql --host=${DB_HOST} --user=${DB_USER} --password=${DB_PASSWORD})
Ответ написан
yarkov
@yarkov Автор вопроса
Помог ответ? Отметь решением.
Рабочий скрипт:
#!/bin/bash
#

DB_USER=root
DB_PASSWORD=root
DB_HOST=localhost

NOW=$(date +"%d-%m-%Y")
DUMP_FOLDER=${PWD}/dump/${NOW}

[ -d ${DUMP_FOLDER} ] || mkdir -p ${DUMP_FOLDER}

DB_LIST=$(echo "SHOW DATABASES WHERE \`database\` != 'mysql' AND \`database\` != 'phpmyadmin' AND \`database\` NOT LIKE '%_schema';" | mysql --host=${DB_HOST} --user=${DB_USER} --password=${DB_PASSWORD})

for DB_NAME in $DB_LIST
do
    if [ ${DB_NAME} != 'Database' ];then
        DB_FOLDER=${DUMP_FOLDER}/${DB_NAME}
        [ -d ${DB_FOLDER} ] || mkdir -p ${DB_FOLDER}
        TABLE_LIST=$(echo "USE ${DB_NAME};SELECT \`table_name\` FROM information_schema.tables WHERE \`table_schema\` = '${DB_NAME}' AND \`table_name\` NOT LIKE 'Tables_in%';" | mysql --host=${DB_HOST} --user=${DB_USER} --password=${DB_PASSWORD})
        for TABLE_NAME in $TABLE_LIST
        do
            if [ ${TABLE_NAME} != 'table_name' ]; then
                mysqldump --host=${DB_HOST} --user=${DB_USER} --password=${DB_PASSWORD} -B ${DB_NAME} --tables ${TABLE_NAME} > ${DB_FOLDER}/${TABLE_NAME}.sql
            fi
        done
    fi
done
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы