LINUX.ORG.RU

Удалить все таблицы из базы mysql

 ,


1

2

Вот учусь писать bash-скрипты.
Посмотрите, скрипт, удаляющий все (!) таблицы из базы mysql:

#/bin/bash
MYSQL=/usr/bin/mysql
HOST=host
PORT=3306
USER=user
PASSWORD=password
DATABASE=database
MYSQL_SESSION=""$MYSQL" --host="$HOST" --port="$PORT" --user="$USER" --password="$PASSWORD" "$DATABASE""
echo 'SHOW TABLES;' | eval "$MYSQL_SESSION" 2>/dev/null | while read TABLE
do
   echo "DROP TABLE "$TABLE";" | eval "$MYSQL_SESSION" 2>/dev/null
done
Скрипт работает, но мне кажется что-то я в нём переговнокодил.

★★★★★

Вместо дропания всех таблиц, можно сразу дропнуть базу.
Я бы сначала подключался к хосту по SSH, а уже там локально выполнял бы команды.
И параметры подключения к базе лучше положить в клиентский конфиг mysql.

ArcFi ()

имхо, было бы проще удалить/создать базу, но, если цель именно поочередное удаление всех таблиц - то скрипт хорош

r0ck3r ★★★★★ ()
#/bin/bash
MYSQL=/usr/bin/mysql
HOST=host
PORT=3306
USER=user
PASSWORD=password
DATABASE=database
databases=`/usr/bin/mysql --user=$USER --password=$PASSWORD -e 'show databases;' | \
        grep -Ev "(Database|information_schema|performance_schema)"`
for db in databases; do
	$MYSQL -u $USER -p $PASSWORD -e "drop database $db"
done
conformist ★★★ ()

Да нормально. host port user password - в параметры и вообще отлично. Или вызов mysql в отдельный скрипт завернуть.

crutch_master ★★★★★ ()

я бы юзал ~/.my.cnf имхо секьюрнее

CHIPOK ★★★ ()
Ответ на: комментарий от conformist

Не, ну нормально. Надо только обернуть как знаменитый однострочник.

crutch_master ★★★★★ ()
Ответ на: комментарий от ArcFi

Я бы сначала подключался к хосту по SSH, а уже там локально выполнял бы команды.

Я так и делаю. Создаю ssh-тунель, прокидывая порт 3306 сервера на локальный порт 33061 и работаю уже с этим портом.

sunny1983 ★★★★★ ()
MYSQL_SESSION=""$MYSQL" --host="$HOST" --port="$PORT" --user="$USER" --password="$PASSWORD" "$DATABASE""

Кавычки так не вкладываются. Баш видит это как конкатенацию пустой строки, переменной MYSQL, строки " --host=" и т. д.

deadNightTiger ★★★★★ ()
Последнее исправление: deadNightTiger (всего исправлений: 1)
Ответ на: комментарий от deadNightTiger

Я постоянно путаю то, что связано с кавычками. Вроде как бы вызовы переменных нужно экранировать кавычками и всю строку тоже вроде заключить в кавычки надо, чтобы bash об пробелы не споткнулся, поэтому так и написал. А как надо было?

sunny1983 ★★★★★ ()
Ответ на: комментарий от sunny1983

Я бы сделал через массив

MYSQL_SESSION=("$MYSQL" "--host=$HOST" "--port=$PORT" "--user=$USER" "--password=$PASSWORD" "$DATABASE")
echo 'SHOW TABLES;' | "${MYSQL_SESSION[@]}" 2>/dev/null | while read TABLE
do
   echo "DROP TABLE "$TABLE";" | "${MYSQL_SESSION[@]}" 2>/dev/null
done

deadNightTiger ★★★★★ ()

Ждем топиков на тему «посоветовали скрипт, а базы потерлись, что делать???!?!»

LupusAlbus ()
16 августа 2017 г.
Ответ на: комментарий от crutch_master

я б те в голову дал за такие «советы» новичек пришел и ебнул себе все...

anonymous ()
Ответ на: комментарий от goingUp

Но с SET FOREIGN_KEY_CHECKS=0; вполне себе даст.

Deleted ()

Пара вопросов человека не видевшего MySQL:
MySQL правда насрать на целостность данных и связи между таблицами?
При чем здесь цикл на bash, sql мало?

arson ★★★★★ ()

Ужас. И эти же люди наверняка плюются в сторону пхп пихая башик с sql в одну лапшу.

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.