View Full Version : پشتیبان گیری و بازیابی پشتیبان از پایگاه داده mysql
h_mohamadi
پنج شنبه 12 بهمن 1391, 14:36 عصر
برنامه ای با زبان دلفی دارم که از پایگاه داده mysql استفاده می کنم
چه روش هایی را برای پشتیبان گیری و بازیابی پشتیبان از پایگاه داده mysql پیشنهاد می کنید
من ابتدا لیست نام جدول ها رو بدست می آورم سپس از دستور زیر استفاده می کنم که البته مشکلش اینکه زمانی که برنامه بصورت شبکه است قادر به ایجاد فایل از کامپیوتر سرور در کامپیوتر کلاینت نیست
select * from t1 into outfile "//t1.text
سعید صابری
پنج شنبه 12 بهمن 1391, 17:58 عصر
البته مشکلش اینکه زمانی که برنامه بصورت شبکه است قادر به ایجاد فایل از کامپیوتر سرور در کامپیوتر کلاینت نیست
قاعدتا باید همین طور باشه!.مدیریت متمرکز است نباید کلاینت بتونه بک آپ و بازگردانی بکنه.مثل در یک شبکه اگه هر کی بخواد پشتیبان گیری کند و هر وقت دلش خواست پشتیبان برگردونه من پشتیبان امروز برمیگردونه یکی دیگه پشتیبان 4 روز پیش و...
برای پشتیبان گیری هم از dump استفاده کنید.دیگه نیاز نیست نام تیبل ها را بدست بیارید و... . فقط نام دیتابیس و رمز و... بهش بدید.
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html
h_mohamadi
شنبه 14 بهمن 1391, 10:22 صبح
ممنون از راهنمایی تون
ولی من می خواهم پشتیبان گیری و بازیابی پشتیبان از داخل برنامه باشد تا هر زمان که مدیر(کاربر اصلی) برنامه خواست این کار را انجام دهد
سعید صابری
شنبه 14 بهمن 1391, 15:04 عصر
از چه زبانی برنامه نویسی استفاده می کنی؟
dump فایل راحت ترین راه و اصولی ترین راه است
Dr.Bronx
شنبه 14 بهمن 1391, 15:41 عصر
این توسط vb.net و MySqlDump
Dim pr As Process
Dim args As New ProcessStartInfo("cmd.exe")
With args
.CreateNoWindow = True
.RedirectStandardInput = True
.RedirectStandardOutput = True
.UseShellExecute = False
.WindowStyle = ProcessWindowStyle.Hidden
End With
pr.StandardInput.WriteLine("mysqldump -h " + ConfigCurrent.SERVER_CURRENT_HOST + " -u " + ConfigCurrent.SERVER_CURRENT_USER + " -p" + ConfigCurrent.SERVER_CURRENT_PASS + " " + DBName + " > " & AddressAndFormat & Convert.ToChar(13)) '/// chr(13) being Enter key.
pr.StandardInput.Close()
pr.CloseMainWindow()
کلیات رو ببینید بعد با delphi راحت پیاده کنید .
توضیحات بیشتر لازم داشتید بفرمایید تا ارایه کنم .
موفق باشید ./
h_mohamadi
یک شنبه 15 بهمن 1391, 13:18 عصر
ممنون از راهنماییتون
البته روی سیستممم dump ندارم اول باید اونو نصب کنم
بعد کدهای شما رو تست کنم
خداکنه که اون طوری که من می خواهم باشه
چون برنامه من طوری نوشته شده که باتوجه به استفاده کاربر ، تعداد جداول تغییر می کنه و کم و زیاد می شه و ثابت نیست و برنامه باید در هر بازگردانی وجود همه جداول رو چک کنه
البته در بعضی موارد ساختار جداول هم تغییر می کند
الان برای بازگردانی ابتدا همه جداول رو حذف می کنم و بعد چک می کنم اطلاعات چه جداولی در فایل پشتیبان وجود دارد اون جداول رو ایجاد می کنم و اطلاعات رو داخل اونها بازگردانی می کنم
سعید صابری
یک شنبه 15 بهمن 1391, 14:56 عصر
dump را نمی خواد نصب کنید وقتی MYSQL SERVER را نصب کنی جزء فایل های کمکی در پوشه Bin وجود دارد.
h_mohamadi
سه شنبه 17 بهمن 1391, 16:58 عصر
ممنون از راهنمایی همه دوستان
با cmd بیرون از برنامه تست کردم خیلی خوب بود
الان فقط با پیاده سازی cmd در دلفی دچار مشکل شدم اگر تونستید راهنمایی ایم کنید
Dr.Bronx
سه شنبه 17 بهمن 1391, 18:12 عصر
با کدوم قسمتش مشکل دارید ؟
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(0, nil, 'cmd.exe', '/C find "320" in.txt > out.txt', nil, SW_HIDE);
Sleep(1000);
Memo1.Lines.LoadFromFile('out.txt');
end;
h_mohamadi
چهارشنبه 18 بهمن 1391, 12:59 عصر
ممنون از راهنمایی همه دوستان مخصوصاDr.Bronx
عزیز
بالاخره بعد از کلی بالا و پایین کردن کدها
تونستم پشتیبان گیری و بازیابی پشتیبان رو با mysqldump و cmd در دلفی اجراکنم
فقط یه مشکل کوچولو هست اگه بازم کمکم کنید ممنون می شم
دیتابیس من بدون پسورد است وقتی کدها رو اجرا می کنم حتما باید cmd رو در حالت show normal قرار داده باشم تا قسمت پرسیدن پسورد مربوط به دیتابیس بیاد و من یک اینتر خالی بزنم وگرنه خروجی ندارم یعنی فایل ایجاد نمی شه
چی کار کنم که این قسمت پرسیدن پسورد برای کاربر برنامه ام نباشه و اینکار درون برنامه و خودکار انجام بشه
ببخشیدها البته فکر کنم این مورد رو باید تو قسمت برنامه نویسی دلفی بپرسم اما چون دوستان تاحالا کمکمم کردند اگر این یه مورد رو هم بگند واقعا شرمندشون می شم
سعید صابری
چهارشنبه 18 بهمن 1391, 14:47 عصر
shellexecute(self.Handle,pchar('open'),
pchar('C:\Program Files\MySQL\MySQL Server 6.0\bin\mysqldump.exe'),
pchar('-u root -p//// -h localhost -R -r "d:\backup.sql" DBNAME'),
pchar('C:\Program Files\MySQL\MySQL Server 6.0\bin'),0);
h_mohamadi
پنج شنبه 19 بهمن 1391, 14:27 عصر
تست کردم ولی جواب نداد
با همین کدی که شما نوشتید تا وقتی که برای قسمت پسورد ////رو نذاشتم کار می کنه ولی پسورد می خواست
به محض اینکه ////رو اضافه می کنم فقط یک فایل خالی می سازه و خطا می دهد
سعید صابری
پنج شنبه 19 بهمن 1391, 22:27 عصر
حالا چرا دیتابیس شما پسورد نداره؟
/// منظورم این بود که پسورد خودت جایگزین /// بکنی نه همینو کپی کنی
Dr.Bronx
جمعه 20 بهمن 1391, 18:12 عصر
آهان . خوب این یک اشتباه عجیب و غریب هست که من هم اول به مشکل خورده بودم .
این قضیه به خاطر یک فاصله اضافی رخ میده
این کد رو ببینید .
mysqldump -h localhost -u root -p9958756a2a5@e26
قسمت -u یک فاصله داره با root
اما -p نباید فاصله داشته باشه با خود پسورد .
اگر فاصله داشته باشه تشخیص نمیده و باید حتما تایید کنید پسورد رو .
موفق باشید ./
h_mohamadi
شنبه 21 بهمن 1391, 10:53 صبح
ممنون
ولی مشکل اینه که پایگاه داده من پسورد نداره و به خاطر یکسری مشکلاتی که برای قسمت های دیگه برنامه ام پیش می یاد نمی تونم برای پایگاه داده ام پسورد بزارم
چی کار کنم که موقع بکاپ گرفتن پسورد نخواد یا لااقل چی کار کنم که قسمت پسورد خواستن را خود برنامه در محیط cmd اینتر بزنه و رد کنه
چون الان این کار رو خودم دستی انجام می دم و برنامه قبل اجرای دستور بکاپ در محیط cmd از من می خواد که پسورد رو وارد کنم و من فقط یک اینتر خالی میزنم و بعد برنامه شروع به بکاپ گیری می کنه
سعید صابری
شنبه 21 بهمن 1391, 10:59 صبح
به خاطر یکسری مشکلاتی که برای قسمت های دیگه برنامه ام پیش می یاد نمی تونم برای پایگاه داده ام پسورد بزارم
میشه بگین چه مشکلاتی؟!
از طریق برنامه کاراکتر enter بفرست نمونه کدش به وفور در بخش دلفی یافت میشه!
Dr.Bronx
شنبه 21 بهمن 1391, 12:33 عصر
پسورد رو بزارید . اما به جای پسورد یک فاصله خالی بزارید .
mysql فاصله هارو trim می کنه
یعنی 1 2 3 فرقی با 321 نمی کنه .
شما هم یک فاصله فقط بزارید حل میشه .
اگر این کار رو کردید و نشد . لطفا کدتون رو بزارید اینجا تا بررسی کنیم .
موفق باشید ./
h_mohamadi
شنبه 21 بهمن 1391, 13:28 عصر
میشه بگین چه مشکلاتی؟!
از طریق برنامه کاراکتر enter بفرست نمونه کدش به وفور در بخش دلفی یافت میشه!
مشکلاتش رو نمی دونم چون این برنامه چند برنامه نویس داره و به من گفته شده پایگاه داده این شرایط رو داره یعنی شرایط پایگاه داده دست من نیست که بخواهم تغییر بدمش
ولی چطوری می تونم به cmdای که توسط برنامه من اجرا شده دسترسی داشته باشم و به اون یک کارکتر رو بفرستم
اگه ممکنه برای من یه نمونه کد برای دسترسی به cmd بزارید چون اگه بتونم دسترسی پیدا کنم مشکلم حل می شه
باتشکر
Dr.Bronx
شنبه 21 بهمن 1391, 13:36 عصر
کاراکتر ۱۳ میشه همون enter
توی vb.net میشه Convert.ToChar(13)
به همون کد اول دقت کنید این کار رو کردم . حالا معادلش در دلفی رو به دست بیارید و ارسال کنید .
حالا اول اون کاری که گفتم رو انجام بدید اگر نشد بعد این کار رو بکنید .
موفق باشید ./
h_mohamadi
شنبه 21 بهمن 1391, 13:42 عصر
پسورد رو بزارید . اما به جای پسورد یک فاصله خالی بزارید .
mysql فاصله هارو trim می کنه
یعنی 1 2 3 فرقی با 321 نمی کنه .
شما هم یک فاصله فقط بزارید حل میشه .
اگر این کار رو کردید و نشد . لطفا کدتون رو بزارید اینجا تا بررسی کنیم .
موفق باشید ./
کاری که گفتید رو انجام دادم یعنی اول یه فاصله گذاشتم باز هم موقع اجرا قسمت پرسیدن پسورد می یاد و من باید یه اینتر خالی بزنم
دفعه دوم اصلا فاصله نذاشتم این بار خطای زیر رو داد
mysqldump: Goterror: 1045: Access denied for user 'root''192.168.0.8 '(using password: Yes) when trying to connect
نمونه کدم همه اینه اگه می شه کمکم کنید
try
Masir_Dump:='F:\myprogram\Database\ntdt6\bin\mysql dump.exe';
Masir_Dump1:='F:\myprogram\Database\ntdt6\bin';
Masir_Bak:='--opt -r '+copy(Masir_Dump,1,2)+'\'+zname+'.sql -uroot -p -h192.168.0.8 mydatabasename';
ShellExecute(0, nil, pchar(Masir_Dump), pchar(Masir_Bak), nil, SW_SHOWNORMAL);
except
ShowMessage('خطا در پشتيبان گيري '+#13+#13+'در زمان ديگري امتحان نماييد');
end;
Dr.Bronx
شنبه 21 بهمن 1391, 14:13 عصر
خوب الان شما کجا اون enter آخر رو می فرستید ؟
یک enter حتما باید آخر خط بزارید .
کدی که اول گذاشته بودم رو ببینید . آخری یک enter فرستاده میشه .
موفق باشید ./
Dr.Bronx
شنبه 21 بهمن 1391, 14:15 عصر
در ضمن -uroot باید فاصله داشته باشه از هم .
h_mohamadi
شنبه 21 بهمن 1391, 15:15 عصر
من مشکلم این است که نمی دانم چطوری باید این کد اینتر را در دلفی برای cmd باز شده بفرستم
می شود بگوئید من باید چگونه این کد را اصلاح کنم که مشکلم حل شود.
وقتی بعد از mydatabasenameکد(13#) char برای اینتر می زارم فایل رو خالی می سازه
با سپاس
h_mohamadi
دوشنبه 23 بهمن 1391, 14:29 عصر
با سلام
بالاخره بعد از کلی جستجو تونستم کد اینتر رو با sendmessage برای cmd بفرستم
با سپاس از راهنمایی همه دوستان
h_mohamadi
یک شنبه 29 بهمن 1391, 16:56 عصر
با سلام
ببخشید ولی یه مشکل بزرگ برام پیش اومده
من فایل پشتیبان از پایگاه داده ام رو از طریق mysqldump ایجاد کردم حالا وقتی می خواهم اون رو در برنامه ام با کد زیر بازگردانی کنم یک صدای بوق شنیده می شود و بازگردانی صورت نمی گیرد
ShellExecute(0, nil, PChar('f:\bin\mysql.exe')
, PChar('-u root -p -h localhost mydatabase1<f:\backupfile.sql ')
, nil, SW_SHOWNORMAL)
من همین کد رو توی cmd و خارج از برنامه اجرا می کنم فایل پشتیبانی بازگردانی می شه و هیچ مشکلی نداره
f:\bin\mysql.exe -u root -p -h localhost mydatabase1<f:\backupfile.sql
لطفا کمک کنید
با سپاس
سعید صابری
جمعه 04 اسفند 1391, 10:46 صبح
کی گفت Mysql.exe؟ ما پس در پست های قبلی واسه کی توضیح دادیم؟
پست شماره 11 همین تاپیک یک بار دقیق بخون
h_mohamadi
شنبه 05 اسفند 1391, 15:18 عصر
کی گفت Mysql.exe؟ ما پس در پست های قبلی واسه کی توضیح دادیم؟
پست شماره 11 همین تاپیک یک بار دقیق بخون
پس فایل های پشتیبانی رو که با mysqldump می گیرید با چی بازگردانی می کنید؟؟؟؟؟؟
من کلی تو اینترنت سایت های ایرانی و خارجی گشتم همشون برای بازگردانی فایل های پشتیبانی که با myqsqldump گرفته می شه از mysql استفاده کردند
به عنوان نمونه این لینک رو ببینید
http://www.tecmint.com/mysql-backup-and-restore-commands-for-database-administration (http://www.tecmint.com/mysql-backup-and-restore-commands-for-database-administration/)
سعید صابری
شنبه 05 اسفند 1391, 19:48 عصر
آها.من هواسم به بک آپ بود
تو که دلفی کار می کنی چرا از محصولات devart استفاده نمی کنی که ما را سکته ندی؟!!!
h_mohamadi
یک شنبه 06 اسفند 1391, 17:13 عصر
آها.من هواسم به بک آپ بود
تو که دلفی کار می کنی چرا از محصولات devart استفاده نمی کنی که ما را سکته ندی؟!!!
شرمنده من هنوز مبتدی ام و نیاز به راهنمایی های شما دارم
این کامپوننت ای که گفتید رو دیدم چه مزیت هایی نسبت به روشی که الان استفاده می کنم دارد
من دموهاش رو تست کردم اون ها هم از dump استفاده می کردند و در بعضی موارد نتونستم جواب درست ازشون بگیرم
راهنمای فارسی یا انگلیسی برای اون سراغ دارید?
سعید صابری
یک شنبه 06 اسفند 1391, 20:33 عصر
راهنمای فارسی را تا حالا ندیدم.شاید باشه.
ولی بهترین کامپوننت کار با بانک های اطلاعاتی است از نظر من .البته در مقایسه اگر اشتباه نکنم در همین سایت انجام شد خیلی از دوستان حرفه ای از این مجموعه کامپوننت استفاده می کنند.
UNIDAC برای اتصال به بانک های مختلف کاربرد داره.مختص mysql هم Mydac هست که اگر تنها از بانک mysql استفاده می کنید من این کامپوننت بهتون پیشنهاد می کنم.
در کل طریقه استفاده اش من ado هست با این تفاوت که یک سری دستورات بهینه سازی شده .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.