it-swarm.asia

استعادة الجدول من .frm وملف .ibd؟

لقد قمت مسبقًا بحفظ نسخة من الدليل/var/lib/mysql/ddms ("ddms" هو اسم المخطط). الآن قمت بتثبيت MySQL جديد على Ubuntu 10.04.3 LTS عن طريق تشغيل apt-get install mysql-server ، أعتقد أنه تم تثبيت الإصدار 5.1. بعد نسخ دليل ddms تحت/var/lib/mysql ، تعمل بعض جداوله بشكل جيد ، وهي الجداول التي تحتوي على مجموعة مقترنة من ثلاثة ملفات: ملف .frm ، ملف .MYD وملف .MYI.

ومع ذلك ، هناك جدولين بمجموعة مختلفة من الملفات: ملف .frm وملف .ibd. لم يظهر هذان الجدولان في قائمة الجداول في phpMyAdmin. عندما أنظر إلى سجل الأخطاء ، يقول:

[ERROR] Cannot find or open table ddms/dictionary_item from
the internal data dictionary of InnoDB though the .frm file for the
table exists. Maybe you have deleted and recreated InnoDB data
files but have forgotten to delete the corresponding .frm files
of InnoDB tables, or you have moved .frm files to another database?
or, the table contains indexes that this version of the engine
doesn't support.

الرجاء المساعدة في استعادة هذين الجدولين. شكر.

38
Tong Wang

لا يمكن نسخ جداول InnoDB بنفس الطريقة التي يمكن بها نسخ جداول MyISAM.

مجرد نسخ ملفات .frm و .ibd من موقع إلى آخر يطلب مشكلة. يعد نسخ ملف .frm و .ibd لجدول InnoDB أمرًا جيدًا فقط إذا وفقط إذا كان بإمكانك ضمان تطابق معرف مساحة الجدول لملف .ibd تمامًا مع إدخال معرف مساحة الجدول في البيانات الوصفية لملف ibdata1 .

كتبت مقالتين في DBA StackExchange حول مفهوم معرف مساحة الجدول هذا

في ما يلي رابط ممتاز حول كيفية إعادة إرفاق أي ملف .ibd إلى ibdata1 في حالة عدم تطابق معرفات مساحات الجداول: http://www.chriscalender.com/؟tag=innodb-error-tablespace-id-in-file . بعد قراءة هذا ، يجب أن تدرك على الفور أن نسخ ملفات .ibd هو مجرد مجنون.

يمكنك تطبيق الاقتراحات من رابط تقويم كريس ، أو يمكنك العودة إلى التثبيت القديم لـ mysql ، وبدء تشغيل mysql ، ثم mysqldump قاعدة البيانات ddms. بعد ذلك ، قم باستيراد هذا الخلية إلى مثيل mysql الجديد. ثق بي ، سيكون هذا أسهل بكثير.

38
RolandoMySQLDBA

لقد واجهت مؤخرا نفس المشكلة. فيما يلي الخطوات التي استخدمتها لحلها دون الاضطرار إلى العبث بمعرف مساحة الجدول كما يذكر RolandoMySQLDBA أعلاه. أنا على جهاز Mac ، لذلك استخدمت MAMP من أجل استعادة قاعدة البيانات إلى نقطة يمكنني تصديرها في ملف تفريغ MySQL.

يمكنك قراءة منشور المدونة بالكامل حول هذا الموضوع هنا: http://www.quora.com/Jordan-Ryan/Web-Dev/How-to-Recover-innoDB-MySQL-files-using-MAMP-on -أ-ماك

يجب أن تمتلك:

-بداتا 1

-ib_logfile0

-ib_logfile1

- ملفات FRM من مجلد mysql_database

- تثبيت جديد لبرنامج MAMP/MAMP Pro الذي ترغب في تدميره (إذا لزم الأمر)

  1. SSH في خادم الويب الخاص بك (مطور ، إنتاج ، لا فرق) وتصفح إلى مجلد mysql الخاص بك (كان المنجم في/var/lib/mysql لتثبيت Plesk على Linux)
  2. ضغط مجلد الخلية
  3. قم بتنزيل أرشيف مجلد mysql والذي يجب أن يحتوي على جميع قواعد بيانات mySQL ، سواء MyISAM أو innoDB (يمكنك scp هذا الملف ، أو نقله إلى دليل قابل للتنزيل ، إذا لزم الأمر)
  4. تثبيت MAMP (Mac ، Apache ، MySQL ، PHP)
  5. تصفح إلى/Applications/MAMP/db/mysql /
  6. النسخ الاحتياطي/التطبيقات/MAMP/ديسيبل/الخلية إلى أرشيف مضغوط (فقط في حالة)
  7. انسخ في جميع المجلدات والملفات المدرجة في أرشيف مجلد mysql من خادم الإنتاج (بيئة mt Plesk في حالتي) EXCEPT لا تستبدل:

    -/Applications/MAMP/db/mysql/mysql /

    -/Applications/MAMP/db/mysql/mysql_upgrade_info

    -/Applications/MAMP/db/mysql/performance_schema

  8. وفويلا ، يجب أن تكون الآن قادرًا على الوصول إلى قواعد البيانات من phpMyAdmin ، يا لها من راحة!

