خانه » بلاگ » باز گردانی جدول های دیتابیس از روی فایل frm

باز گردانی جدول های دیتابیس از روی فایل frm

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

فایل FRM اصلا چیه؟

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

به طور مثال برای نمایش فایل های frm مربوط به دیتابیس phpmyadmin دستور زیر را تایپ کنید:

 ls /var/lib/mysql/phpmyadmin/

همچین خروجی رو می بینید.

لیست فایل های frm مربوط به دیتابیس phpmyadmin

ویژگی فایل های frm, myi,ibdata, ibd مربوط به هر پایگاه داده:

  • اطلاعات جدول و یا پایگاه داده ای که به هر دلیلی از بین رفته و می توان بازیابی و ترمیم کرد
  • می توان همه ای ویژگی های جدول مانند کلید اصلی،اندکس ها،اینام ها و اطلاعات را بازیابی کرد

ابتدا نرم فزار mysql utilities را از طریق این لینک دانلود کنید

MySQL Product Archives

در ضمن می توانید از نرم فزار Aryson MySQL Database Repair نیز استفاده کنید

بعد دانلود نصب برای بازگرانی جدول های از این دستور استفاده می کنیم

برای مثال ما اطلاعات جدول کاربر ها رو بازیابی می کنیم.

mysqlfrm--server=root@localhost:3306F:/data/oldfile/users.frmf:/data/oldfile/users.txt--dignostic--port=3307-vvv--user=root 

ما این مثال یک جدول ایجاد می کنیم و بعد از نوشتن ساختار جدول رو به ما می ده که این شکلی می شه

CREATE TABLE  `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `family` varchar(255) DEFAULT NULL,
  `mobile` varchar(255) DEFAULT NULL,
UNIQUE KEY  users_invitation_code_unique` (`invitation_code`(255))DEFAULT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY `PRIMARY` (`id`),
UNIQUE KEY `users_invitation_code_unique  (`invitation_code`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ; 

که اخرش باید این اضافه کنیم

ROW_FORMAT=DYNAMIC;

که ساختار به این شکل می شه

CREATE TABLE  `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `family` varchar(255) DEFAULT NULL,
  `mobile` varchar(255) DEFAULT NULL,
UNIQUE KEY  users_invitation_code_unique` (`invitation_code`(255))DEFAULT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY `PRIMARY` (`id`),
UNIQUE KEY `users_invitation_code_unique  (`invitation_code`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4  ROW_FORMAT=DYNAMIC;

حال این کد ها رو داخل مای اس کیو ال اجرا می کنیم ، جدول کاربران ایجاد می شود بعد از ایجاد شدن به مسیر زیر می ریم

mysql/data/YOURDATABASE/

در این مسیر دو تا فایل ایجاد شده به نام های

users.frm
users.ibd

دستور زیر می زنمی که

 ALTER TABLE users DISCARD TABLESPACE;

بعد فایل های users.ibd رو کپی می کنید بعد از کپی کردن حال این دستور را تایپ کنید

 ALTER TABLE users IMPORT TABLESPACE;

تبریک می گم همه ای فایلها ی شما بازگردانده شد

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

import mysql.connector
mydb = mysl.connector.connect(
  host="localhost",
  user="root",
  passwd="",
  database="karmentodb"
)
mycursor = mydb.cursor()`

mycursor.execute("SHOW TABLES")

tables= mycursor.fetchall()
i=0
for table  in tables:
    i=i+1
    #mycursor.execute(f"ALTER TABLE {list(table)[0]} IMPORT TABLESPACE;")
    if(i>61):
        mycursor.execute(f"ALTER TABLE {list(table)[0]} IMPORT TABLESPACE;")
        print(f"   ITEM {i} -- {list(table)[0]} IMPORT TABLESPACE;")`

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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.