PDA

View Full Version : بر گرداندن backup mysql بر روی سرور



fereshte22
شنبه 14 بهمن 1385, 13:50 عصر
من یک انجمن phpbb با دیتا بیس mysql بر روی سرور فرستادم.مدیر سرور ما از دیتابیس backup گرفته و سیستم عامل سرور را عوض کرده و الان در برگرداندن backup دیتا بیس مشکل دارند .کسی میتونه من را راهنمایی کنه که چطور میشه backup mysql را برگردانیم.
من خودم تا حالا با mysql کار نکرده ام.و فقط یک دیتا بیس mysql بر روی سرور ایجاد کردم.

reza_rad
شنبه 14 بهمن 1385, 14:01 عصر
با چنین دستوری:


mysql -u root -p -B wikidb < wikidb.sql


توضیحات بیشتر:
http://meta.wikimedia.org/wiki/Database_dump_and_restore_examples

البته این به شرطی هست که Backup بصورت اسکریپت گرفته شده باشه...


ولی اگه ادمین فقط یک نسخه از فایل ها رو کپی کرده باشه اینکار لازم نیست فقط باید شما به همون نام و با همون یوزر ها دیتابیس رو ایجاد کنید و بعد به ادمین بگین که فایلها رو به شاخه ی این دیتابیس جدید کپی کنه.

reza_rad
شنبه 14 بهمن 1385, 14:08 عصر
این هم توضیحات چگونگی برگرداندن بک آپ با phpMyAdmin :
http://fragments.turtlemeat.com/mysql-database-backup-restore-phpmyadmin.php

DonetKarvb
یک شنبه 15 بهمن 1385, 01:40 صبح
با چنین دستوری:


mysql -u root -p -B wikidb < wikidb.sql

با سلام
من این دستور رو اجرا میکنم و ارور میده. میگه که توی syntax اشکال دارد.
من از MySQl 5 استففاده میکنم و بانکمم با MySQL 4.1 بک آپ گرفته شده آیا باید از همون ورژن 4 استفاده کنم؟
ایا ویرایش های مختلف توی باز گرداندن دیتابیس نقشی دارند؟
باتشکر

reza_rad
یک شنبه 15 بهمن 1385, 06:53 صبح
دقیقا چه اروری میده؟

DonetKarvb
یک شنبه 15 بهمن 1385, 08:18 صبح
دقیقا چه اروری میده؟
با سلام مجدد و تشکر از پیگیرتون.
من این بک آپ رو با استفاده از محیط گرافیکی میتونستم برگردونم ولی راستش ارور های زیادی رو میداد و خیلی از رکورد ها بر نمیگشتند. گفتم از این یکی میحط هم استفاده کنم شاید درست بشه.
من برای اینکه این فایل رو Restore کنم میرم سراغ My SQl Command line. من My SQL رو روی سیستم خونه دارم و دارم به صورت لوکال کار میکنم و با هیچ هاست و یا سرور خارجی هم در ارتباط نیستم. ارمروز هم ورژن 4.1 رو دانلود کردم ولی همچنان ...
اینم عکسش.

reza_rad
یک شنبه 15 بهمن 1385, 10:47 صبح
خواهش می کنم

شما پسورد رو وارد نکردید توی دستور بعد از P
این رو تست کنید:


mysql -u root -p root -h localhost myDB < test.sql


البته با پسورد روت خودتون

DonetKarvb
یک شنبه 15 بهمن 1385, 13:11 عصر
از پاسخ شما تشکر میکنم.
نه متاسفانه نشد. باز هم همان پیغام قبلی. نمیدانم چرا اینجوری میشه.
چند سوال:
-آیا MySQl نسبت به کوچک و بزرگ بودن حروف حساس است(Case Sensitive)
- محل فیزیکی فایل بک آپ برای برگرداندن باید کجا باشد؟
- آیا mysql همانند SQl Server نیاز به نوشتن دستوری نظیر restore Databse DBname from ... ندارد؟

*-- پسورد من 123456789 است. و یوزر جدید هم تعریف نکردم و همان root میباشد.

مجددا" عکسی را ضمیمه نمودم.
با تشکر از شما و صبر و حوصله ای که به خرج میدهید.

reza_rad
یک شنبه 15 بهمن 1385, 14:29 عصر
خواهش می کنم:)


دستور Restore همینی هست که گفتم حالا لزوما کی ورد Restore رو نداره ولی همون کار رو می کنه.

مشکل اینه که شما اول میری توی mysql command و بعد می خوای restore کنی.
این کارو بکن:
با command prompt برو توی دایرکتوری bin جایی که mysql نصب شده.
و کل دستوری که گفتم دستور رو بنویس البته باید اسم دیتابیس و فایل خودت رو بدی و یوزر و پسورد خودت.
من یه نمونه عکس گذاشتم. نگاه کن متوجه میشی.
البته چون فایلش روی سیستم من موجود نبود ارور داده که نمی تونه پیدا کنه ولی اگه شما آدرس فایل رو درست بدی کار می کنه.

