ฉันใช้ผู้ดูแลระบบ MySQL เพื่อทำการสำรองฐานข้อมูลของฉัน ฉันสามารถสำรองฐานข้อมูลทั้งหมดได้อย่างสมบูรณ์แบบด้วยตารางทั้งหมด มีบางตารางที่มีขนาดใหญ่มากดังนั้นฉันสงสัยว่าฉันสามารถสำรองโครงสร้างของตาราง (เฉพาะองค์ประกอบของพวกเขา) แต่ไม่ใช่ข้อมูลของพวกเขา
ฉันใช้ผู้ดูแลระบบ MySQL เพื่อทำการสำรองฐานข้อมูลของฉัน ฉันสามารถสำรองฐานข้อมูลทั้งหมดได้อย่างสมบูรณ์แบบด้วยตารางทั้งหมด มีบางตารางที่มีขนาดใหญ่มากดังนั้นฉันสงสัยว่าฉันสามารถสำรองโครงสร้างของตาราง (เฉพาะองค์ประกอบของพวกเขา) แต่ไม่ใช่ข้อมูลของพวกเขา
คำตอบ:
ใช้--no-dataสวิตช์กับ mysqldump เพื่อบอกว่าจะไม่ถ่ายโอนข้อมูลเพียงโครงสร้างตาราง
สิ่งนี้จะแสดงผลคำสั่ง CREATE TABLE สำหรับตาราง
บางสิ่งเช่นนี้
mysqldump --no-data -h localhost -u root -ppassword mydatabase > mydatabase_backup.sql
หากต้องการกำหนดเป้าหมายตารางเฉพาะให้ป้อนพวกเขาหลังชื่อฐานข้อมูล
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
ดังที่ LukeR กล่าวว่าตัวเลือก --no-data ของ mysqldump จะทำสิ่งที่คุณต้องการ
เพื่อเพิ่มที่นี่เป็นสคริปต์สำรองฉันเขียนที่ทิ้งฐานข้อมูล mysql ทั้งหมดไปยังไฟล์ข้อความธรรมดาและสร้างการถ่ายโอนไฟล์แยกต่างหากสำหรับตาราง schema และฐานข้อมูลของแต่ละฐานข้อมูล (เป็นเรื่องปกติที่ต้องการกู้คืนหรือสร้างตารางบนเซิร์ฟเวอร์ mysql อื่น ข้อมูลและง่ายมากที่จะทำเมื่อคุณมีไฟล์ขนาดเล็กที่มีเพียงคำสั่ง CREATE TABLE / CREATE INDEX เป็นต้น)
#! / bin / ทุบตี
# backup-mysql.sh
#
# Craig Sanders <cas@taz.net.au>
# สคริปต์นี้อยู่ในโดเมนสาธารณะ ทำสิ่งที่คุณต้องการด้วย
MYUSER = "ชื่อผู้ใช้"
MYPWD = "PASSWD"
ARGS = "- การทำรายการเดียว - ล้างบันทึก - การแทรกแบบสมบูรณ์"
DATABASES = $ (mysql -D mysql --skip-column-names -B -e 'แสดงฐานข้อมูล;' | egrep -v 'information_schema');
BackupDir = / var / การสำรองข้อมูล / MySQL
YEAR = $ (วันที่ + "% Y")
MONTH = $ (วันที่ + "% m")
DAY = $ (วันที่ + "% d")
วัน = "$ YEAR- $ ต่อเดือน / $ YEAR- $ MONTH- $ DAY"
mkdir -p $ BACKUPDIR / $ DATE
cd $ BACKUPDIR / $ DATE
สำหรับฉันใน $ DATABASES ทำ
echo -n "สำรองข้อมูล $ i: schema ... "
mysqldump $ ARGS - ไม่มีข้อมูล -u $ MYUSER -p $ MYPWD $ i> $ i.schema.sql
echo -n "data ... "
mysqldump $ ARGS - opt-opt - no-create-db - no-create-info -u $ MYUSER -p $ MYPWD $ i> $ i.data.sql
echo -n "กำลังบีบอัด ... "
gzip -9fq $ i.schema.sql $ i.data.sql
echo "เสร็จสิ้น"
เสร็จแล้ว
# ลบไฟล์สำรองข้อมูลที่เก่ากว่า 30 วัน
OLD = $ (ค้นหา $ BACKUPDIR -type d -mtime +30)
ถ้า [-n "$ OLD"]; แล้วก็
echo ลบไฟล์สำรองข้อมูลเก่า: $ OLD
echo $ OLD | xargs rm -rfv
Fi
--routinesสคริปต์สคีมาหรือไม่
คุณสามารถทำได้ด้วยตนเองผ่านmysqlอินเตอร์เฟสบรรทัดคำสั่งโดยทำDESCRIBE <tablename>และคัดลอก / วางผลลัพธ์