Mengembalikan database MySQL dari file fisik

143

Apakah mungkin untuk mengembalikan database MySQL dari file database fisik. Saya memiliki direktori yang memiliki jenis file berikut:

client.frm
client.MYD
client.MYI

tetapi untuk sekitar 20 tabel lagi.

Saya biasanya menggunakan mysqldump atau alat serupa untuk mendapatkan semuanya dalam 1 file SQL jadi apa cara untuk menangani jenis file ini?

Abdullah Jibaly
sumber
Saya memiliki masalah yang sama: banyak file dengan ekstensi FRM, MYD dan MYI. Saya juga memiliki file ib_logfile0, ib_logfile1 dan ibdata1. Saya tidak dapat mengakses server yang sedang berjalan atau membuat dump. Saya mencoba menjalankan server MySQL baru dan menggunakan file, tetapi saya tidak berhasil ... Apakah ada yang memiliki cara yang jelas?
flo5783

Jawaban:

134

Tabel MySQL MyISAM adalah kombinasi dari tiga file:

  • File FRM adalah definisi tabel.
  • File MYD adalah tempat penyimpanan data aktual.
  • File MYI adalah tempat penyimpanan indeks yang dibuat di atas tabel.

Anda harus dapat memulihkan dengan menyalinnya di folder database Anda (Di linux, lokasi defaultnya adalah /var/lib/mysql/)

Anda harus melakukannya saat server tidak berjalan.

Vincent
sumber
66
ini hanya berlaku untuk tabel MyISAM. InnoDB menyimpan tabel dan indeksnya dalam satu tablespace *, yang secara default terdiri dari 3 file ibdata1, ib_logfile0, dan ib_logfile1. untuk memulihkan database, Anda juga memerlukan file tersebut. * tablespaces per tabel dimungkinkan, tetapi tidak default
ax.
21
Dia bilang dia punya file .frm .myi dan .myd. Saya kemudian berasumsi bahwa itu adalah tabel MyISAM.
Vincent
5
Jawaban yang berharga, tetapi saya harus melangkah lebih jauh agar semuanya berfungsi dengan baik: karena saya harus masuk sebagai root untuk memulihkan file, mysqlpengguna yang menjalankan mysqldproses tidak dapat mengaksesnya. Melakukan chmod -R mysql:mysql .pada direktori data mysql cepat dan mudah, tetapi mencari tahu, sebelum itu, mengapa semua DB resoterd saya sepertinya tidak memiliki tabel membutuhkan waktu lebih lama.
Edurne Pascual
10
herenvardo Saya pikir yang Anda maksud adalah chown bukan chmod
Oliver M Grech
2
Untuk merekap beberapa catatan penting, Anda mungkin harus chownmenyalin file seperti ini:sudo chown -R mysql:mysql /var/lib/mysql
Jacksonkr
53

Dari jawaban @Vicent, saya sudah mengembalikan database MySQL seperti di bawah ini:

Langkah 1. Matikan server Mysql

Langkah 2. Salin database di folder database Anda (di linux, lokasi defaultnya adalah / var / lib / mysql). Pertahankan nama database yang sama, dan nama database yang sama dalam mode mysql.

sudo cp -rf   /mnt/ubuntu_426/var/lib/mysql/database1 /var/lib/mysql/

Langkah 3: Ubah milik sendiri dan ubah mode folder:

sudo chown -R mysql:mysql /var/lib/mysql/database1
sudo chmod -R 660 /var/lib/mysql/database1
sudo chown  mysql:mysql /var/lib/mysql/database1 
sudo chmod 700 /var/lib/mysql/database1

Langkah 4: Salin ibdata1 di folder database Anda

sudo cp /mnt/ubuntu_426/var/lib/mysql/ibdata1 /var/lib/mysql/

sudo chown mysql:mysql /var/lib/mysql/ibdata1

Langkah 5: Salin file ib_logfile0 dan ib_logfile1 di folder database Anda.

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile0 /var/lib/mysql/

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile1 /var/lib/mysql/

Ingat ubah milik sendiri dan ubah root dari file-file itu:

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile0

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile1

atau

sudo chown -R mysql:mysql /var/lib/mysql

Langkah 6 (Opsional): Situs saya memiliki konfigurasi untuk menyimpan file di lokasi tertentu, lalu saya menyalinnya ke lokasi yang sesuai.

Langkah 7: Mulai server Mysql Anda. Semuanya kembali dan nikmati.

Hanya itu saja.

Lihat info lebih lanjut di: https://biolinh.wordpress.com/2017/04/01/restoring-mysql-database-from-physical-files-debianubuntu/

biolinh.dll
sumber
4
1 untuk detail petunjuk langkah demi langkah. Tetapi saya mengedit beberapa pernyataan untuk benar-benar mencerminkan apa yang seharusnya.
Peter
Mendapat Kesalahan # 1932, tidak dapat mengakses data. Basis data muncul, tetapi datanya tidak dapat diakses. Menjalankan XAMPP 7.2.12 di MAC OS X Mojave.
Steve1754a
@ Steve1754a kesalahan dapat terjadi karena berbagai alasan 1. Apakah Anda memindahkan database dari Mac OS ke Mac OS? 2. Silakan periksa izin dari file / data / tabel tersebut
biolinh
Jawaban: 1. Ya; 2. Saya melakukannya. Saya harus membangun kembali DB saya. Tidak dapat menemukan solusi. Moral untuk cerita: selalu membuat cadangan DB. Saya berharap ada cara mudah untuk melakukannya secara otomatis di XAMPP.
Steve1754a
2
Anda menyelamatkan hidup saya
SpongePablo
9

