Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Автосохранение базы mysql каждые 6 часов
#1
Всем привет.У меня возникла такая проблема: держу сервер, сборка L2Phoenix 17v . Рейты высокие и игроки быстро набивают адену, покупают шмот. Выключили электроэнергию и сервер перестал запускаться, ошибка итем таблицы, вернул базы на день назад, народ в гневе - типо многое пропало. Хотел спросить, как мне сделать автосохранение базы mysql каждые 6 часов вроде сохраняется с батника StartGameServer.bat иногда, но там о килобайт или есть другой способ автосохранять ?
PHP код:
<?php 
@echo off
:start
set user
=root
set pass
=
set DBname=l2pdb
set DBHost
=localhost
set ctime
=%TIME:~0,2%
if
"%ctime:~0,1%" == " " (
set ctime=0%ctime:~1,1%
)
set ctime=%ctime%'%TIME:~3,2%'%TIME:~6,2%
echo.
echo
Making a full backup into %DATE%-%ctime%_backup_full.sql
echo.
mysqldump.exe %Ignore% --add-drop-table -h %DBHost% -u %user% --password=%pass% %DBname% > backup/%DATE%-%ctime%_backup_full.sql
echo.
echo
Backup complite %DATE%-%ctime%_backup_full.sql
echo.
TITLE L2P Game Server
echo %DATE% %TIME% Game server is running !!! > gameserver_is_running.tmp
echo Starting L2P Game Server.
echo.
rem ======== Optimize memory settings =======
rem Minimal size with geodata is 1.5G, w/o geo 1G
rem Make sure
-Xmn value is always 1/4 the size of -Xms and -Xmx.
rem -Xms and -Xmx should always be equal.
rem ==========================================
java -server -Dfile.encoding=UTF-8 -Xms1g -Xmx1400m -Xmn192m -cp bsf.jar;bsh-2.0.jar;javolution.jar;c3p0-0.9.1.2.jar;mysql-connector-java-5.1.6-bin.jar;l2pserver.jar;jython.jar;rrd4j-2.0.1.jar;jacksum.jar l2p.gameserver.GameServer

if ERRORLEVEL 2 goto restart
if ERRORLEVEL 1 goto error
goto end
:restart
echo.
echo
Admin Restart ...
echo.
goto
start
:error
echo.
echo
Server terminated abnormaly
echo.
:
end
echo.
echo
server terminated
echo.
del gameserver_is_running.tmp
pause
Ответ
#2
правильный способ - репликация (вообще ничего не теряется). Корявый способ - mysqldump + планировщик задач.
Ответ
#3
ginger Написал:правильный способ - репликация (вообще ничего не теряется). Корявый способ - mysqldump + планировщик задач.

Думаю правильнее и то и то, тк есть ситуации когда приходится откатываться, да и дамп все таки полезно хранить, история и тп.
Ответ
#4
pitch Написал:Думаю правильнее и то и то, тк есть ситуации когда приходится откатываться, да и дамп все таки полезно хранить, история и тп.
правильнее - дампить реплику. А для откатов на время короче промежутка до последнего дапма есть такая штука как PITR.
Ответ
#5
Travesil, а не проще фиксить items таблицу, вместо того, чтобы делать откаты?
как правило такие ошибки возникают уже после рестарта, когда например пытается загрузиться итемы с одинаковыми id (банить обладателя, тк дюп налицо).
а вообще идеальный вариант, на случай утери бд или краха харда сервера, это дампить все таблицы базы на отдельный сервер.

на пхп реализовать несложно, + всегда есть возможность следить за сбоем таблиц.
к примеру записываем mysql_error() в переменную и выясняем почему не происходит дамп, тут же на лету фиксим таблицу и дампим снова.

