Làm cách nào tôi có thể sao lưu cấu trúc bảng nhưng KHÔNG phải dữ liệu của nó trong MySQL


19

Tôi đang sử dụng MySQL Administrator để sao lưu cơ sở dữ liệu của mình. Tôi hoàn toàn có thể sao lưu toàn bộ cơ sở dữ liệu với tất cả các bảng. Có một số bảng có kích thước rất lớn, vì vậy tôi tự hỏi liệu tôi chỉ có thể sao lưu cấu trúc của các bảng (chỉ các phần tử của chúng) chứ không phải dữ liệu của chúng.

Câu trả lời:


39

Sử dụng công --no-datatắc với mysqldump để bảo nó không đổ dữ liệu, chỉ cấu trúc bảng.

Điều này sẽ xuất ra câu lệnh CREATE TABLE cho các bảng.

Một cái gì đó như thế này

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

Để nhắm mục tiêu các bảng cụ thể, nhập chúng sau tên cơ sở dữ liệu.

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


+1 có vẻ đúng.
David Pashley

Cảm ơn rất nhiều LukeR. Tôi có thể xoay sở với điều đó. Tại thời điểm viết bài tôi thậm chí không biết gì về mysqldump nhưng tôi có thể giải quyết vấn đề với công tắc --no-data. Sau đó, tôi cũng tìm thấy trong Quản trị viên MySQL "TẠO SCRIPT" của bảng đó để tôi có thể giải quyết vấn đề này với giải pháp thay thế này.

3

như LukeR đã nói, tùy chọn --no-data cho mysqldump sẽ làm những gì bạn muốn.

để thêm vào đó, đây là một tập lệnh sao lưu mà tôi đã viết, kết xuất tất cả các cơ sở dữ liệu mysql vào các tệp văn bản thuần túy và tạo các tệp kết xuất riêng cho mỗi lược đồ và dữ liệu bảng của cơ sở dữ liệu (khá phổ biến là muốn khôi phục hoặc tạo các bảng trên máy chủ mysql khác mà KHÔNG CÓ dữ liệu và điều đó dễ thực hiện hơn nhiều khi bạn đã có một tệp nhỏ chỉ bằng các lệnh CREATE TABLE / CREATE INDEX, v.v.)

#! / thùng / bash

# backup-mysql.sh
#
# Craig Sanders <cas@taz.net.au>
# tập lệnh này là trong phạm vi công cộng. làm bất cứ điều gì bạn muốn với nó.

MYUSER = "NGƯỜI DÙNG"
MYPWD = "PASSWD"

ARGS = "- giao dịch đơn --flush-log --complete-insert"

DATABASES = $ (mysql -D mysql --skip-cột-tên -B -e 'hiển thị cơ sở dữ liệu;' | egrep -v 'information_schema');


BACKUPDIR = / var / sao lưu / mysql

NĂM = $ (ngày + "% Y")
THÁNG = $ (ngày + "% m")
NGÀY = $ (ngày + "% d")

NGÀY = "$ NĂM- $ THÁNG / $ NĂM- $ THÁNG- $ NGÀY"

mkdir -p $ BACKUPDIR / $ NGÀY
cd $ BACKUPDIR / $ NGÀY

cho tôi bằng $ CƠ SỞ; làm
  echo -n "sao lưu $ i: lược đồ ..."
  mysqldump $ ARGS - không có dữ liệu -u $ MYUSER -p $ MYPWD $ i> $ i.schema.sql

  echo -n "dữ liệu ..."
  mysqldump $ ARGS --skip-opt --no-create-db --no-create-information -u $ MYUSER -p $ MYPWD $ i> $ i.data.sql

  tiếng vang -n "nén ..."
  gzip -9fq $ i.schema.sql $ i.data.sql
  tiếng vang "xong."
làm xong

# xóa các tệp sao lưu cũ hơn 30 ngày
OLD = $ (tìm $ BACKUPDIR -type d -mtime +30)
nếu [-n "$ OLD"]; sau đó
        echo xóa các tập tin sao lưu cũ: $ OLD
        tiếng vang $ OLD | xargs rm -rfv
fi

Cảm ơn rất nhiều Craig cho câu trả lời của bạn! Tôi chỉ nhận câu trả lời của LukeR như lần đầu tiên. Cảm ơn kịch bản, nó là một tài liệu tham khảo tốt.

Tôi có thể đề nghị thêm --routinesvào tập lệnh lược đồ không?
Jonathan

0

Bạn cũng có thể thực hiện thủ công thông qua mysqlgiao diện dòng lệnh bằng cách thực hiện DESCRIBE <tablename>và sao chép / dán kết quả.


MÔ TẢ sẽ không cung cấp cho bạn một cái gì đó bạn có thể sao chép và dán. HIỂN THỊ TẠO BẢNG sẽ.
David Pashley

nó không phải là một bãi chứa của những gì các câu lệnh CREATE sẽ cần phải có, nhưng nó không loại cột hiển thị và quan hệ
warren
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.