لكننا لم ننتهي ، فأنت الآن بحاجة إلى إجراء mysqldump لاستعادة هذه الملفات إلى بيئة الإنتاج الخاصة بك ، وانتهت مهلة واجهة phpmyadmin لقواعد البيانات الكبيرة. اتبع الخطوات هنا:

http://nickhardeman.com/308/export-import-large-database-using-mamp-with-terminal/

نسخ أدناه كمرجع. لاحظ أنه في تثبيت MAMP الافتراضي ، تكون كلمة المرور "جذر".

كيفية تشغيل mysqldump لـ MAMP باستخدام Terminal

قاعدة بيانات التصدير من MAMP [1]

الخطوة الأولى: افتح نافذة طرفية جديدة

الخطوة الثانية: انتقل إلى تثبيت MAMP بإدخال السطر التالي في الطرفية cd/apps/MAMP/library/bin اضغط على مفتاح الإدخال

الخطوة الثالثة: اكتب أمر التفريغ ./mysqldump -u [USERNAME] -p [DATA_BASENAME]> [PATH_TO_FILE] اضغط على مفتاح الإدخال

مثال:

./mysqldump -u root -p wp_database > /Applications/MAMP/htdocs/symposium10_wp/wp_db_onezero.sql

نصيحة سريعة: للانتقال إلى مجلد بسرعة ، يمكنك سحب المجلد إلى نافذة المحطة الطرفية وسيكتب موقع المجلد. لقد كان يومًا رائعًا عندما أراني شخص ما هذا.

الخطوة الرابعة: يجب أن يظهر هذا السطر من النص بعد الضغط على Enter أدخل كلمة المرور: لذا خمن ما ، اكتب كلمة المرور الخاصة بك ، ضع في اعتبارك أن الحروف لن تظهر ، ولكن هناك اضغط على مفتاح الدخول

الخطوة الخامسة: تحقق من مكان تخزين ملفك ، إذا كان موجودًا ، النجاح الآن يمكنك استيراد قاعدة البيانات ، التي سيتم توضيحها بعد ذلك.

الآن بعد أن قمت بتصدير قاعدة بيانات mysql الخاصة بك ، يمكنك استيرادها في بيئة الإنتاج.

20
jordan8037310

لقد استعدت ملفات MySQL 5.5 * .ibd و * .frm باستخدام MySQL Utilites و MariaDB 10.

1) إنشاء إنشاء SQL.
يمكنك الحصول على إنشاء sql الخاص بك من ملف frm. يجب عليك استخدام: https://dev.mysql.com/doc/mysql-utilities/1.5/en/mysqlfrm.html

Shell> mysqlfrm --server = root: pass @ localhost: 3306 c:\MY\t1.frm - -بورت = 3310

طريقة أخرى قد يكون لديك إنشاء sql الخاص بك.

2) إنشاء جداولك
إنشاء الجداول الخاصة بك على قاعدة البيانات.

3) تغيير الجدول xxx تجاهل مساحة الجدول
تجاهل الجداول التي تريد استبدال ملفات * .ibd الخاصة بك.

4) انسخ ملفات * .ibd (MySQL أو MariaDB) إلى مسار بيانات MariaDB
أولاً ، أحاول استخدام MySQL 5.5 و 5.6 لإعادة الاستعادة ، ولكن تعطل قاعدة البيانات ويتوقف على الفور عن الخطأ المعطل لمعرف مساحة الجدول. ( خطأ 1030 (HY000): حصلت على خطأ -1 من محرك التخزين)
بعد أن استخدمت MariaDB 10.1.8 ، واستردت بياناتي بنجاح.

5) تبديل مساحة جدول استيراد xxx جدول
عند تشغيل هذا البيان ، يحذر MariaDB من الملف ولكن ليس من المهم استرداد البيانات الخاصة بك :) لا تزال قاعدة البيانات مستمرة ويمكنك رؤية بياناتك.

آمل أن تكون هذه المعلومات مفيدة لك.

15
Ecd

لقد واجهت نفس المشكلة بالضبط فقط وجود الملفات كنسخة احتياطية.

ما فعلته لحلها هو نسخ ملفات قاعدة البيانات إلى/var/lib/mysql/yourdb و ibdata1 التي يتم وضعها في/var/lib/mysql.