DonetKarvb
یک شنبه 15 بهمن 1385, 22:48 عصر
با سلام. خداروشکر دیگه اون ارور قبلی رو نمیداد و کمی اعصابم آرومتر شده است. :تشویق:
بعد از زدن دستورات کلی نوشته انومد که بیشتر شبیه توضیحات در مورد دستورات بود و چیزی هم در مورد Restore شدن و یا نشدن ننوشت. همچنین اصلا" خبری از داده های برگشت داده شده نبود.
البته شاید باز هم من اشتباه می کنم به همین دلیل عکس رو مجددا" ضمیمه میکنم.
http://i19.tinypic.com/2hhooxg.jpg

reza_rad
دوشنبه 16 بهمن 1385, 07:39 صبح
ببخشید من فراموش کردم اینو بگم:
قبل از اجرای این دستور باید دیتابیس رو به همین نام ایجاد کنید. با دستور


create database test


البته برای این کار اول باید برین توی mysql command و بعد از ایجاد بیاین بیرون و بعد دستور مربوط به Restore رو اجرا کنید. متاسفانه من الان جایی هستم که نمی تونم عکس بذارم براتون

DonetKarvb
دوشنبه 16 بهمن 1385, 10:41 صبح
ببخشید من فراموش کردم اینو بگم:
قبل از اجرای این دستور باید دیتابیس رو به همین نام ایجاد کنید. با دستور


create database test
البته برای این کار اول باید برین توی mysql command و بعد از ایجاد بیاین بیرون و بعد دستور مربوط به Restore رو اجرا کنید. متاسفانه من الان جایی هستم که نمی تونم عکس بذارم براتون
خواهش میکنم. اختیار دارید.
من قبلا" دیتابیس رو ایجاد کرده بودم. ولی همچنان این مشکل هست. من نسبت به مسیر فیزیکی فایل هم مطئن هستم چون یک مسیر اشتباه دادم همان پیغامی که برای شما صادر شد برای منم صادر میشد.
ولی داخل اسکریپت گوا مشکلی هست. مشکلی که از بابت سنتکس ایراد میگیرد. در حالی که هیچ اشملی از لحاظ من نیست.
آیا احتمال دارد به خاطر این باشد که حروفغ را درست نشان نمیدهد!!؟

reza_rad
دوشنبه 16 بهمن 1385, 10:47 صبح
من دقیقا همین رو تست کردم و درست هم کار کرد.
شاید مشکل از فایل بک آپ شما باشه
بک آپ رو چه جوری تهیه کردید؟ توسط PhpMyadmin یا mysqldump یا ... ؟
چون ممکنه فقط اسکریپت باشه و با یه اجرای ساده جواب بده.

چند خط اول فایل بک آپ تون رو هم اگه می تونید بذارید اینجا

DonetKarvb
دوشنبه 16 بهمن 1385, 11:38 صبح
من دقیقا همین رو تست کردم و درست هم کار کرد.
شاید مشکل از فایل بک آپ شما باشه
بک آپ رو چه جوری تهیه کردید؟ توسط PhpMyadmin یا mysqldump یا ... ؟
چون ممکنه فقط اسکریپت باشه و با یه اجرای ساده جواب بده.

چند خط اول فایل بک آپ تون رو هم اگه می تونید بذارید اینجا
با سلام
همانطور که قبلا" هم گفتم خبر ندارم چطور بک آپ گرفتند داده به من میگه تبدیلش کن به اسکیو ال :عصبانی++:
درسته با اجرای ساده درست میشه. ولی متاسفانه خیلی از رکورد ها رو بر نمگردونه
میگه مشکل سینتکس دارد.
چند خط اولش هم چشم:


-- MySQL dump 10.9
--
-- Host: localhost Database: OurDB_FBank
-- ------------------------------------------------------
-- Server version 4.1.21-standard

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `phpbb_auth_access`
--

