Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Новичкам (http://mangos.ytdb.ru/forumdisplay.php?f=40)
-   -   Вопрос по SQL. (http://mangos.ytdb.ru/showthread.php?t=1825)

Omg 18.07.2010 17:18

Вопрос по SQL.
 
Столкнулся с проблемой - нужно "достать" персонажа из бэкапа.
Сначала думал, чем бы это сделать - на ум пришёл только Excel.
С мелкими sql-файлами - без проблем. "Данные"-->"Сортировка" и Ctrl+C все данные с нужным гуидом.

1я проблема - "Размеры листа Excel ограничены 65536 строками и 256 столбцами данных"
2я проблема - не все таблицы содержат первым параметром гуид (обычная сортировка по алфавиту помогала во всех кроме этого случаях):mda:

Может есть более простой и менее манульный способ вытягивания персонажа из бэкапа? Или, может, более удобные программы? :)

Konctantin 18.07.2010 17:21

Ексель? да вы просто извращенец.
Чем вам не подходит сама база данных, вливаете в нее бекап, и от туда вытягиваете.
Гуи интерфейс и запросы вам в помощь.

Hantet 18.07.2010 17:38

Konctantin, кажется, человек пытается систематизировать "вытаскивание" персонажей и бэкапов. Если эти самые бэкапы делаются раз в сутки и каждый день нужно вытащить какого-то персонажа, не будешь же ты каждый раз заливать в базу бэкап и вытаскивать из сотен тысяч строк пару десятков. Во-первых: время. Во-вторых: ресурсы.
Если бэкап небольшой (!), то могу предложить написать функцию на php.
Если бэкап большой - пишем на c++ (например) программу, которая будет циклом пробегаться по бэкапу и вытаскивать нужную инфу. Написать такую программулину - дело одного часа, да и автоматизировано всё будет, из бэкапа на 500 мб нужная инфа будет вытащена за несколько секунд.

rsa 18.07.2010 18:02

Бред... Влить бэкап в другую таблицу и запросом в полстрочки все скопировать.

Hantet 18.07.2010 18:03

Цитата:

Сообщение от rsa (Сообщение 10893)
Бред... Влить бэкап в другую таблицу и запросом в полстрочки все скопировать.

Бэкап на 2+ гига всей базы characters?

Konctantin 18.07.2010 18:14

Цитата:

Бэкап на 2+ гига всей базы characters?
а где такое написано, и вообще, где написано, что чего и сколько?
Да и не важно, а вы хотите сказать что с 2 гигами Ексель справится?

Да бред все это, вместо, того, чтобы расписывать, как это делается экселем, лучше б написали, что у вас есть, какой бекап и т.д. и т.п

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

ИМХО быстрее и удобнее не будет.

Omg 18.07.2010 18:16

Цитата:

Сообщение от rsa (Сообщение 10893)
Бред... Влить бэкап в другую таблицу и запросом в полстрочки все скопировать.

Вы имеете в виду "в другую базу"?
Не представляю, как должен выглядеть подобный запрос :(
Вероятно что-то похожее на это:
Dump WHERE 'guid' '8769'.. как-то так

2 Hantet.
Бэкап на самом деле небольшой, 450мб, но со временем будет толще. А столкнулся с этим я в первый раз. Вот и спросил :)
С языками программирования к сожалению не дружу, но никого ни к чему не обязываю. Ценю как своё, так и чужое время.


2 Konstantin.
Самая большая таблица пока 128мб (character_achievement_progress)

Hantet 18.07.2010 18:17

Цитата:

Сообщение от Konctantin (Сообщение 10895)
а где такое написано, и вообще, где написано, что чего и сколько?
Да и не важно, а вы хотите сказать что с 2 гигами Ексель справится?

Да бред все это, вместо, того, чтобы расписывать, как это делается экселем, лучше б написали, что у вас есть, какой бекап и т.д. и т.п

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

ИМХО быстрее и удобнее не будет.

Не спорю. Сам всегда провожу такие работы только в Navicat или накрайняк в SQLYog.
Просто, раз тема про "ручное колупание в бэкапах" - написал _не_про_GUI_

virusav 18.07.2010 18:47

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

tempura 18.07.2010 18:54


Hantet 18.07.2010 18:56


Кот ДаWINчи 19.07.2010 12:16

вытаскивать перса из бакапа (по ИМХО) админу необходимо только в двух случаях:

1. игрок (или лицо добравшееся до персонажа) что-то натворил с ним плохое (Выкинул ценный шмот, разучил таланты, разучил не ту профу...)

2. Игрок (или...) удалил персонажа.

Для 1-го самое быстрое это то, что написал virusav в посте №9

Для 2-го есть способ попроще. В конфиге мангоса включаешь логирование исходников в логе персонажей (characters.log). Тогда при удалении персонажа бакап этого персонажа будет сгенерирован и записан в логе самим сервером. ;)

19.07.2010 13:19

3. накосячила бд, вырубился свет и тп и персонаж не пускает в игру из-за битых данных...
имхо 9 пост самый верный

Кот ДаWINчи 19.07.2010 18:31


LordJZ 19.07.2010 20:50

Цитата:

Сообщение от Minimajack (Сообщение 10946)
3. накосячила бд, вырубился свет и тп и персонаж не пускает в игру из-за битых данных...
имхо 9 пост самый верный

Используйте InnoDB и Repair.