تمكنت بعد ذلك من التحقق من إمكانية الوصول إلى الجداول mysql -u root -p dbname والاستعلام عن بعض الجداول التي كانت تالفة سابقًا.

قمت بتفريغ قاعدة البيانات بعد ذلك باستخدام mysqldump -u root -p [root_password] [database_name]> dumpfilename.sql

3
Tue

إذا كنت تستخدم MAMP ولا يمكنك تشغيل MySQL بعد نسخ ملفاتك ، أضع innodb_force_recovery = 2 في داخل my.ini ثم تمكنت من الحصول على الخلية لإطلاق وتصدير ديسيبل.

2
Peter Wakeman

إذا كنت قادرًا على استعادة ملف * .ibd إلى خادم MySQL الأصلي ، فلا تنسَ استعادة حقوق الوصول إلى الملف أيضًا. في حالتي (MySQL8 على CentOS7) ، قمت باستعادة الملف إلى /var/lib/mysql/db/tablename.ibd وتشغيله:

chown mysql tablename.ibd
chgrp mysql tablename.ibd
chmod 0640 tablename.ibd

قبل إصلاح حقوق الوصول ، أدى الوصول إلى الجدول إلى حدوث خطأ "انتهى خادم MySQL 2006". بعد إصلاح حقوق الوصول ، عمل الجدول (حتى بدون إعادة تشغيل خدمة mysqld).

1
Samuraj

أريد فقط إضافة شيء آخر لمستخدمي macos El Capitan. أدوات MySQL غير مدعومة لهذا الإصدار ، لذا فإن الأمر mysqlfrm غير مفيد. ما فعلته هو استعادة هياكل طاولتي باستخدام dbsake كما هو موضح في هذا الرابط: https://www.percona.com/blog/2015/12/16/recovering-table-structure-from-frm-files- باستخدام-dbsake /

كل ما عليك فعله هو تثبيت dbsake:

# curl -s http://get.dbsake.net > dbsake
# chmod u+x dbsake

ثم استخدم الأمر frmdump وقم بتوفير مسار لملف .frm الخاص بك:

# ./dbsake frmdump /var/lib/mysql/sakila/staff.frm

ستحصل على بيان إنشاء. بمجرد القيام بذلك ، اتبعت ببساطة الخطوات من 2 إلى 5 التي سبق ذكرها بواسطةEcd. آمل أن يساعد شخص ما.

0
user2804064

أنا حقا أقدر Ecd. ما عمل لي:

1 .- كان لدي نسخة احتياطية من القاعدة قبل بضعة أشهر وهذا ساعدني على رفع هذه النسخة الاحتياطية في xampp في Windows 10 وإنشاء الجداول للحصول على الهيكل (التكوين: Windows 10، xampp-windows-x64-7.1.30-5-VC14) ملف التكوين mysql my.ini في النهاية

NOTE: Some tables did not have ROW_FORMAT = COMPACT, so I went to operations on each 
    table and changed it manually.
    (If I did not do that, an error appeared and I did not let the import).

NOTE2: I had the backup of months ago but it should also work by first recovering 
    the structure of the .frm files in case of not having a backup at hand.
    (You can try this link:
    https://www.percona.com/blog/2014/01/02/recover-table-structure-frm-files-mysql- 
    utilities/)

2 .- بعد تشغيل قاعدة البيانات القديمة ، تابعت تنفيذ تغيير مساحة جدول تجاهل xxx جدول لكل جدول في قاعدة البيانات التي أردت استردادها ، ثم ملفات .ibd لمجلد البيانات في C:/تم حذف xampp/mysql/data/system (في هذه الحالة هذا هو المسار)

.- تابعت نسخ ملفات .ibd من قاعدة البيانات التي أردت استردادها إلى مجلد xampp لقاعدة البيانات القديمة

4 .- بعد نسخ الملفات ، تشغيل: تغيير مساحة جدول استيراد xxx جدول لكل جدول في قاعدة البيانات ، سيظهر تحذير ولكننا سوف نتجاهله ، سيتم تحميل البيانات في الجدول ويمكن تم تصديرها لاحقًا.

5 .- قم بتصدير قاعدة البيانات بالكامل إلى ملف sql وتابع بناءها في الإنتاج والنجاح!

# Example MySQL config file for small systems.
#
# This is for a system with little memory (<= 64M) where MySQL is only used
# from time to time and it's important that the mysqld daemon
# doesn't use much resources.
#
# You can copy this file to
# C:/xampp/mysql/bin/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is C:/xampp/mysql/data) or
# ~/.my.cnf to set user-specific options.
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients
[client] 
# password       = your_password 
port            = 3306 
socket          = "C:/xampp/mysql/mysql.sock"


