Как создать таблицы Service Builder в базе данных? - PullRequest
0 голосов
/ 18 ноября 2011

Я удалил таблицу своего сервиса из базы данных (MySQL).И теперь есть сообщения об ошибках портлета, что таблица не существуетКак начать отдых?Я никогда не создавал служебные таблицы вручную.Они были созданы автоматически, но теперь остановлены.

* ОБНОВЛЕНИЕ *

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

1 Ответ

1 голос
/ 18 ноября 2011

У вас еще есть установочные файлы? Если это так, найдите их по имени таблицы. На Linux это будет что-то вроде

find /path/to/top/directory -type f -print0 | xargs -0r grep -il 'CREATE TABLE Xyz'

где Xyz - это имя таблицы, которую вы ищете. Для каждого файла, который он перечисляет, ищите CREATE TABLE Xyz и CREATE TABLE IF NOT EXISTS Xyz. Это должно найти оператор 'create' для отсутствующей таблицы. Если на столе также есть триггеры, это потребует дальнейшей работы.

Если у вас нет установочных файлов, но у вас есть все ваши binlogs, вы можете искать (опять же в linux) те с

find /path/to/binlogs -type f -print0 \
| \
xargs -0r file \
| \
fgrep 'MySQL replication log' \
| \
cut -d: -f1 \
>/tmp/binlog.lst
for b in $(</tmp/binlog.lst); do
    echo -n $b
    mysqlbinlog $b | grep -li 'CREATE TABLE Xyz'
    echo
done

Но даже если любой из этих подходов сработает, он получит только оригинальное утверждение create. Если в таблице была «измененная таблица» при установке или обновлении, то это дополнительный поиск.

Без резервной копии я считаю, что лучше всего переустановить ту же версию Service Builder, а затем скопировать полученную таблицу в текущую установку.

Прежде чем идти дальше, сделайте резервную копию того, что у вас есть, например, через что-то вроде mysqldump --opt --all-databases >large_dump_file

...