DROP TABLE IF EXISTS `phpbb_auth_access`;
CREATE TABLE `phpbb_auth_access` (
`group_id` mediumint(8) NOT NULL default '0',
`forum_id` smallint(5) unsigned NOT NULL default '0',
`auth_view` tinyint(1) NOT NULL default '0',
`auth_read` tinyint(1) NOT NULL default '0',
`auth_post` tinyint(1) NOT NULL default '0',
`auth_reply` tinyint(1) NOT NULL default '0',
`auth_edit` tinyint(1) NOT NULL default '0',
`auth_delete` tinyint(1) NOT NULL default '0',
`auth_sticky` tinyint(1) NOT NULL default '0',
`auth_announce` tinyint(1) NOT NULL default '0',
`auth_vote` tinyint(1) NOT NULL default '0',
`auth_pollcreate` tinyint(1) NOT NULL default '0',
`auth_attachments` tinyint(1) NOT NULL default '0',
`auth_mod` tinyint(1) NOT NULL default '0',
KEY `group_id` (`group_id`),
KEY `forum_id` (`forum_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Dumping data for table `phpbb_auth_access`
--

LOCK TABLES `phpbb_auth_access` WRITE;
/*!40000 ALTER TABLE `phpbb_auth_access` DISABLE KEYS */;
سطر بعدیش خیلی طولانی میشد که یک دستور اینزرت است. به همین دلیل نگذاشتمش.

reza_rad
دوشنبه 16 بهمن 1385, 11:58 صبح
به نظر میرسه بک آپ با همون mysqldump گرفته شده و مشکلی نداره احتمالا.

اما یک نکته ای من الان به ذهنم رسیده.
کاراکترهایی که بعنوان دیتا داخل این دیتابیس بوده اند الان بصورت اسکریپت در جملات اینزرت استفاده شده اند و چون Collation ای که استفاده شده برای فارسی بوده مشکلی که پیش میاد اینجاست که وقتی این اسکریپت اجرا میشه mysql نمیتونه تشخیص بده که این فرمت دیتا هست و خطای سینتکس می گیره.
در مورد تصحیح فایل هم فکر نمی کنم عملی باشه چون مسلما دیتاهای بسیار زیادی داره و حجم زیادی و کار بسیار وقتگیر و غیرمعقولیه که دستی اسکرپت ها اصلاح بشن!
نمی دونم منظورم رو متوجه شدید یا نه؟

در چنین موردی خیلی بهتر بود از کل فایل های دیتابیس توی شاخه مربوط به خودش توی mysql کپی تهیه می کردند.
و الان برای بازیابی فقط فایل ها رو به همون شاخه برمی گردوندن.

ولی اینکه الان چه باید کرد به نظر من اگه هیچ نسخه ای از فایل ها موجود نیست و فقط همین فایل بک آپ رو دارید باید با همون دیتاهای نصفه نیمه بسازید خلاصه از هیچی بهتره!

البته شاید راههای دیگری هم باشه که اگه دوستان بلد باشند خوشحال میشم من هم استفاده خواهم کرد.

DonetKarvb
دوشنبه 16 بهمن 1385, 12:34 عصر
به نظر میرسه بک آپ با همون mysqldump گرفته شده و مشکلی نداره احتمالا.

اما یک نکته ای من الان به ذهنم رسیده.
کاراکترهایی که بعنوان دیتا داخل این دیتابیس بوده اند الان بصورت اسکریپت در جملات اینزرت استفاده شده اند و چون Collation ای که استفاده شده برای فارسی بوده مشکلی که پیش میاد اینجاست که وقتی این اسکریپت اجرا میشه mysql نمیتونه تشخیص بده که این فرمت دیتا هست و خطای سینتکس می گیره.
در مورد تصحیح فایل هم فکر نمی کنم عملی باشه چون مسلما دیتاهای بسیار زیادی داره و حجم زیادی و کار بسیار وقتگیر و غیرمعقولیه که دستی اسکرپت ها اصلاح بشن!
نمی دونم منظورم رو متوجه شدید یا نه؟

در چنین موردی خیلی بهتر بود از کل فایل های دیتابیس توی شاخه مربوط به خودش توی mysql کپی تهیه می کردند.
و الان برای بازیابی فقط فایل ها رو به همون شاخه برمی گردوندن.

--- یه تشکر اساسی هم داشته باشم که تا الان اینقدر حوصله به خرج داده اید و مرحله به مرحله اموزش داده اید. راستش رو اعتراف کنم که این فایل باعث شد خیلی چیزها از MySQL توسط شما یاد بگیرم.
یه دعا هم بکنم: انشا الله هیچ وقت بعه مشکل بر نخوری و اگر هم بر خوردی سریع مشکلت حل بشه.
با تشکر فراوان.

ولی اینکه الان چه باید کرد به نظر من اگه هیچ نسخه ای از فایل ها موجود نیست و فقط همین فایل بک آپ رو دارید باید با همون دیتاهای نصفه نیمه بسازید خلاصه از هیچی بهتره!

البته شاید راههای دیگری هم باشه که اگه دوستان بلد باشند خوشحال میشم من هم استفاده خواهم کرد.
دقیقا" حرف شما درسته. این همون مشکل اساسیه که من دارم. چند بار خواستم کدی ( برنامه با #C) بنویسم که این رو تصحیح کنه ولی الگوی درستی به ذهنم نرسید.:گیج:

internet
شنبه 05 خرداد 1386, 13:18 عصر
شما فایل مربوط به دیتابیس رو که می خواهید ریستور کنی بزار توی پوشه
Mysql/bin
به صورت filename.sql
یعنی فشرده نباشه
بعد یک دیتابیس خالی ایجاد کن
اون دستوری که نمی تونه و ارور می ده رو باید یه آیتم بهش اضافه کنی که دیتابیس دیگه ارور نده و به راحتی ریستور بشه :
mysql -u(database user name) -p(database password) --force (database name) < (sql filename)

شما اگه این force-- رو به اون خط فرمان اضافه کنی مشکلت حل می شه