# Here follows entries for some specific programs 

# The MySQL server
[mysqld]
port= 3306
socket = "C:/xampp/mysql/mysql.sock"
basedir = "C:/xampp/mysql" 
tmpdir = "C:/xampp/tmp" 
datadir = "C:/xampp/mysql/data"
pid_file = "mysql.pid"
# enable-named-pipe
key_buffer = 160M
max_allowed_packet = 300M
sort_buffer_size = 1204K
net_buffer_length = 80K
read_buffer_size = 512K
read_rnd_buffer_size = 1024K
myisam_sort_buffer_size = 8M
log_error = "mysql_error.log"

# Change here for bind listening
# bind-address="127.0.0.1" 
# bind-address = ::1          # for ipv6

# Where do all the plugins live
plugin_dir = "C:/xampp/mysql/lib/plugin/" 

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same Host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
# 
# commented in by lampp security
#skip-networking
#skip-federated

# Replication Master Server (default)
# binary logging is required for replication
# log-bin deactivated by default since XAMPP 1.4.11
#log-bin=mysql-bin

# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-Host is not set
# but will not function as a master if omitted
server-id   = 1

# Replication Slave (comment out master section to use this)
#
# To configure this Host as a replication slave, you can choose between
# two methods :
#
# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
#    the syntax is:
#
#    CHANGE MASTER TO MASTER_Host=<Host>, MASTER_PORT=<port>,
#    MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
#    where you replace <Host>, <user>, <password> by quoted strings and
#    <port> by the master's port number (3306 by default).
#
#    Example:
#
#    CHANGE MASTER TO MASTER_Host='125.564.12.1', MASTER_PORT=3306,
#    MASTER_USER='joe', MASTER_PASSWORD='secret';
#
# OR
#
# 2) Set the variables below. However, in case you choose this method, then
#    start replication for the first time (even unsuccessfully, for example
#    if you mistyped the password in master-password and the slave fails to
#    connect), the slave will create a master.info file, and any later
#    change in this file to the variables' values below will be ignored and
#    overridden by the content of the master.info file, unless you shutdown
#    the slave server, delete master.info and restart the slaver server.
#    For that reason, you may want to leave the lines below untouched
#    (commented) and instead use CHANGE MASTER TO (see above)
#
# required unique id between 2 and 2^32 - 1
# (and different from the master)
# defaults to 2 if master-Host is set
# but will not function as a slave if omitted
#server-id       = 2
#
# The replication master for this slave - required
#master-Host     =   <hostname>
#
# The username the slave will use for authentication when connecting
# to the master - required
#master-user     =   <username>
#
# The password the slave will authenticate with when connecting to
# the master - required
#master-password =   <password>
#
# The port the master is listening on.
# optional - defaults to 3306
#master-port     =  <port>
#
# binary logging - not required for slaves, but recommended
#log-bin=mysql-bin


# Point the following paths to different dedicated disks
#tmpdir = "C:/xampp/tmp"
#log-update = /path-to-dedicated-directory/hostname

# Uncomment the following if you are using BDB tables
#bdb_cache_size = 40M
#bdb_max_lock = 10000

# Comment the following if you are using InnoDB tables
#skip-innodb
innodb_data_home_dir = "C:/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "C:/xampp/mysql/data"
#innodb_log_Arch_dir = "C:/xampp/mysql/data"
## You can set .._buffer_pool_size up to 50 - 80 %
## of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M
## Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 50M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 600

## UTF 8 Settings
#init-connect=\'SET NAMES utf8\'
#collation_server=utf8_unicode_ci
#character_set_server=utf8
#skip-character-set-client-handshake
#character_sets-dir="C:/xampp/mysql/share/charsets"
sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION
log_bin_trust_function_creators = 1

[mysqldump]
quick
max_allowed_packet = 160M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

آمل أن يساعد شخص لديه هذا الوضع ، تحياتي.

الإنجليزية مقدمة من Google

0
Yersskit

جمعت منشورات من مواضيع مشابهة (لم يتم نشر إجاباتها هنا):

الحل 1: https://dba.stackexchange.com/a/59978

الحل 2: https://dba.stackexchange.com/a/71785 (+ مشاركة أخرى هناك)

الحل 3: مجموعة الاسترداد للجداول: https://twindb.com/how-to-recover-innodb-dictionary/

الحل 4: استعادة قاعدة بيانات MySQL من مجلد البيانات بدون ibdata1 من ملفات ibd

الحل 5: استخدام الأمر mysqlfrm

الحل 6: https://dba.stackexchange.com/a/159001

الحل 7: https://dba.stackexchange.com/a/14457

0
T.Todua