Инструкция объединения серверов

Софт для произведения слияния баз данных: HeidiSQL или DataGrip

Местонахождение скрипта: gameserver\sql\maintenance\server_merge.sql

Процесс подготовки:
Предварительно вы должны сделать бекап ваших баз данных - допустим Serverx2019 и Server2020. Для примера мы переносим данные из базы Serverx2019 (src_db) в базу Server2020 (dst_db)
Создаете 2 базы данных - src_db (заливаете данные из Serverx2019 ) и dst_db (заливаете данные из Server2020)
1. src_db - база из которой будут перенесены данные в нужную вам (Serverx2019)
2. dst_db - база в которую вы будете переносить данные (Server2020)

Внимание! Если у вас один логин сервера на обе базы, необходимо залить accounts.sql в обе базы src_db и dst_db для корректного переноса аккаунтов если количество персонажей на аккаунте суммарно станет больше 7 тогда создастся к новому аккаунту префикс. Префикс при переносе _1, допустим был аккаунт test, станет test_1
Если аккаунт превышает допустимые количество символов длинны после конвертации, будут отсечены последние 3 символ и заменены на _1:
Допустим был аккаунт 11dimasik999 > после конвертации он станет 11dimasik_1. Проверить к каким аккаунтам были добавлены префиксы можно в базе scr_db таблица acc_conv.sql

Далее запускаем скрипт как в данном видео:


Все! Процесс переноса завершен! Далее вы просто переносите данные из dst_db в Server2020 и таблицу accounts из dst_db в базу вашего логина.
 
Last edited:
при объединение возникает ошибка, дальше этой ошибки не идет..

MySQL 8.0.23
Code:
CREATE DEFINER = CURRENT_USER FUNCTION `lip_ex_TrunLoginWithPfx` (`sSrcLogin` varchar(32)) RETURNS varchar(32)
    NOT DETERMINISTIC
    SQL SECURITY DEFINER
entry: BEGIN
    declare iIdx int default 0;
    declare iCnt int default 0;
    declare sLogin varchar(32) default 0;
    set sLogin = sSrcLogin;

    REPEAT
        set iIdx = iIdx + 1;
        if CHAR_LENGTH(sSrcLogin) < 11 THEN
            select trim(concat(sSrcLogin, '_', iIdx)) into sLogin;
        else
            select trim(concat(LEFT(sSrcLogin, char_length(sSrcLogin) - 3), '_', iIdx)) into sLogin;
        end if;
        select count(dst_login) into iCnt from acc_conv where acc_conv.dst_login = sLogin;
    UNTIL (iCnt < 1) END REPEAT;

    RETURN sLogin;
END ;
/* Ошибка SQL (1418): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable) */
/* Затронуто строк: 364 730  Найденные строки: 0  Предупреждения: 6  Длительность  58 из 120 запросов: 9,875 сек. */
 
Last edited:
SQL (1418): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
Тут ответ твоей проблемы
 
решил проблему) гугл тащит)
но! при объединении не объединяются таблицы account_bonuses добавить бы их в слияние тоже
также не переносятся нублесы
 
Last edited:
А если на 2х серверах персонажи с одинаковыми никами. То что получится после объединения?
 
А если на 2х серверах персонажи с одинаковыми никами. То что получится после объединения?
В файле мердж sql все описано, читайте
 
но! при объединении не объединяются таблицы account_bonuses добавить бы их в слияние тоже
также не переносятся нублесы
@Deazer, доделай пару таблиц account_bonuses, oly_nobles
 
все аккаунты с New на Old переносятся с префиксом _1, хотя на этих аккаунтах по 1 чару... у всех так?
по гайду он должен делать проверку, если на Old больше 7 чаров, тогда создает префикс _1
accounts.sql в обеих базах одинаковый
 
все аккаунты с New на Old переносятся с префиксом _1, хотя на этих аккаунтах по 1 чару... у всех так?
по гайду он должен делать проверку, если на Old больше 7 чаров, тогда создает префикс _1
accounts.sql в обеих базах одинаковый
угу, нужен срочно фикс )
 
все аккаунты с New на Old переносятся с префиксом _1, хотя на этих аккаунтах по 1 чару... у всех так?
по гайду он должен делать проверку, если на Old больше 7 чаров, тогда создает префикс _1
accounts.sql в обеих базах одинаковый
да у меня тоже так
 
а ещё при объединении торговцы которые были на офлайн торговле, становятся пустыми, но продолжают сидеть
 
все аккаунты с New на Old переносятся с префиксом _1, хотя на этих аккаунтах по 1 чару... у всех так?
по гайду он должен делать проверку, если на Old больше 7 чаров, тогда создает префикс _1
accounts.sql в обеих базах одинаковый
ну с одной стороны удобно) на каждом акке по однмоу персу, играешь кем хочешь.
Ну а если есть желание перенести персов со с новых на старые, выборка в characters по окончанию акка и удаление окончания (но могут быть потери не большие). А с таблицы аккаунты удаляешь все новые аккаунты с _1.
 
ну с одной стороны удобно) на каждом акке по однмоу персу, играешь кем хочешь.
так и должно @Deazer быть или нет я хз, но вроде по гайду должно переносись чаров пока там есть место, если места нету создается префикс.
а так если у людей по 10+ слияний там будет Lucera_11 и т.д.)
 
все аккаунты с New на Old переносятся с префиксом _1, хотя на этих аккаунтах по 1 чару... у всех так?
по гайду он должен делать проверку, если на Old больше 7 чаров, тогда создает префикс _1
accounts.sql в обеих базах одинаковый
Есть у кого фикс этой проблемы ?
 
@Deazer , привет, рассмотри данную тему, плиз, нужна доработка системы и желательно как можно скорее.
Кроме всего прочего, что упомянули выше, еще владельцы замков дублируются после слияния. Разные кланы имеют доступ к одному и тому же замку.
Еще таблица с аккаунтами не учитывает привязанную почту из доп. таблицы "email" которая используется для работы MMOWEB и получается, что все аккаунты с префиксом скопировались без почты, и люди не могут пользоваться ЛК.
 
Вы можете далее под свои нужды модифицировать как угодно
 
Вы можете далее под свои нужды модифицировать как угодно
Хорошо, в таком случае, подскажи, пожалуйста, как сделать, чтобы не создавались дубликаты аккаунтов, если нет превышения лимита по персонажам.
У тебя в примере написано "если количество персонажей на аккаунте суммарно станет больше 7 тогда создастся к новому аккаунту префикс. Префикс при переносе _1", а по факту имеем, что даже, если на аккаунте был 1 персонаж, всё одно создался новый акк с префиксом. Или я что-то упускаю из виду?
 
Back
Top