Сегодня я должен был сделать это так. У меня уже есть Windows db в нижнем регистре, и мне нужно импортировать в linux db с именами таблиц, чувствительных к регистру, так что играть с опцией lowecase_table_names нельзя:)
Похоже, что 'show tables' отображает соответственно отсортированные имена таблиц, и дамп экранировал имена таблиц с символом `. Я успешно импортировал базу данных по следующему алгоритму:
- У меня есть mydb.sql с дампом Windows в нижнем регистре
- Я запустил приложение для создания схемы базы данных в Linux с именами, чувствительными к регистру.
Тогда у меня были строчные имена в дампе и чувствительные к регистру имена в базе данных mysql. Я преобразовал дамп с помощью sed & awk с помощью следующего скрипта:
#!/bin/bash
MYSQL="mysql -u root -p mydb"
FILE=mydb.sql
TMP1=`mktemp`
TMP2=`mktemp`
cp $FILE $TMP1
for TABLE in `echo "show tables" | $MYSQL`; do
LCTABLE=`echo $TABLE| awk '{print tolower($0)}'`
echo "$LCTABLE --> $TABLE"
cat $TMP1 | sed "s/\`$LCTABLE\`/\`$TABLE\`/" > $TMP2
cp $TMP2 $TMP1
done
cp $TMP1 $FILE.conv
rm $TMP1
rm $TMP2
И дамп был преобразован правильно. Все работает после импорта в Linux.