Bagaimana saya bisa membuat cadangan struktur tabel tetapi BUKAN datanya di MySQL

20

Saya menggunakan Administrator MySQL untuk membuat cadangan basis data saya. Saya dapat dengan sempurna mencadangkan seluruh database dengan semua tabelnya. Ada beberapa tabel yang ukurannya sangat besar jadi saya bertanya-tanya apakah saya hanya bisa mencadangkan struktur tabel (hanya elemen mereka) tetapi tidak data mereka.

Andrew Schulman
sumber

Jawaban:

40

Gunakan --no-datasakelar dengan mysqldump untuk memberitahukannya agar tidak membuang data, hanya struktur tabel.

Ini akan menampilkan pernyataan CREATE TABLE untuk tabel.

Sesuatu seperti ini

mysqldump --no-data -h localhost -u root -ppassword mydatabase > mydatabase_backup.sql

Untuk menargetkan tabel tertentu, masukkan setelah nama database.

mysqldump --no-data -h localhost -u root -ppassword mydatabase table1 table2 > mydatabase_backup.sql

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_no-data

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

LukeR
sumber
+1 terlihat benar.
David Pashley
Terima kasih banyak, LukeR. Saya bisa mengaturnya. Pada saat penulisan ini saya bahkan tidak tahu apa-apa tentang mysqldump tetapi saya bisa menyelesaikan masalah dengan saklar --no-data. Kemudian saya juga menemukan di Administrator MySQL "CREATE SCRIPT" dari tabel itu sehingga saya bisa menyelesaikan masalah ini dengan alternatif ini juga.
3

seperti yang dikatakan LukeR, opsi --no-data ke mysqldump akan melakukan apa yang Anda inginkan.

untuk menambah itu, inilah skrip cadangan yang saya tulis yang membuang semua database mysql ke file teks biasa, dan membuat file dump terpisah untuk setiap skema tabel dan data basis data (sangat umum untuk ingin mengembalikan atau membuat tabel pada server mysql lain TANPA data, dan itu jauh lebih mudah dilakukan ketika Anda sudah memiliki file kecil hanya dengan perintah CREATE TABLE / CREATE INDEX dll)

#! / bin / bash

# backup-mysql.sh
#
# Craig Sanders <[email protected]>
# skrip ini ada dalam domain publik. lakukan apapun yang kamu mau dengannya.

MYUSER = "USERNAME"
MYPWD = "PASSWD"

ARGS = "- transaksi tunggal --flush-logs - masukkan-lengkap"

DATABASES = $ (mysql -D mysql --skip-column-names -B -e 'tampilkan basis data;' | egrep -v 'information_schema');


BACKUPDIR = / var / backups / mysql

TAHUN = $ (tanggal + "% Y")
BULAN = $ (tanggal + "% m")
HARI = $ (tanggal + "% d")

DATE = "$ TAHUN- $ BULAN / $ TAHUN- $ BULAN- $ HARI"

mkdir -p $ BACKUPDIR / $ DATE
cd $ BACKUPDIR / $ DATE

untuk saya dalam $ DATABASES; melakukan
  echo -n "mencadangkan $ i: skema ..."
  mysqldump $ ARGS --tidak ada data -u $ MYUSER -p $ MYPWD $ i> $ i.schema.sql

  echo -n "data ..."
  mysqldump $ ARGS --skip-opt --no-create-db --no-create-info -u $ MYUSER -p $ MYPWD $ i> $ i.data.sql

  echo -n "mengompresi ..."
  gzip -9fq $ i.schema.sql $ i.data.sql
  gema "selesai."
selesai

# hapus file cadangan yang lebih lama dari 30 hari
TUA = $ (temukan $ BACKUPDIR -type d -mtime +30)
jika [-n "$ OLD"]; kemudian
        echo menghapus file cadangan lama: $ OLD
        echo $ OLD | xargs rm -rfv
fi
cas
sumber
Terima kasih banyak, Craig atas jawaban Anda! Saya hanya mengambil jawaban LukeR seperti yang pertama. Terima kasih untuk skripnya, ini referensi yang bagus.
Bolehkah saya menyarankan menambahkan --routinesskrip skema?
Jonathan
0

Anda juga dapat melakukan ini secara manual melalui mysqlantarmuka baris perintah dengan melakukan DESCRIBE <tablename>dan menyalin / menempelkan hasilnya.

warren
sumber
DESCRIBE tidak akan memberi Anda sesuatu yang dapat Anda salin dan tempel. SHOW CREATE TABEL akan.
David Pashley
itu tidak dump apa pernyataan CREATE akan perlu, tetapi tidak menunjukkan jenis kolom dan hubungan
warren