เพอร์โคนา เอ็กซ์ตร้าแบ็คอัพ เป็นโปรแกรมอรรถประโยชน์สำหรับการสำรองฐานข้อมูลแบบ hot MySQL.
เมื่อสร้างการสำรองข้อมูล ตารางจะไม่ถูกล็อค และระบบของคุณยังคงทำงานต่อไปโดยไม่มีข้อจำกัดใดๆ
เอ็กซ์ตร้าแบ็คอัพ 2.4 สามารถสร้างสำเนาสำรองของตารางได้ InnoDB, เอ็กซ์ตร้าดีบี и มายไอซัม บนเซิร์ฟเวอร์ MySQL 5.11, 5.5, 5.6 และ 5.7และบนเซิร์ฟเวอร์ด้วย เพอร์โคนา สำหรับ MySQL с เอ็กซ์ตร้าดีบี.
ในการทำงานกับ มายเอสคิวแอล 8.x ควรใช้รุ่น XtraBackup 8.x. บทความนี้จะพูดถึงเท่านั้น เอ็กซ์ตร้าแบ็คอัพ 2.4.
ประโยชน์หลัก XtraBackup คือยูทิลิตี้นี้เหมาะสำหรับทั้งการสร้างการสำรองข้อมูลของเซิร์ฟเวอร์ที่มีการโหลดสูงและสำหรับระบบที่มีจำนวนธุรกรรมต่ำ
หากขนาดรวมของฐานข้อมูล MySQL ของคุณมีความสำคัญ (หลายสิบกิกะไบต์) แสดงว่าเป็นยูทิลิตี้มาตรฐาน mysqldump จะไม่อนุญาตให้คุณสร้างสำเนาสำรองอย่างรวดเร็วและการคืนค่าดัมพ์จะใช้เวลานาน
การติดตั้ง
การติดตั้ง XtraBackup จากพื้นที่เก็บข้อมูล ฉลาด เพอร์โคนา
รันคำสั่งต่อไปนี้ตามลำดับ:
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
sudo apt-get update
sudo apt-get install percona-xtrabackup-24
2. หลังการติดตั้ง ให้รันคำสั่ง xtrabackup -v
. เนื่องจากสิ่งสำคัญคือต้องแน่ใจว่ายูทิลิตี้ทำงานอย่างถูกต้องบนเซิร์ฟเวอร์ เป็นผลให้บางสิ่งเช่นนี้ปรากฏบนหน้าจอ:
xtrabackup: อาร์กิวเมนต์เซิร์ฟเวอร์ที่รู้จัก: - datadir=/var/lib/mysql - tmpdir=/tmp - server-id=1 - logbin=/var/log/mysql/mysql-bin.log - innodbbufferpoolsize=16384M - innodbfilepertable=1 - innodbflushmethod=Odirect — innodbflushlogattrxcommit=0xtrabackup เวอร์ชัน 2.4.20 ขึ้นอยู่กับเซิร์ฟเวอร์ MySQL 5.7.26 Linux (x8664) (รหัสการแก้ไข: c8b4056)
สิทธิ์การเข้าถึง การอนุญาต และสิทธิพิเศษ
XtraBackup ควรจะสามารถ:
-
เชื่อมต่อกับเซิร์ฟเวอร์ MySQL ของคุณ
-
มีสิทธิ์เข้าถึงไดเร็กทอรี ดาต้าไดร์.
-
เมื่อสร้างสำเนาสำรองให้มีสิทธิ์เขียนไปยังพารามิเตอร์ที่ระบุ เป้าหมาย-dir แคตตาล็อก
ดาต้าไดร์คืออะไร?
ดาต้าไดร์ เป็นไดเร็กทอรีที่เซิร์ฟเวอร์ฐานข้อมูล MySQL เก็บข้อมูล มีฐานข้อมูลทั้งหมด ตารางทั้งหมดอยู่ที่นั่น ในลีนุกซ์ส่วนใหญ่ ไดเร็กทอรีเริ่มต้นคือ /var/lib/mysql.
ไดเร็กทอรี target-dir คืออะไร?
เป้าหมาย-dir - นี่คือไดเร็กทอรีที่จะบันทึกข้อมูลสำรอง
ผู้ใช้ฐานข้อมูลต้องการสิทธิ์การเข้าถึงตารางและฐานข้อมูลต่อไปนี้เพื่อสำรองข้อมูล:
-
โหลดซ้ำและล็อคตาราง
-
ลูกค้าจำลอง
-
สร้างพื้นที่ตาราง
-
กระบวนการ
-
SUPER
-
สร้าง
-
INSERT
-
SELECT
องค์ประกอบ
องค์ประกอบ XtraBackup เสร็จสิ้นโดยใช้ตัวเลือกที่ทำงานเหมือนกับตัวเลือก MySQL มาตรฐาน
นี้หมายความว่าอย่างไร
พารามิเตอร์การกำหนดค่าสามารถระบุได้ทั้งบนบรรทัดคำสั่งหรือในไฟล์การกำหนดค่า DBMS เช่นใน /etc/my.cnf.
ยูทิลิตี้ XtraBackup อ่านพาร์ติชันหลังจากเปิดใช้งาน [mysqld] и [เอ็กซ์ตร้าแบ็คอัพ] จากไฟล์กำหนดค่า MySQL การทำเช่นนี้เพื่อให้ยูทิลิตี้สามารถใช้การตั้งค่าของ DBMS ของคุณได้โดยไม่ต้องระบุพารามิเตอร์ด้วยตนเองระหว่างการสำรองข้อมูลแต่ละครั้ง
ตัวอย่างเช่น ค่า ดาต้าไดร์ และพารามิเตอร์บางอย่าง InnoDB เราได้รับ XtraBackup จากการกำหนดค่า DBMS ของคุณ
หาก XtraBackup ทำงานคุณต้องการแทนที่พารามิเตอร์ที่อยู่ในส่วนนี้ [mysqld]จากนั้นระบุลงในไฟล์กำหนดค่าในส่วนนี้ [เอ็กซ์ตร้าแบ็คอัพ]. เนื่องจากจะอ่านในภายหลัง ลำดับความสำคัญจึงสูงขึ้น
คุณไม่จำเป็นต้องเพิ่มพารามิเตอร์ใดๆ my.cnf. สามารถระบุพารามิเตอร์ที่จำเป็นทั้งหมดบนบรรทัดคำสั่งได้ โดยปกติแล้วจะเป็นสิ่งเดียวที่สามารถวางในส่วนนี้ได้สะดวก [เอ็กซ์ตร้าแบ็คอัพ] ของคุณ my.cnf เป็นพารามิเตอร์ target_dirซึ่งโดยค่าเริ่มต้นจะระบุไดเร็กทอรีที่จะสำรองข้อมูล แต่นี่เป็นทางเลือก
ตัวอย่างการระบุเส้นทางไปยังไดเร็กทอรีด้วยสำเนาสำรอง my.cnf:
[xtrabackup]
target_dir = /data/backups/mysql/
สคริปต์สำรอง
คุณสามารถใช้สคริปต์ต่อไปนี้เพื่อสร้างการสำรองข้อมูล:
#!/bin/bash
# Удаляем данные в каталоге бекапа
rm -rf /mysql/backup
# Cоздаём бекап
xtrabackup --user=xtrabackup
--password=xxxx_SECRET_xxxx
--backup
--target-dir=/mysql/backup
# Выполняем подготовку бекапа для развёртывания
xtrabackup --prepare --target-dir=/mysql/backup
# Создаём архив
tar -zcvf /home/developer/dumps/xtrabackup-all-dbs-"$(date +%F-%H:%M:%S)".gz /mysql/backup
จะเกิดอะไรขึ้นระหว่างการเรียกใช้สคริปต์?
ก่อนอื่น เราล้าง (ลบ) ไดเร็กทอรีที่เราจะบันทึกสำเนาสำรอง:
rm -rf /mysql/backup.
จากนั้นจึงใช้ยูทิลิตี้ XtraBackup สร้างสำเนาสำรองและบันทึกไว้ /mysql/สำรอง/:
xtrabackup --user=xtrabackup --password=xxxxz1cYf95550Gc6xxxxxxxpE3rB03xxxx --backup --target-dir=/mysql/backup
ก่อนหน้านี้เราสร้างผู้ใช้ใน MySQL xtrabackup
ด้วยสิทธิพิเศษที่จำเป็น การใช้พารามิเตอร์ target-dir
เราระบุไดเร็กทอรีที่ควรบันทึกข้อมูลสำรอง
จุดสำคัญ!
สังเกตบรรทัดสคริปต์:
xtrabackup --prepare --target-dir=/mysql/backup
ข้อมูลแคตตาล็อก /mysql/สำรอง ไม่สม่ำเสมอจนกว่าจะสุก
ความจริงก็คือการเปลี่ยนแปลงอาจเกิดขึ้นได้ขณะคัดลอกไฟล์ การดำเนินการ xtrabackup --prepare --target-dir=/mysql/backup
ทำให้การสำรองข้อมูลมีความสอดคล้องกันอย่างสมบูรณ์แบบเมื่อเวลาผ่านไป
คุณสามารถดำเนินการจัดเตรียมข้อมูลบนเครื่องใดก็ได้ ไม่จำเป็นต้องทำเช่นนี้บนเซิร์ฟเวอร์ที่มี DBMS ต้นทางอยู่ คุณสามารถคัดลอกข้อมูลสำรองไปยังเซิร์ฟเวอร์เป้าหมายและจัดเตรียมไว้ที่นั่นได้
สิ่งสุดท้ายที่เราทำคือสร้างไฟล์เก็บถาวรที่เราสำรองข้อมูลไว้:
tar -zcvf /home/developer/dumps/xtrabackup-all-dbs-«$(date % F% H% M% S)».gz /mysql/backup
การกู้คืนข้อมูลสำรอง
ก่อนที่คุณจะสามารถกู้คืนข้อมูลสำรองไปยังเซิร์ฟเวอร์เป้าหมายได้ ข้อมูลจะต้องผ่านขั้นตอนการเตรียมการ ดูด้านบนสำหรับวิธีการทำเช่นนี้
กระบวนการกู้คืนข้อมูลนั้นง่ายมาก คุณต้องแตกข้อมูลสำรองออกจากไฟล์เก็บถาวรและแทนที่ข้อมูลใน ดาต้าไดร์.
จะแทนที่ข้อมูลใน datadir ได้อย่างไร?
ลองพิจารณาสองทางเลือก
ตัวเลือก 1
ใช้ยูทิลิตี้ XtraBackup. คุณต้องระบุตัวเลือก --copy-back.
คำสั่งด้านล่างจะถ่ายโอนข้อมูลสำรองไปที่ ดาต้าไดร์ เซิร์ฟเวอร์เป้าหมาย:
xtrabackup --copy-back --target-dir=/mysql/backup
ตัวเลือก 2
คุณสามารถทำได้แตกต่างออกไป ทำโดยไม่ต้องใช้ยูทิลิตี้ XtraBackup.
สิ่งที่คุณต้องทำคือคัดลอกข้อมูลสำรองไปที่ ดาต้าไดร์. คุณสามารถทำได้ด้วย cp หรือ rsync.
สิ่งสำคัญคือต้องเข้าใจว่าขั้นตอนในการกู้คืนข้อมูลสำรองนั้นเหลือเพียงการแทนที่เนื้อหาของไดเร็กทอรีเท่านั้น ดาต้าไดร์.
ก่อนที่คุณจะเริ่มกู้คืนข้อมูลสำรองบนเซิร์ฟเวอร์เป้าหมาย คุณต้อง:
-
หยุดเซิร์ฟเวอร์ MySQL
-
โฟลเดอร์เปล่า ดาต้าไดร์ หรือย้ายเนื้อหาไปยังตำแหน่งอื่น แคตตาล็อก ดาต้าไดร์ จะต้องว่างเปล่า
หลังจากเสร็จสิ้นการถ่ายโอนข้อมูลไปที่ ดาต้าไดร์ เซิร์ฟเวอร์ MySQL สามารถเริ่มต้นได้
วัสดุที่ใช้
ที่มา: will.com