Jika Anda memulihkan folder, jangan lupa untuk memasukkan file ke mysql: mysql

chown -R mysql:mysql /var/lib/mysql-data

jika tidak, Anda akan mendapatkan kesalahan saat mencoba menjatuhkan database atau menambah kolom baru dll ..

dan mulai ulang MySQL

service mysql restart
Joel Davey
sumber
2
ini sebenarnya bukan jawaban atas pertanyaan tetapi sangat membantu.
ryantuck
sebenarnya Anda tidak boleh chown semuanya ke mysql, folder database mysql harus mempertahankan grup root
Galvani
9

Saya memiliki masalah yang sama tetapi tidak berhasil memulihkan database, berdasarkan petunjuk di atas.

Saya hanya dapat memulihkan folder database mysql dari OS Ubuntu saya. Masalah saya adalah bagaimana memulihkan database saya dengan folder data mysql yang tidak dapat dibaca. Jadi saya beralih kembali ke OS win7 untuk lingkungan pengembangan.

* CATATAN Saya memiliki server database yang berjalan di win7 dan saya hanya perlu beberapa file database untuk mengambil dari file yang dipulihkan. Untuk berhasil memulihkan file database dari OS Ubuntu, saya perlu menginstal server database mysql baru (versi yang sama dari OS Ubuntu di OS win7 saya) untuk memulihkan semua yang ada di server database lama.

  1. Buat server database mysql baru versi yang sama dari file yang dipulihkan.

  2. Hentikan server mysql

  3. salin folder yang dipulihkan dan tempel di (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data) database mysql disimpan.

  4. salin file ibdata1 yang terletak di folder terinstal mysql linux dan tempelkan di (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data). Cukup timpa yang ada atau buat cadangan sebelum mengganti.

  5. mulai server mysql dan periksa apakah Anda telah berhasil memulihkan file database.

  6. Untuk menggunakan database yang dipulihkan di server mysql saya yang saat ini digunakan, cukup ekspor database yang dipulihkan dan impor ke server mysql saya yang ada.

Semoga ini akan membantu, karena tidak ada yang berhasil untuk saya.

Ivan Igniter
sumber
1
Metode ini juga bekerja pada ubuntu / debian dengan ibdata1, ib_logfile0, dan ib_logfile1 file dan folder database. pengguna tidak akan disalin, tetapi Anda dapat menambahkan pengguna baru ke database dan membuangnya dengan itu.
bokorben
2

Dengan MySql 5.1 (Win7). Untuk membuat ulang DB (InnoDbs) saya telah mengganti semua konten dari dirs berikut (my.ini params):

datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"
innodb_data_home_dir="C:/MySQL Datafiles/"

Setelah itu saya memulai Layanan MySql dan semuanya berfungsi dengan baik.

sergey.olifirenko
sumber
1

Ya itu! Cukup tambahkan ke folder database Anda (tergantung pada OS) dan jalankan perintah seperti "MySQL Fix Permissions". Ini disimpan kembali database. Lihat juga bahwa izin yang benar ditetapkan pada file juga.

Filip Ekberg
sumber
Saya melakukannya, tetapi saya tidak mengenali tabelnya. Seperti yang saya katakan dalam komentar saya di jawaban sebelumnya.
orezvani
0

Saya pernah menyalin file-file ini ke folder penyimpanan database untuk database mysql yang berfungsi, memulai db dan menunggu untuk "memperbaiki" file, lalu mengekstraknya dengan mysqldump.

Spikolynn
sumber
0

Saya mengalami ini mencoba untuk menghidupkan kembali Docker Container yang tidak sengaja terhapus (MySQL oraclelinux) dari volume buruh pelabuhan yang untungnya tidak dihapus yang memiliki data DB dalam file fisik.

Jadi, yang ingin saya lakukan adalah mengubah data dari file fisik menjadi file yang .sqldapat diimpor untuk membuat ulang container dengan DB dan datanya.

Saya mencoba solusi biolin , tetapi mengalami beberapa [InnoDB] Multiple files found for the same tablespace IDkesalahan, setelah restart. Saya menyadari bahwa melakukan operasi luka terbuka pada folder / file tertentu cukup rumit.

Solusi yang berhasil untuk saya adalah untuk sementara waktu mengubah datadir=masuk my.cnfke folder yang tersedia dan memulai ulang server MySQL. Itu melakukan pekerjaan dengan sempurna!

Aidin
sumber
-1

Dalam kasus saya, cukup menghapus tc.log di / var / lib / mysql sudah cukup untuk memulai mariadb / mysql lagi.

SirJohnFranklin
sumber
ini bukan masalah untuk dapat memulai / memulai ulang server mysql.
Oluwatumbi