Hantet 19.07.2010 21:21

Цитата:

Сообщение от LordJZ (Сообщение 10960)
Используйте InnoDB и Repair.

Чёё?!
Иннодб спасает от вылетаний пробок?! Не верю!
Год мучился, потом решился купить UPS. :)
Гады, раньше не могли сказать? :):)

Konctantin 19.07.2010 21:27

Цитата:

Иннодб спасает от вылетаний пробок?! Не верю!
Самое время почитать, как работает БД, что происходит перед началом записи, во время и после записи.
Цитати с вики:
Цитата:

В отличие от таблиц MyISAM, где для каждой таблицы создается один файл данных, данные InnoDB в настройках по умолчанию хранятся в больших совместно используемых файлах (изменить это можно с помощью настроек опции innodb_file_per_table), что позволяет использовать постраничный кэш страниц базы данных. Формат данных InnoDB обеспечивает надежное хранение данных за счет транзакционности и блокирование данных на уровне СТРОКИ.

LordJZ 19.07.2010 21:34

Если во время транзакции вылетит свет, можно будет восстановить все данные, связанные с транзакцией, на момент непосредственно до транзакции.

19.07.2010 22:34

Цитата:

Сообщение от LordJZ (Сообщение 10964)
Если во время транзакции вылетит свет, можно будет восстановить все данные, связанные с транзакцией, на момент непосредственно до транзакции.

не поверю, что мангос везде использует транзакции...
тем более есть mysql 4...где такое не канает :pardon:

LordJZ 19.07.2010 23:10

Цитата:

Сообщение от Minimajack (Сообщение 10967)
не поверю, что мангос везде использует транзакции...
тем более есть mysql 4...где такое не канает :pardon:

Ну во-первых в мангосе во всех ключевых (пере)записывающих запросах установлены транзакции.
А во-вторых, если у вас жесткий диск остался в живых после внезапного отключения света, то у InnoDB есть autorecovery, которое при запуске пофиксит поломанные данные.

Почему это в MySQL 4 не канает? InnoDB в MySQL 4 поддерживается.
И, кстати, какого черта вы используете MySQL 4 ? Если это из-за хостинга, то вам следует сменить хостинг. Это IE6 в области СУБД, "вы же не пьете прокисшее молоко?".

Hantet 19.07.2010 23:15


Omg 19.07.2010 23:35

Цитата:

Сообщение от LordJZ (Сообщение 10960)
Используйте InnoDB и Repair.

InnoDB стоит и Repair через навикат часто спасал от проблем в таблицах при перебоях питания на сервере =)
Всё же от такого персонажи не пропадали. Таблицы гильдий, скиллов ломались, это было.
Цитата:

вытаскивать перса из бакапа (по ИМХО) админу необходимо только в двух случаях:

1. игрок (или лицо добравшееся до персонажа) что-то натворил с ним плохое (Выкинул ценный шмот, разучил таланты, разучил не ту профу...)
2. Игрок (или...) удалил персонажа.
Естественно, я предполагал больше оба эти варианта, чем то, что из-за чего-то необъяснимого их персы пропали.. но я уже зафиксировал у себя третий случай пропажи персонажа после дисконнекта. Издеваются чтоль?)

2 virusav: спасибо) это оптимальный вариант для меня.

Fear 20.07.2010 22:29

По-моему нужно устранять проблему в самом сервере (ОС хотя бы сменить что ли с домашней на более подходящую), а не ежедневно что-то делать с бекапами в 2 гига и доставать оттуда персонажей.

feanorco 20.07.2010 23:19

1 гб чарактерс.
"вырубило свет во время бек апа" - нуууу... хостер гарантирует 23:59/24:00 аптайма - бек-апа базы ежедневный занимает... ну не мне вам говорить как много... проблемы еще ни разу не видел с тем что бы в момент бек - апа отвалился свет - ребутнулось железо или чтото. учитуя теорвер... думаю сего и не случится(надеюсь). ну а собственно если вдруг так сказать, все-таки "повезло"
1. беремсь и грузим (под масдаем) старый добрый билдер. Настраиваем много веселых штучек, копаем в сторону:- "а не скажи ка мне гугля что да как в билдере с MySQL" если используется мускуль (так и не сказано что юзается) ну а дале курим в сторону компонентов SQLquery (иль чего вам там гугля посоветует, есть много условно бессплатных, и парочка бессплатных для делфи - которые нормально ставятся на билдер (Zкомпонентс, иль как то они там так зовутся, юзал лет 5 назад)) ну после всего проделоного и насстроеного через 15 мин рождается софтина.
но все таки просьба - скажи что именно подрозумевается в "нужно "достать" персонажа из бэкапа." ? а то немного не андестенд...
с сями могу подсобить в этом варианте есл народ подскажет точно в каких базах инфа валяется. сие не сложно. 1 раз зато на века.

21.07.2010 23:29

Цитата:

Сообщение от LordJZ (Сообщение 10960)
Используйте InnoDB и Repair.

уже давно все переведено на нормальные версии(стабильные)...
до этого использовалась тестовая платформа с урезаным мускулем 4 и тп...
зы как то после падения запустил мангос....показал кривые данные о плеере...удалил остатки от него, пришлось ковырятся с бэкапами =)))
все это конечно было в старых ревизиях с 8ххх ) ...в общем двано это было, вот и написал что возможно и такое :thank_you:


Текущее время: 15:12. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS