สารบัญ
- บทนำ
- ข้อกำหนดเบื้องต้น
- ขั้นตอนที่ 1: สร้างผู้ใช้ระบบที่ไม่ใช่รูท
- ขั้นตอนที่ 2: ตรวจสอบเอนจิ้นการจัดเก็บ
- ขั้นตอนที่ 3: สร้างผู้ใช้ฐานข้อมูลสำหรับการสำรองข้อมูล
- ขั้นตอนที่ 4: ติดตั้ง Percona XtraBackup
- ขั้นตอนที่ 5: สร้างไดเรกทอรีหน่วยเก็บข้อมูลสำรอง
- ขั้นตอนที่ 6: สร้างการสำรองข้อมูลเต็มรูปแบบครั้งแรก
- ขั้นตอนที่ 7: สร้างการสำรองข้อมูลเพิ่มเติมแบบต่อไปนี้
- ขั้นตอนที่ 8: เตรียมไฟล์สำรองสำหรับการกู้คืนฐานข้อมูล
- ขั้นตอนที่ 9: กู้คืนฐานข้อมูล
- ขั้นตอนต่อไป
บทนำ
Percona XtraBackup เป็นโปรแกรม MySQL ฟรีที่ใช้สำหรับการสำรองข้อมูลที่ร้อนแรง มันยังเปิดแหล่งที่มา ด้วย Percona XtraBackup คุณสามารถทำการสำรองข้อมูลอย่างรวดเร็วของการรันฐานข้อมูล MySQL, MariaDB หรือ Percona Server โดยไม่ต้องหยุดบริการฐานข้อมูลของคุณหรือทำให้เป็นแบบอ่านอย่างเดียว นี่เป็นคุณสมบัติที่สำคัญทางธุรกิจสำหรับธุรกิจออนไลน์มากมาย
สำหรับฐานข้อมูลที่ใช้เอ็นจิ้นการจัดเก็บข้อมูล InnoDB, XtraDB และ HailDB, Percona XtraBackup สามารถทำการสำรองข้อมูลแบบไม่บล็อก สำหรับฐานข้อมูลที่ใช้ MyISAM, Merge และเอนจิ้นการจัดเก็บถาวร Percona XtraBackup ยังสามารถทำการสำรองข้อมูลได้โดยหยุดเขียนสั้น ๆ ในตอนท้ายของโพรซีเดอร์การสำรองข้อมูล
ในบทความนี้ฉันจะแสดงวิธีการติดตั้งและใช้งาน Percona XtraBackup เพื่อทำการสำรองข้อมูลร้อนอย่างเต็มที่และเพิ่มขึ้นบนเซิร์ฟเวอร์ Vultr โดยใช้แอปพลิเคชั่น One-Click WordPress เราจะทำการสำรองข้อมูลเต็มรูปแบบและสำรองข้อมูลเพิ่มเติมสองครั้งจากนั้นกู้คืนฐานข้อมูลให้อยู่ในสถานะของการสำรองข้อมูลทั้งสามรายการตามลำดับ
ข้อกำหนดเบื้องต้น
ฉันคิดว่าคุณได้ปรับใช้อินสแตนซ์เซิร์ฟเวอร์ One-Click WordPress Vultr ตั้งแต่เริ่มต้นและเข้าสู่ระบบในฐานะ root โดยใช้ SSH
ขั้นตอนที่ 1: สร้างผู้ใช้ระบบที่ไม่ใช่รูท
เพื่อความปลอดภัยแนวทางปฏิบัติที่แนะนำคือการสร้างบัญชีผู้ใช้อื่นที่มีสิทธิ์การใช้งานรูทจากนั้นใช้เพื่อเข้าสู่ระบบและดำเนินการประจำวันของคุณบนระบบ คุณยังสามารถเรียกใช้งานคำสั่ง superuser เกือบทั้งหมดได้ด้วยsudo
คำสั่ง
1) สร้างผู้ใช้ใหม่ แทนที่sysuser
ด้วยชื่อผู้ใช้ของคุณเอง
useradd sysuser
2) ตั้งรหัสผ่านสำหรับผู้ใช้ใหม่ของคุณ แทนที่sysuser
ด้วยชื่อผู้ใช้ของคุณเอง
passwd sysuser
3) ให้สิทธิ์การรูทแก่ผู้ใช้ใหม่ของคุณ
visudo
ค้นหาย่อหน้าด้านล่าง
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
เพิ่มแถวที่อยู่ใต้ย่อหน้านี้แทนที่sysuser
ด้วยชื่อผู้ใช้ของคุณเอง
sysuser ALL=(ALL) ALL
บันทึกและออก
:wq
4) เปลี่ยนเป็นบัญชีผู้ใช้ใหม่ของคุณ
logout
จากนั้นใช้ข้อมูลประจำตัวของผู้ใช้ใหม่เพื่อเข้าสู่ระบบจากหน้าต่างเทอร์มินัลของคุณ
ขั้นตอนที่ 2: ตรวจสอบเอนจิ้นการจัดเก็บ
โดยค่าเริ่มต้นเข้าสู่ระบบราก MySQL จะถูกบันทึกไว้ใน VPS /root/.my.cnf
ใน แสดงรหัสผ่านในเทอร์มินัลของคุณด้วยคำสั่งต่อไปนี้
sudo cat /root/.my.cnf
ใช้ข้อมูลประจำตัวที่แสดงบนหน้าจอเพื่อเข้าสู่คอนโซล MySQL
mysql -u root -p
ในเปลือก MySQL ให้เรียกใช้ดังต่อไปนี้
SHOW DATABASES;
ฐานข้อมูล MySQL ทั้งหมดจะแสดงบนหน้าจอ ฐานข้อมูลชื่อ like wp5273512
คือฐานข้อมูล WordPress ที่เราต้องการสำรองข้อมูล ในคำสั่งต่อไปนี้แทนที่wp5273512
ด้วยหนึ่งของคุณเอง:
USE wp5273512;
ตรวจสอบเอ็นจิ้นการจัดเก็บข้อมูลสำหรับแต่ละตาราง:
SHOW TABLE STATUS\G
คุณจะพบว่าตารางทั้งหมดในฐานข้อมูล WordPress MySQL ของคุณใช้เครื่องมือจัดเก็บข้อมูล InnoDB ซึ่งเหมาะสำหรับการสำรองข้อมูลร้อนด้วย Percona XtraBackup
สำหรับฐานข้อมูล MySQL อื่น ๆ ที่ใช้เครื่องมือจัดเก็บ MyISAM เรายังสามารถสำรองข้อมูลด้วย Percona XtraBackup ด้วยการหยุดเขียนชั่วคราว
ขั้นตอนที่ 3: สร้างผู้ใช้ฐานข้อมูลสำหรับการสำรองข้อมูล
ยังอยู่ในเชลล์ MySQL ใช้คำสั่งต่อไปนี้เพื่อสร้างผู้ใช้ฐานข้อมูลเฉพาะสำหรับการสำรองข้อมูล จำไว้ว่าให้แทนที่ชื่อผู้ใช้ฐานข้อมูลxbuser
และรหัสผ่านxbpasswd
ด้วยชื่อของคุณเอง:
CREATE USER 'xbuser'@'localhost' IDENTIFIED BY 'xbpasswd';
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT, CREATE TABLESPACE, PROCESS, SUPER, CREATE, INSERT, SELECT ON *.* TO 'xbuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
สิทธิ์ที่ได้รับข้างต้นเป็นสิ่งจำเป็นสำหรับการทำงานของ Percona XtraBackup อย่างเต็มรูปแบบ คุณสามารถลบบางส่วนออกเพื่อการทำงานที่น้อยลงและความปลอดภัยที่ดีขึ้น สำหรับรายละเอียดเพิ่มเติมโปรดดูที่ Percona XtraBackup เว็บไซต์อย่างเป็นทางการ
ขั้นตอนที่ 4: ติดตั้ง Percona XtraBackup
คุณสามารถติดตั้ง Percona XtraBackup จากที่เก็บ RPM ของ Percona ได้อย่างง่ายดาย:
sudo yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
sudo yum install -y percona-xtrabackup
ขั้นตอนที่ 5: สร้างไดเรกทอรีหน่วยเก็บข้อมูลสำรอง
ก่อนอื่นคุณต้องเพิ่มผู้ใช้sysuser
ในmysql
กลุ่ม แทนที่sysuser
ด้วยชื่อผู้ใช้ของคุณเอง
sudo gpasswd -a sysuser mysql
สร้างไดเรกทอรีเพื่อเก็บข้อมูลสำรองแบบเต็ม
sudo mkdir -p /dbbackup/full/
สร้างไดเรกทอรีอื่นเพื่อจัดเก็บข้อมูลสำรองเพิ่มเติม
sudo mkdir -p /dbbackup/inc/
เปลี่ยนเจ้าของไดเรกทอรีเหล่านี้ให้กับผู้ใช้และกลุ่มsysuser
sysuser
sudo chown -R sysuser:sysuser /dbbackup
ออกจากระบบเพื่อให้การเปลี่ยนแปลงมีผล
logout
จากนั้นเข้าสู่ระบบด้วยsysuser
อีกครั้ง
ขั้นตอนที่ 6: สร้างการสำรองข้อมูลเต็มรูปแบบครั้งแรก
XtraBackup ประกอบด้วยโปรแกรม XtraBackup และinnobackupex
สคริปต์ perl เป็นหลัก โดยปกติคุณสามารถใช้innobackupex
สคริปต์ perl เพื่อดำเนินการตามขั้นตอนการดำเนินงานต่างๆเพื่อความสะดวก
ป้อนคำสั่งต่อไปนี้เพื่อสร้างการสำรองข้อมูลเต็มรูปแบบครั้งแรก อย่าลืมเปลี่ยนชื่อผู้ใช้xbuser
ฐานข้อมูลรหัสผ่านผู้ใช้ฐานข้อมูลxbpasswd
และไดเรกทอรีสำรองข้อมูลเต็มรูปแบบ/dbbackup/full/
ด้วยชื่อของคุณเอง
sudo innobackupex --user=xbuser --password=xbpasswd /dbbackup/full/
เมื่อคำสั่งนี้ทำงานอย่างถูกต้องคุณจะเห็นข้อความยืนยัน "innobackupex: เสร็จสมบูรณ์ตกลง!" ที่บรรทัดสุดท้ายของเอาต์พุต
/dbbackup/full/
ไฟล์ทั้งหมดที่สร้างขึ้นใหม่ของการสำรองข้อมูลทั้งหมดนี้จะถูกเก็บไว้ในเวลาที่ประทับภายใต้ไดเรกทอรี ตัวอย่างเช่น/dbbackup/full/2015-05-22_05-45-54
.
ขั้นตอนที่ 7: สร้างการสำรองข้อมูลเพิ่มเติมแบบต่อไปนี้
ป้อนคำสั่งต่อไปนี้เพื่อสร้างการสำรองข้อมูลส่วนเพิ่มครั้งแรก แทนที่ตัวแปรในคำสั่งตามนั้น
sudo innobackupex --user=xbuser --password=xbpasswd --incremental --incremental-basedir=/dbbackup/full/2015-05-22_05-45-54 /dbbackup/inc/
อีกครั้งคุณจะเห็น "innobackupex: เสร็จสมบูรณ์ตกลง!" ที่ส่วนท้ายของเอาต์พุตเมื่อคำสั่งดำเนินการเป็นผลสำเร็จ /dbbackup/inc/
แฟ้มสำรองข้อมูลจะถูกเก็บไว้ในเวลาที่ประทับภายใต้ไดเรกทอรี
ป้อนคำสั่งต่อไปนี้เพื่อสร้างการสำรองข้อมูลเพิ่มเติมที่สอง แทนที่ตัวแปรในคำสั่งตามนั้น
sudo innobackupex --user=xbuser --password=xbpasswd --incremental --incremental-basedir=/dbbackup/inc/2015-05-22_05-48-12 /dbbackup/inc/
เมื่อประสบความสำเร็จคุณจะเห็น "innobackupex: เสร็จสมบูรณ์ตกลง!" ส่งข้อความอีกครั้ง ตรวจสอบ/dbbackup/inc/
โฟลเดอร์อีกครั้งเพื่อดูไฟล์สำรอง
ขั้นตอนที่ 8: เตรียมไฟล์สำรองสำหรับการกู้คืนฐานข้อมูล
ไฟล์สำรองฐานข้อมูลทั้งหมดต้องถูกจัดเตรียมก่อนจึงจะสามารถใช้เพื่อกู้คืนฐานข้อมูล
หมายเหตุ : ก่อนที่คุณจะดำเนินการขั้นตอนการเตรียมการและเรียกคืนคุณควรเก็บสำเนาของไดเรกทอรีข้อมูลสำรองทั้งหมด (เช่น/dbbackup/
) ไว้ที่อื่นในกรณีที่ความเสียหายใด ๆ ในการสำรองข้อมูลไฟล์นั้นเกิดจากความผิดพลาด
ในแต่ละไดเรกทอรีสำรองข้อมูลจะมีชื่อไฟล์xtrabackup_checkpoints
ซึ่งมีประเภทการสำรองข้อมูลและหมายเลขลำดับการเริ่มต้นและสิ้นสุด ( from_lsn
และto_lsn
) คุณสามารถใช้ตัวเลขเหล่านี้เพื่ออธิบายกลยุทธ์การกู้คืนฐานข้อมูลของคุณ ดูตัวอย่างด้านล่าง
ในxtrabackup_checkpoints
ไฟล์ของการสำรองข้อมูลเต็มรูปแบบแรกฉันมี:
backup_type = full-backuped
from_lsn = 0
to_lsn = 2932478
ในxtrabackup_checkpoints
ไฟล์ของการสำรองข้อมูลที่เพิ่มขึ้นครั้งแรกฉันมี:
backup_type =incremental
from_lsn = 2932478
to_lsn = 2970177
ในxtrabackup_checkpoints
ไฟล์สำรองข้อมูลเพิ่มที่สองฉันมี:
backup_type = incremental
from_lsn = 2970177
to_lsn = 3004672
โดยสังเขปคุณควรจัดการกับการสำรองข้อมูลแต่ละครั้งด้วยลำดับที่เพิ่มขึ้นของ lsn หากลำดับ lsn ไม่สมบูรณ์หรือไม่เป็นระเบียบคุณอาจสูญเสียข้อมูล
หมายเหตุ : คำสั่งต่อไปนี้เกี่ยวข้องกับสามไดเรกทอรีแทนที่ด้วยไดเรกทอรีของคุณเอง
ในการกู้คืนฐานข้อมูลกลับสู่สถานะของการสำรองข้อมูลเต็มรูปแบบครั้งแรกคุณต้องเตรียมไฟล์สำรองข้อมูลด้วยคำสั่งต่อไปนี้:
sudo innobackupex --apply-log /dbbackup/full/2015-05-22_05-45-54
ในการกู้คืนฐานข้อมูลกลับสู่สถานะของการสำรองข้อมูลส่วนเพิ่มครั้งแรกคุณต้องเตรียมไฟล์สำรองข้อมูลด้วยคำสั่งต่อไปนี้:
sudo innobackupex --apply-log --redo-only /dbbackup/full/2015-05-22_05-45-54
sudo innobackupex --apply-log /dbbackup/full/2015-05-22_05-45-54 --incremental-dir=/dbbackup/inc/2015-05-22_05-48-12
sudo innobackupex --apply-log /dbbackup/full/2015-05-22_05-45-54
ในการกู้คืนฐานข้อมูลกลับสู่สถานะของการสำรองข้อมูลเพิ่มเติมครั้งที่สองคุณต้องเตรียมไฟล์สำรองข้อมูลด้วยคำสั่งต่อไปนี้:
sudo innobackupex --apply-log --redo-only /dbbackup/full/2015-05-22_05-45-54
sudo innobackupex --apply-log --redo-only /dbbackup/full/2015-05-22_05-45-54 --incremental-dir=/dbbackup/inc/2015-05-22_05-48-12
sudo innobackupex --apply-log /dbbackup/full/2015-05-22_05-45-54 --incremental-dir=/dbbackup/inc/2015-05-22_05-51-32
sudo innobackupex --apply-log /dbbackup/full/2015-05-22_05-45-54
หมายเหตุ :
สำหรับการสำรองข้อมูลส่วนเพิ่มคุณควรใช้--redo-only
ตัวเลือกทั้งหมดยกเว้นการสำรองข้อมูลส่วนเพิ่มครั้งล่าสุด อย่างไรก็ตามการใช้ตัวเลือกนี้ในการสำรองข้อมูลส่วนเพิ่มครั้งล่าสุดยังคงไม่เป็นอันตรายต่อความสอดคล้องของข้อมูลของคุณซึ่งจะทำให้เกิดความล่าช้าเนื่องจากการย้อนกลับฐานข้อมูลเท่านั้น
คำสั่งสุดท้ายของแต่ละสถานการณ์ที่เพิ่มขึ้นเป็นทางเลือก แต่แนะนำเพราะจะเร่งการคืนค่า
หลังการจัดเตรียมการเปลี่ยนแปลงที่บันทึกไว้ในไฟล์สำรองข้อมูลแบบเพิ่มเติมจะถูกผนวกเข้ากับไฟล์สำรองข้อมูลเต็มรูปแบบที่จัดเตรียมพื้นฐานดังนั้นคุณควรใช้ไฟล์สำรองข้อมูลเต็มรูปแบบที่เตรียมไว้เพื่อคืนค่าฐานข้อมูลของคุณไม่ว่าคุณจะเลือกสำรองข้อมูลเต็มรูปแบบหรือ
ขั้นตอนที่ 9: กู้คืนฐานข้อมูล
ก่อนที่คุณจะคืนค่าฐานข้อมูลของคุณคุณต้องหยุดบริการฐานข้อมูล
sudo service mysqld stop
คุณต้องลบไดเรกทอรีฐานข้อมูลด้วย คุณสามารถย้ายไฟล์ฐานข้อมูลปัจจุบันไปยังที่อื่นเพื่อความไม่ประมาท
sudo mkdir /currentdb
sudo mv /var/lib/mysql/* /currentdb
คืนค่าฐานข้อมูลของคุณด้วยไฟล์ "การสำรองข้อมูลเต็มรูปแบบ" ที่จัดเตรียมไว้
sudo innobackupex --copy-back /dbbackup/full/2015-05-22_05-45-54
เนื่องจากขั้นตอนการกู้คืนจะแก้ไขเจ้าของไดเรกทอรีฐานข้อมูลคุณจึงต้องเปลี่ยนกลับเป็นmysql:mysql
เพื่อให้สามารถใช้งานได้
sudo chown -R mysql:mysql /var/lib/mysql
เริ่มบริการฐานข้อมูลอีกครั้ง
sudo service mysqld start
แค่นั้นแหละ. ณ จุดนี้คุณสามารถเยี่ยมชมไซต์ WordPress ของคุณเพื่อตรวจสอบว่ากระบวนการกู้คืนสำเร็จแล้ว