Автосохранение базы mysql каждые 6 часов - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Работа со скриптами

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.

Ответ
Опции темы
Непрочитано 22.06.2010, 21:32   #1
Пользователь

Автор темы (Топик Стартер) Автосохранение базы mysql каждые 6 часов

Всем привет.У меня возникла такая проблема: держу сервер, сборка L2Phoenix 17v . Рейты высокие и игроки быстро набивают адену, покупают шмот. Выключили электроэнергию и сервер перестал запускаться, ошибка итем таблицы, вернул базы на день назад, народ в гневе - типо многое пропало. Хотел спросить, как мне сделать автосохранение базы mysql каждые 6 часов вроде сохраняется с батника StartGameServer.bat иногда, но там о килобайт или есть другой способ автосохранять ?
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 -%DBHost% -%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% %TIMEGame server is running !!! > gameserver_is_running.tmp
echo Starting L2P Game Server.
echo.
rem ======== Optimize memory settings =======
rem Minimal size with geodata is 1.5Gw/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--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 
Travesil вне форума Отправить сообщение для Travesil с помощью ICQ Ответить с цитированием
Непрочитано 23.06.2010, 05:44   #2
Герой

По умолчанию Re: Автосохранение базы mysql каждые 6 часов

правильный способ - репликация (вообще ничего не теряется). Корявый способ - mysqldump + планировщик задач.
ginger вне форума Отправить сообщение для ginger с помощью ICQ Отправить сообщение для ginger с помощью Skype™ Ответить с цитированием
Непрочитано 23.06.2010, 07:33   #3
Пользователь

По умолчанию Re: Автосохранение базы mysql каждые 6 часов

Цитата:
Сообщение от ginger Посмотреть сообщение
правильный способ - репликация (вообще ничего не теряется). Корявый способ - mysqldump + планировщик задач.
Думаю правильнее и то и то, тк есть ситуации когда приходится откатываться, да и дамп все таки полезно хранить, история и тп.
pitch вне форума Ответить с цитированием
Непрочитано 23.06.2010, 09:06   #4
Герой

По умолчанию Re: Автосохранение базы mysql каждые 6 часов

Цитата:
Сообщение от pitch Посмотреть сообщение
Думаю правильнее и то и то, тк есть ситуации когда приходится откатываться, да и дамп все таки полезно хранить, история и тп.
правильнее - дампить реплику. А для откатов на время короче промежутка до последнего дапма есть такая штука как PITR.
ginger вне форума Отправить сообщение для ginger с помощью ICQ Отправить сообщение для ginger с помощью Skype™ Ответить с цитированием
Непрочитано 23.06.2010, 10:43   #5
Аватар для Дух системы
Пользователь

По умолчанию Re: Автосохранение базы mysql каждые 6 часов

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();
?>
__________________
Дух системы вне форума Отправить сообщение для Дух системы с помощью ICQ Ответить с цитированием
Непрочитано 23.06.2010, 11:22   #6
Пользователь

Автор темы (Топик Стартер) Re: Автосохранение базы mysql каждые 6 часов

Как я понял с твоих слов крах произошел не из-за выключения электроинергии а применение стороних программ и дюпа предмета?Но какже фиксить если таблица итемов не открывается вообще.Вот и хочу запись дампа реализовать только проблема что не очень шарю как подскажите подробней допустим корявый способ - mysqldump + планировщик задач.У меня windows xp.
Travesil вне форума Отправить сообщение для Travesil с помощью ICQ Ответить с цитированием
Непрочитано 23.06.2010, 11:51   #7
Аватар для Дух системы
Пользователь

По умолчанию Re: Автосохранение базы mysql каждые 6 часов

Travesil, напиши ошибку почему не открывается.
попробуй REPAIR `tablename`
Здесь подробнее об этом
электроэнергия бывает причем только при железных поломках, а это программная часть, значит и сломалась она программно.
есть конечно форс мажор, что именно во время сохранения таблицы items (это пара секунд) произошло отключение от электричества, но все равно это не приведет к нечитаемости таблицы, тк сохранение несет собой лишь добавление или обновление существующих id.

в большинстве случаев крах таблиц это дублированный primary key
__________________
Дух системы вне форума Отправить сообщение для Дух системы с помощью ICQ Ответить с цитированием
Непрочитано 23.06.2010, 11:55   #8
Герой

По умолчанию Re: Автосохранение базы mysql каждые 6 часов

Цитата:
Сообщение от Travesil Посмотреть сообщение
Как я понял с твоих слов крах произошел не из-за выключения электроинергии а применение стороних программ и дюпа предмета?Но какже фиксить если таблица итемов не открывается вообще.Вот и хочу запись дампа реализовать только проблема что не очень шарю как подскажите подробней допустим корявый способ - mysqldump + планировщик задач.У меня windows xp.
1. Сделать скрипт, который дампит базу.
2. Поставить его в расписание планировщика.
ginger вне форума Отправить сообщение для ginger с помощью ICQ Отправить сообщение для ginger с помощью Skype™ Ответить с цитированием
Непрочитано 23.06.2010, 11:58   #9
Аватар для Дух системы
Пользователь

По умолчанию Re: Автосохранение базы mysql каждые 6 часов

ginger, а если он сдампит уже поврежденную базу?
__________________
Дух системы вне форума Отправить сообщение для Дух системы с помощью ICQ Ответить с цитированием
Непрочитано 23.06.2010, 12:07   #10
Пользователь

Автор темы (Топик Стартер) Re: Автосохранение базы mysql каждые 6 часов

Уже удалил ту итем таблицу ошибку не запомнил.Так как мне поправить батник чтоб он автоматически сохранял базы в бекап сервера каждые 6 часов или с помощью планировщика задачь как настроить их сохранение в виндовс хп?Допустим логин root пасс 44879 название базы l2pdb и время каждые 6 часов помогите прописать где надо.
Travesil вне форума Отправить сообщение для Travesil с помощью ICQ Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка 1064 при заливке базы через MySQL-Front FallenAngels World of WarCraft 3 02.05.2009 18:20
Бекап базы Квося Lineage II 5 03.02.2009 13:29
Ошибка базы maxo Lineage II 1 13.12.2008 11:14


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 08:39. Часовой пояс GMT +3.

Вверх