пример кода:
Код:
<?
$db_original = mysql_connect ( $host_original, $dblogin_original, $dbpass_original ) or die ("Coudn't connect to [$db_original]");
mysql_select_db ( $db_original );
$db_copy = mysql_connect ( $host_copy, $dblogin_copy, $dbpass_copy ) or die ("Coudn't connect to [$db_copy]");
mysql_select_db ( $db_copy );
$curdate=date("ymdhis");
$n=0;
$query_tables = mysql_query("SELECT * FROM `$db_original`.`tables` ORDER BY `table_name`");
while ($tables_temp = mysql_fetch_array($query_tables))
{
    $table_name = $tables_temp['table_name'];
    $mysql_query = "CRATE TABLE `$db_copy`.`$table_name` SELECT * FROM `$db_original`.`$table_name`";    
    mysql_query($mysql_query);
    if (!mysql_error())
    {
        $mysql_error = mysql_error();
        echo "<li>Ошибка при копировании таблицы $table_name<br>$mysql_error.";
        echo "<li>И тут уже исходя из условий обрабатываем mysql_error(), фиксим таблицу db_original.table_name и запускаем повторный mysql_query.";
    }
    else
    {
        mysql_query("INSERT INTO `$db_copy`.`backup_story` (`backupdate`, `table`, `status`) VALUES ('$curdate', '$table_name', '1');";
        $n=$n+1;
    }
}
echo "<li>Скопировано $n таблиц из $host_original:$db_original в $host_copy:$db_copy.";
mysql_close();
?>
[Изображение: guru.gif]
Ответ
#6
Как я понял с твоих слов крах произошел не из-за выключения электроинергии а применение стороних программ и дюпа предмета?Но какже фиксить если таблица итемов не открывается вообще.Вот и хочу запись дампа реализовать только проблема что не очень шарю как подскажите подробней допустим корявый способ - mysqldump + планировщик задач.У меня windows xp.
Ответ
#7
Travesil, напиши ошибку почему не открывается.
попробуй REPAIR `tablename`
Здесь подробнее об этом
электроэнергия бывает причем только при железных поломках, а это программная часть, значит и сломалась она программно.
есть конечно форс мажор, что именно во время сохранения таблицы items (это пара секунд) произошло отключение от электричества, но все равно это не приведет к нечитаемости таблицы, тк сохранение несет собой лишь добавление или обновление существующих id.

в большинстве случаев крах таблиц это дублированный primary key
[Изображение: guru.gif]
Ответ
#8
Travesil Написал:Как я понял с твоих слов крах произошел не из-за выключения электроинергии а применение стороних программ и дюпа предмета?Но какже фиксить если таблица итемов не открывается вообще.Вот и хочу запись дампа реализовать только проблема что не очень шарю как подскажите подробней допустим корявый способ - mysqldump + планировщик задач.У меня windows xp.
1. Сделать скрипт, который дампит базу.
2. Поставить его в расписание планировщика.
Ответ
#9
ginger, а если он сдампит уже поврежденную базу?
[Изображение: guru.gif]
Ответ
#10
Уже удалил ту итем таблицу ошибку не запомнил.Так как мне поправить батник чтоб он автоматически сохранял базы в бекап сервера каждые 6 часов или с помощью планировщика задачь как настроить их сохранение в виндовс хп?Допустим логин root пасс 44879 название базы l2pdb и время каждые 6 часов помогите прописать где надо.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  MySQL Sw 13 desolator 3 1,612 10-30-2013, 04:32 PM
Последний пост: uzola
  Pyton и mysql DakChe 0 911 03-24-2013, 12:15 PM
Последний пост: DakChe
  UTF-8 АкА Базы по Русски О_о Z3oM 6 2,395 11-12-2011, 09:22 PM
Последний пост: Z3oM
  Ошибка с MySQl GameOff 16 3,229 08-14-2011, 07:42 AM
Последний пост: R2D2
  MySQL запрос cjhrxS 3 2,267 07-27-2011, 04:19 PM
Последний пост: cjhrxS
  Баффы настроенные на 10 часов для Lineage 2 Freya L2jServer Rootin 27 18,802 07-16-2011, 09:31 PM
Последний пост: untunable
  Python & MySQL SunnyX 3 2,258 11-10-2010, 11:38 PM
Последний пост: SunnyX
  MySQL raidboss_spawnlist respawn_time Randomazer 3 3,753 09-11-2010, 02:50 PM
Последний пост: Randomazer
  [JAVA] Вывод из mysql Дух системы 5 2,685 09-08-2010, 09:54 PM
Последний пост: DreamTheater
  Нужно переделать запросы MySQL под сборку RT-Team 1.1 Interlude Monsun 1 3,535 11-30-2007, 12:27 AM
Последний пост: PROGRAMMATOR

Перейти к форуму:


Пользователи, просматривающие эту тему: 3 Гость(ей)