-
MySQL Backup and Recovery วันเสาร์ 30/09/2549 - 14:21 — ใช่แล้ว
การสำรองและกู้คืน MySQL
ผู้แต่ง/ผู้แปล: Ye Jinrong (อีเมล: ), ที่มา: http://imysql.cn โปรดระบุผู้แต่ง/ผู้แปลและแหล่งที่มาเมื่อพิมพ์ซ้ำ ไม่สามารถใช้เพื่อวัตถุประสงค์ทางการค้าได้
วันที่: 10/2549
บทความนี้จะกล่าวถึงกลไกการสำรองและการกู้คืนของ MySQL และวิธีการดูแลรักษาตารางข้อมูล รวมถึงตารางหลักสองประเภท: MyISAM และ Innodb เวอร์ชัน MySQL ที่ออกแบบในบทความนี้คือ 5.0.22
เครื่องมือสำรองข้อมูลฟรีที่ MySQL รองรับในปัจจุบัน ได้แก่ mysqldump, mysqlhotcopy คุณยังสามารถใช้ไวยากรณ์ SQL สำหรับการสำรองข้อมูล: BACKUP TABLE หรือ SELECT INTO OUTFILE หรือบันทึกไบนารีสำรอง (binlog) หรือคัดลอกไฟล์ข้อมูลและไฟล์การกำหนดค่าที่เกี่ยวข้องโดยตรง ตาราง MyISAM จะถูกบันทึกเป็นไฟล์ ดังนั้นจึงสามารถสำรองข้อมูลได้หลายวิธีที่กล่าวมาข้างต้น ตารางทั้งหมดใน Innodb จะถูกจัดเก็บไว้ในไฟล์ข้อมูลเดียวกัน ibdata1 (อาจเป็นไฟล์หลายไฟล์หรือไฟล์พื้นที่ตารางอิสระ) ซึ่งค่อนข้างยากในการสำรองข้อมูล โซลูชันฟรีอาจเป็นการคัดลอกไฟล์ข้อมูลและการสำรองข้อมูล binlog หรือใช้ mysqldump .
1.mysqldump
1.1 การสำรองข้อมูล
mysqldump ใช้กลไกการสำรองข้อมูลระดับ SQL โดยจะส่งออกตารางข้อมูลไปยังไฟล์สคริปต์ SQL ซึ่งค่อนข้างเหมาะสมสำหรับการอัพเกรดระหว่าง MySQL เวอร์ชันต่างๆ นี่เป็นวิธีการสำรองข้อมูลที่ใช้บ่อยที่สุด
ตอนนี้เรามาพูดถึงพารามิเตอร์หลักบางส่วนของ mysqldump:
--เข้ากันได้=ชื่อ
มันบอก mysqldump ว่าฐานข้อมูลหรือเซิร์ฟเวอร์ MySQL เวอร์ชันเก่ากว่าที่ข้อมูลที่ส่งออกจะเข้ากันได้ ค่าอาจเป็น ansi, mysql323, mysql40, postgresql, oracle, mssql, db2, maxdb, no_key_options, no_tables_options, no_field_options เป็นต้น หากต้องการใช้หลายค่า ให้คั่นด้วยเครื่องหมายจุลภาค แน่นอนว่ามันไม่ได้รับประกันความเข้ากันได้โดยสมบูรณ์ แต่จะพยายามเข้ากันได้
--สมบูรณ์แทรก -c
ข้อมูลที่ส่งออกใช้วิธีการ INSERT ที่สมบูรณ์ รวมถึงชื่อฟิลด์ นั่นคือค่าทั้งหมดจะถูกเขียนในบรรทัดเดียว การทำเช่นนี้สามารถปรับปรุงประสิทธิภาพการแทรกได้ แต่อาจได้รับผลกระทบจากพารามิเตอร์ max_allowed_packet และทำให้การแทรกล้มเหลว ดังนั้น จึงจำเป็นต้องใช้พารามิเตอร์นี้ด้วยความระมัดระวัง อย่างน้อยฉันไม่แนะนำ
--default-Character-set=charset
ระบุชุดอักขระที่จะใช้เมื่อส่งออกข้อมูล หากตารางข้อมูลไม่ได้ใช้ชุดอักขระ latin1 เริ่มต้น จะต้องระบุตัวเลือกนี้เมื่อส่งออก มิฉะนั้นอักขระที่อ่านไม่ออกจะเกิดขึ้นหลังจากการนำเข้าข้อมูลอีกครั้ง
--disable-keys
บอกให้ mysqldump เพิ่ม /*!40000 ALTER TABLE table DISABLE KEYS */; และ /*!40000 ALTER TABLE table ENABLE KEYS */; เนื่องจากเป็น ดัชนีจะถูกสร้างขึ้นใหม่หลังจากใส่ข้อมูลทั้งหมดแล้ว ตัวเลือกนี้เหมาะสำหรับตาราง MyISAM เท่านั้น
--ขยาย-แทรก = จริง|เท็จ
ตามค่าเริ่มต้น mysqldump จะเปิดโหมด --complete-insert ดังนั้นหากคุณไม่ต้องการใช้ ให้ใช้ตัวเลือกนี้และตั้งค่าเป็นเท็จ
--hex-หยด
ส่งออกฟิลด์สตริงไบนารีโดยใช้รูปแบบเลขฐานสิบหก ต้องใช้ตัวเลือกนี้หากมีข้อมูลไบนารี ประเภทฟิลด์ที่ได้รับผลกระทบคือ BINARY, VARBINARY และ BLOB
--ล็อคทุกตาราง-x
ก่อนเริ่มการส่งออก ให้ส่งคำขอเพื่อล็อกตารางทั้งหมดในฐานข้อมูลทั้งหมดเพื่อให้แน่ใจว่าข้อมูลมีความสอดคล้องกัน นี่คือการล็อกการอ่านทั่วโลกและถูกปิดโดยอัตโนมัติด้วยตัวเลือก --single-transaction และ --lock-tables
--ล็อคตาราง
คล้ายกับ --lock-all-tables แต่จะล็อกตารางข้อมูลที่ส่งออกในปัจจุบัน แทนที่จะล็อกตารางทั้งหมดในฐานข้อมูลพร้อมกัน ตัวเลือกนี้ใช้ได้กับตาราง MyISAM เท่านั้น หากเป็นตาราง Innodb คุณสามารถใช้ตัวเลือก --single-transaction
--no-create-info, -t
ส่งออกเฉพาะข้อมูลโดยไม่ต้องเพิ่มคำสั่ง CREATE TABLE
--ไม่มีข้อมูล-ง
ไม่มีการส่งออกข้อมูล แต่จะส่งออกเฉพาะโครงสร้างตารางฐานข้อมูลเท่านั้น
--เลือก
นี่เป็นเพียงตัวเลือกที่รวดเร็ว เทียบเท่ากับการเพิ่ม --add-drop-tables --add-locking --create-option --disable-keys --extensed-insert --lock-tables --quick --set- ตัวเลือกชุดอักขระ ตัวเลือกนี้ช่วยให้ mysqldump ส่งออกข้อมูลได้อย่างรวดเร็ว และสามารถนำเข้าข้อมูลที่ส่งออกกลับมาได้อย่างรวดเร็ว ตัวเลือกนี้เปิดใช้งานตามค่าเริ่มต้น แต่สามารถปิดใช้งานได้ด้วย --skip-opt โปรดทราบว่าหากคุณรัน mysqldump โดยไม่ระบุตัวเลือก --quick หรือ --opt ชุดผลลัพธ์ทั้งหมดจะถูกวางไว้ในหน่วยความจำ ปัญหาอาจเกิดขึ้นหากคุณส่งออกฐานข้อมูลขนาดใหญ่
--ด่วน-คิว
ตัวเลือกนี้มีประโยชน์เมื่อส่งออกตารางขนาดใหญ่ โดยบังคับให้ mysqldump ส่งออกบันทึกที่ได้รับจากการสอบถามเซิร์ฟเวอร์โดยตรง แทนที่จะดึงบันทึกทั้งหมดและแคชไว้ในหน่วยความจำ
--รูทีน, -R
ส่งออกขั้นตอนการจัดเก็บและฟังก์ชันที่กำหนดเอง
--single-ธุรกรรม
ตัวเลือกนี้จะส่งคำสั่ง BEGIN SQL ก่อนที่จะส่งออกข้อมูล BEGIN จะไม่บล็อกแอปพลิเคชันใดๆ และรับประกันสถานะที่สอดคล้องกันของฐานข้อมูลในระหว่างการส่งออก ใช้งานได้กับตารางธุรกรรมเช่น InnoDB และ BDB เท่านั้น
ตัวเลือกนี้และตัวเลือก --lock-tables เป็นแบบพิเศษร่วมกันเนื่องจาก LOCK TABLES ทำให้ธุรกรรมที่ค้างอยู่ใด ๆ มีความมุ่งมั่นโดยปริยาย
หากต้องการส่งออกตารางขนาดใหญ่ ควรใช้ตัวเลือก --quick ร่วมกัน
--ทริกเกอร์
ส่งออกทริกเกอร์ด้วย ตัวเลือกนี้เปิดใช้งานตามค่าเริ่มต้น ใช้ --skip-triggers เพื่อปิดการใช้งาน
โปรดดูคู่มือสำหรับรายละเอียดของพารามิเตอร์อื่นๆ ฉันมักจะใช้ SQL ต่อไปนี้เพื่อสำรองตาราง MyISAM:
/usr/local/mysql/bin/mysqldump -uyejr -pyejr
--default-Character-set=utf8 --opt --extend-insert=false
--ทริกเกอร์ -R --hex-blob -x db_name > db_name.sql
ใช้ SQL ต่อไปนี้เพื่อสำรองตาราง Innodb:
/usr/local/mysql/bin/mysqldump -uyejr -pyejr
--default-Character-set=utf8 --opt --extend-insert=false
--ทริกเกอร์ -R --hex-blob --single-transaction db_name > db_name.sql
นอกจากนี้ หากคุณต้องการใช้การสำรองข้อมูลออนไลน์ คุณยังสามารถใช้พารามิเตอร์ --master-data ได้ดังต่อไปนี้:
/usr/local/mysql/bin/mysqldump -uyejr -pyejr
--default-Character-set=utf8 --opt --master-data=1
--single-transaction --flush-logs db_name > db_name.sql
โดยจะร้องขอเฉพาะตารางล็อคที่จุดเริ่มต้น จากนั้นรีเฟรช binlog จากนั้นเพิ่มคำสั่ง CHANGE MASTER ให้กับไฟล์ที่ส่งออกเพื่อระบุตำแหน่ง binlog ของการสำรองข้อมูลปัจจุบัน คุณสามารถใช้ได้ วิธีนี้จะทำ
1.2 การคืนค่า ไฟล์ที่สำรองไว้ด้วย mysqldump เป็นสคริปต์ SQL ที่สามารถนำเข้าข้อมูลได้โดยตรง มีสองวิธีในการนำเข้าข้อมูล
ใช้ไคลเอนต์ mysql โดยตรง ตัวอย่างเช่น:
/usr/local/mysql/bin/mysql -uyejr -pyejr db_name < db_name.sql
การใช้ไวยากรณ์ SOURCE จริงๆ แล้วไม่ใช่ไวยากรณ์ SQL มาตรฐาน แต่เป็นฟังก์ชันที่ไคลเอ็นต์ mysql จัดเตรียมไว้ให้ เช่น:
แหล่งที่มา /tmp/db_name.sql;
ที่นี่คุณจะต้องระบุเส้นทางที่แน่นอนของไฟล์ และจะต้องเป็นไฟล์ที่ผู้ใช้ mysqld ที่ทำงานอยู่ (เช่น ไม่มีใคร) มีสิทธิ์ในการอ่าน
2. mysqlhotcopy
2.1 การสำรองข้อมูล
mysqlhotcopy เป็นโปรแกรม PERL ที่เขียนโดย Tim Bunce ใช้ LOCK TABLES, FLUSH TABLES และ cp หรือ scp เพื่อสำรองฐานข้อมูลอย่างรวดเร็ว นี่เป็นวิธีที่เร็วที่สุดในการสำรองฐานข้อมูลหรือตารางเดียว แต่สามารถทำงานได้บนเครื่องที่มีไฟล์ฐานข้อมูล (รวมถึงไฟล์คำจำกัดความของตารางข้อมูล ไฟล์ข้อมูล และไฟล์ดัชนี) เท่านั้น mysqlhotcopy สามารถใช้เพื่อสำรองข้อมูล MyISAM เท่านั้น และจะทำงานบนระบบ Unix-like และ NetWare เท่านั้น
mysqlhotcopy รองรับการคัดลอกหลายฐานข้อมูลในคราวเดียว และยังรองรับนิพจน์ทั่วไปอีกด้วย นี่คือตัวอย่างบางส่วน:
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr
db_name /tmp (เปลี่ยนไดเร็กทอรีฐานข้อมูล db_name
คัดลอกไปที่ /tmp
ลง)
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr
db_name_1 ... db_name_n /tmp
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr
db_name./regex/ /tmp
โปรดดูคู่มือสำหรับการใช้งานโดยละเอียดเพิ่มเติม หรือเรียกคำสั่งต่อไปนี้เพื่อดูความช่วยเหลือของ mysqlhotcopy:
perldoc /usr/local/mysql/bin/mysqlhotcopy.perldoc
โปรดทราบว่าหากคุณต้องการใช้ mysqlhotcopy คุณต้องมีสิทธิ์ SELECT และ RELOAD (เพื่อดำเนินการ FLUSH TABLES) และคุณต้องมีสิทธิ์ในการอ่านไดเร็กทอรี datadir/db_name ด้วย
2.2 คืนค่า
Mysqlhotcopy สำรองไดเร็กทอรีฐานข้อมูลทั้งหมด เมื่อใช้ มันสามารถคัดลอกโดยตรงไปยัง datadir ที่ระบุโดย mysqld (นี่คือ /usr/local/mysql/data/ ในเวลาเดียวกัน ควรให้ความสนใจกับปัญหาการอนุญาต ดังตัวอย่างต่อไปนี้:
root#cp -rf db_name /usr/local/mysql/data/
root#chown -R none:nobody /usr/local/mysql/data/ (เปลี่ยนเจ้าของไดเร็กทอรี db_name เป็น mysqld
ผู้ใช้ที่ทำงานอยู่)
3. การสำรองข้อมูลไวยากรณ์ SQL
3.1 การสำรองข้อมูล
ไวยากรณ์ของตารางสำรองนั้นคล้ายกับหลักการทำงานของ mysqlhotcopy ทั้งคู่ล็อคตารางแล้วคัดลอกไฟล์ข้อมูล สามารถสำรองข้อมูลออนไลน์ได้ แต่ผลที่ได้ไม่เหมาะดังนั้นจึงไม่แนะนำ โดยจะคัดลอกเฉพาะไฟล์โครงสร้างตารางและไฟล์ข้อมูลเท่านั้น แต่จะไม่คัดลอกไฟล์ดัชนีพร้อมกัน ดังนั้นการกู้คืนจึงช้าลง
ตัวอย่าง:
กลับตาราง tbl_name ถึง '/tmp/db_name/';
โปรดทราบว่าคุณต้องมีสิทธิ์ FILE เพื่อรัน SQL นี้ และไดเร็กทอรี /tmp/db_name/ จะต้องเขียนได้โดยผู้ใช้ mysqld ไฟล์ที่ส่งออกไม่สามารถเขียนทับไฟล์ที่มีอยู่เพื่อหลีกเลี่ยงปัญหาด้านความปลอดภัย
SELECT INTO OUTFILE ส่งออกข้อมูลเป็นไฟล์ข้อความธรรมดา คุณสามารถปรับแต่งช่วงฟิลด์เพื่ออำนวยความสะดวกในการประมวลผลข้อมูลนี้ได้
ตัวอย่าง:
เลือก * ลงใน OUTFILE '/tmp/db_name/tbl_name.txt' จาก tbl_name;
โปรดทราบว่าคุณต้องมีสิทธิ์ FILE เพื่อดำเนินการ SQL นี้ และไฟล์ /tmp/db_name/tbl_name.txt จะต้องเขียนได้โดยผู้ใช้ mysqld ไฟล์ที่ส่งออกไม่สามารถเขียนทับไฟล์ที่มีอยู่เพื่อหลีกเลี่ยงปัญหาด้านความปลอดภัย
3.2 หากต้องการกู้คืนไฟล์ที่สำรองไว้โดยใช้วิธี BACKUP TABLE คุณสามารถเรียกใช้คำสั่ง RESTORE TABLE เพื่อกู้คืนตารางข้อมูลได้
ตัวอย่าง:
เรียกคืนตารางจาก '/tmp/db_name/';
ข้อกำหนดการอนุญาตคล้ายกับที่อธิบายไว้ข้างต้น
สำหรับไฟล์ที่สำรองข้อมูลโดยใช้เมธอด SELECT INTO OUTFILE คุณสามารถรันคำสั่ง LOAD DATA INFILE เพื่อกู้คืนตารางข้อมูลได้
ตัวอย่าง:
โหลดข้อมูล INFILE '/tmp/db_name/tbl_name.txt' ลงในตาราง tbl_name;
ข้อกำหนดการอนุญาตคล้ายกับที่อธิบายไว้ข้างต้น ก่อนที่จะนำเข้าข้อมูล ต้องมีตารางข้อมูลอยู่แล้ว หากคุณกังวลเกี่ยวกับข้อมูลซ้ำซ้อน คุณสามารถเพิ่มคีย์เวิร์ด REPLACE เพื่อแทนที่เรกคอร์ดที่มีอยู่ หรือใช้คีย์เวิร์ด IGNORE เพื่อละเว้น
4. เปิดใช้งานบันทึกไบนารี (binlog)
วิธีใช้ binlog ค่อนข้างยืดหยุ่นกว่า ช่วยลดความกังวลและความพยายาม และยังสามารถรองรับการสำรองข้อมูลส่วนเพิ่มได้อีกด้วย
ต้องรีสตาร์ท Mysqld เมื่อเปิดใช้งาน binlog ขั้นแรก ปิด mysqld เปิด my.cnf และเพิ่มบรรทัดต่อไปนี้:
เซิร์ฟเวอร์-id=1
log-bin = binlog
log-bin-index = binlog.index
จากนั้นเริ่ม mysqld Binlog.000001 และ binlog.index จะถูกสร้างขึ้นระหว่างการดำเนินการ ไฟล์เดิมคือ mysqld บันทึกการดำเนินการอัปเดตทั้งหมดบนข้อมูล และไฟล์หลังเป็นดัชนีของ binlog ทั้งหมด ซึ่งไม่สามารถลบออกได้อย่างง่ายดาย โปรดดูคู่มือสำหรับข้อมูลเกี่ยวกับ binlog
เมื่อคุณต้องการสำรองข้อมูล ขั้นแรกคุณสามารถรันคำสั่ง SQL เพื่อให้ mysqld ยุติการเขียนลงใน binlog ปัจจุบัน จากนั้นจึงสำรองไฟล์โดยตรง ด้วยวิธีนี้ วัตถุประสงค์ของการสำรองข้อมูลส่วนเพิ่มสามารถทำได้:
FLUSH LOGS หากคุณกำลังสำรองข้อมูลเซิร์ฟเวอร์ทาสในระบบการจำลองแบบ คุณควรสำรองข้อมูลไฟล์ master.info และ Relay-log.info ด้วย
ไฟล์ binlog ที่สำรองไว้สามารถดูได้โดยใช้เครื่องมือ mysqlbinlog ที่ MySQL จัดเตรียมไว้ให้ เช่น:
/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001
เครื่องมือนี้ช่วยให้คุณสามารถแสดงคำสั่ง SQL ทั้งหมดภายใต้ฐานข้อมูลที่ระบุ และยังสามารถจำกัดช่วงเวลาได้ ซึ่งค่อนข้างสะดวก โปรดดูรายละเอียดในคู่มือ
เมื่อทำการกู้คืน คุณสามารถใช้คำสั่งที่คล้ายกับข้อความต่อไปนี้:
/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001 | mysql -uyejr -pyejr db_name
ใช้เอาต์พุตคำสั่ง SQL โดย mysqlbinlog โดยตรงเป็นอินพุตเพื่อดำเนินการ
หากคุณมีเครื่องที่ไม่ได้ใช้งาน คุณอาจใช้วิธีนี้เพื่อสำรองข้อมูลได้เช่นกัน เนื่องจากข้อกำหนดด้านประสิทธิภาพของเครื่องทาสค่อนข้างต่ำ จึงมีต้นทุนที่ต่ำ การสำรองข้อมูลส่วนเพิ่มสามารถทำได้ด้วยต้นทุนที่ต่ำ และสามารถแชร์แรงกดดันในการสืบค้นข้อมูลบางส่วนได้
5. การสำรองข้อมูลไฟล์โดยตรง เมื่อเทียบกับวิธีการก่อนหน้านี้ การสำรองข้อมูลไฟล์ทำได้โดยตรง รวดเร็ว และสะดวกที่สุด ข้อเสียคือการสำรองข้อมูลแบบเพิ่มหน่วยโดยพื้นฐานแล้วเป็นไปไม่ได้ เพื่อให้มั่นใจถึงความสอดคล้องของข้อมูล คำสั่ง SQL ต่อไปนี้จะต้องถูกดำเนินการก่อนที่จะสำรองไฟล์:
ล้างตารางด้วย READ LOCK นั่นคือการล้างข้อมูลทั้งหมดในหน่วยความจำไปยังดิสก์และล็อคตารางข้อมูลเพื่อให้แน่ใจว่าไม่มีการเขียนข้อมูลใหม่ในระหว่างกระบวนการคัดลอก ข้อมูลที่สำรองไว้ด้วยวิธีนี้นั้นง่ายต่อการกู้คืน เพียงคัดลอกกลับไปยังไดเร็กทอรีฐานข้อมูลดั้งเดิม
โปรดทราบว่าสำหรับตารางประเภท Innodb คุณจะต้องสำรองไฟล์บันทึกด้วย ซึ่งก็คือไฟล์ ib_logfile* เนื่องจากเมื่อตาราง Innodb เสียหาย คุณสามารถพึ่งพาไฟล์บันทึกเหล่านี้ในการกู้คืนได้
6. กลยุทธ์การสำรองข้อมูล สำหรับระบบที่มีปริมาณธุรกิจระดับปานกลาง กลยุทธ์การสำรองข้อมูลสามารถกำหนดได้ดังนี้: การสำรองข้อมูลเต็มรูปแบบเป็นครั้งแรก การสำรองข้อมูลส่วนเพิ่มวันละครั้ง การสำรองข้อมูลเต็มรูปแบบสัปดาห์ละครั้ง และอื่นๆ สำหรับระบบที่สำคัญและไม่ว่าง คุณอาจต้องการการสำรองข้อมูลเต็มรูปแบบวันละครั้ง การสำรองข้อมูลส่วนเพิ่มครั้งละหนึ่งชั่วโมง หรือบ่อยกว่านั้น เพื่อให้บรรลุการสำรองข้อมูลออนไลน์และการสำรองข้อมูลส่วนเพิ่มโดยไม่ส่งผลกระทบต่อธุรกิจออนไลน์ วิธีที่ดีที่สุดคือการใช้กลไกการจำลองแบบมาสเตอร์-สเลฟ (การจำลองแบบ) เพื่อทำการสำรองข้อมูลบนเครื่องสเลฟ
7. การบำรุงรักษาข้อมูลและการกู้คืนข้อมูล ในฐานะ DBA (ฉันยังไม่ใช่ 555) งานที่สำคัญที่สุดประการหนึ่งคือต้องแน่ใจว่าตารางข้อมูลสามารถใช้งานได้อย่างปลอดภัย เสถียร และด้วยความเร็วสูง ดังนั้นตารางข้อมูลของคุณจึงต้องได้รับการดูแลอย่างสม่ำเสมอ คำสั่ง SQL ต่อไปนี้มีประโยชน์:
ตรวจสอบตารางหรือซ่อมแซมตาราง ตรวจสอบหรือบำรุงรักษาตาราง MyISAM
ปรับตารางให้เหมาะสม ปรับตาราง MyISAM ให้เหมาะสม
วิเคราะห์ตาราง วิเคราะห์ตาราง MyISAM แน่นอนว่าคำสั่งข้างต้นทั้งหมดสามารถทำได้ผ่านเครื่องมือ myisamchk และจะไม่อธิบายรายละเอียดไว้ที่นี่
ตาราง Innodb สามารถจัดเรียงข้อมูลและปรับปรุงความเร็วในการจัดทำดัชนีได้โดยดำเนินการคำสั่งต่อไปนี้:
แก้ไขตาราง tbl_name ENGINE = Innodb;
นี่เป็นการดำเนินการ NULL จริงๆ บนพื้นผิว มันไม่ได้ทำอะไรเลย แต่จริงๆ แล้วมันจะจัดเรียงแฟรกเมนต์ใหม่
ตาราง MyISAM ที่ใช้กันทั่วไปสามารถกู้คืนได้โดยใช้วิธีการที่กล่าวถึงข้างต้น หากดัชนีเสียหาย คุณสามารถใช้เครื่องมือ myisamchk เพื่อสร้างดัชนีใหม่ได้ สำหรับตาราง Innodb นั้นไม่ได้ตรงไปตรงมามากนัก เนื่องจากจะจัดเก็บตารางทั้งหมดไว้ในพื้นที่ตารางเดียว อย่างไรก็ตาม Innodb มีกลไกการตรวจสอบที่เรียกว่าจุดตรวจสอบแบบคลุมเครือ ตราบใดที่ไฟล์บันทึกถูกบันทึก ข้อผิดพลาดก็สามารถซ่อมแซมได้ตามไฟล์บันทึก คุณสามารถเพิ่มพารามิเตอร์ต่อไปนี้ในไฟล์ my.cnf เพื่อให้ mysqld ตรวจสอบไฟล์บันทึกโดยอัตโนมัติเมื่อเริ่มทำงาน:
innodb_force_recovery = 4
ดูคู่มือสำหรับข้อมูลเกี่ยวกับพารามิเตอร์นี้
8. สรุปการสำรองข้อมูลและกำหนดกลยุทธ์การสำรองข้อมูลที่เหมาะสม นี่เป็นส่วนเล็กๆ ของสิ่งที่ DBA ทำ ทุกสิ่งเป็นเรื่องยากตั้งแต่เริ่มต้น