การสร้าง Slave ขึ้นมาใหม่โดยใช้ LVM
นี่คือวิธีที่เราใช้ในการสร้างทาสทาส MySQL โดยใช้ Linux LVM สิ่งนี้รับประกันสแนปชอตที่สอดคล้องกันในขณะที่ต้องการเวลาหยุดทำงานน้อยที่สุดในต้นแบบของคุณ
ตั้ง innodb สูงสุดเพจสกปรกเปอร์เซ็นต์เป็นศูนย์บนเซิร์ฟเวอร์ MySQL หลัก นี่จะเป็นการบังคับให้ MySQL เขียนทุกหน้าไปยังดิสก์ซึ่งจะช่วยเร่งความเร็วในการรีสตาร์ท
set global innodb_max_dirty_pages_pct = 0;
ในการตรวจสอบจำนวนหน้าสกปรกให้รันคำสั่ง
mysqladmin ext -i10 | grep dirty
เมื่อจำนวนหยุดลดลงคุณถึงจุดที่จะดำเนินการต่อไป รีเซ็ตต้นแบบถัดไปเพื่อล้างบันทึก bin / บันทึกการถ่ายทอดเก่า:
RESET MASTER;
ดำเนินการ lvdisplay เพื่อรับ LV Path
lvdisplay
ผลลัพธ์จะมีลักษณะเช่นนี้
--- Logical volume ---
LV Path /dev/vg_mysql/lv_data
LV Name lv_data
VG Name vg_mysql
ปิดฐานข้อมูลหลักด้วยคำสั่ง
service mysql stop
จากนั้นใช้ snaphot mysql_snapshot จะเป็นชื่อโลจิคัลวอลุ่มใหม่ หาก binlogs วางอยู่บนไดรฟ์ระบบปฏิบัติการจำเป็นต้องมีสแนปช็อตด้วย
lvcreate --size 10G --snapshot --name mysql_snapshot /dev/vg_mysql/lv_data
เริ่มต้นแบบอีกครั้งด้วยคำสั่ง
service mysql start
กู้คืนการตั้งค่าหน้าสกปรกให้กลับเป็นค่าเริ่มต้น
set global innodb_max_dirty_pages_pct = 75;
เรียกใช้ lvdisplay อีกครั้งเพื่อให้แน่ใจว่าสแน็ปช็อตอยู่ที่นั่นและมองเห็นได้
lvdisplay
เอาท์พุท:
--- Logical volume ---
LV Path /dev/vg_mysql/mysql_snapshot
LV Name mysql_snapshot
VG Name vg_mysql
เมานต์สแนปชอต
mkdir /mnt/mysql_snapshot
mount /dev/vg_mysql/mysql_snapshot /mnt/mysql_snapshot
หากคุณมี MySQL MySQL ที่รันอยู่คุณจำเป็นต้องหยุดมัน
service mysql stop
ถัดไปคุณต้องล้างโฟลเดอร์ข้อมูล MySQL
cd /var/lib/mysql
rm -fr *
กลับไปสู่หลัก ตอนนี้ซิงค์ภาพรวมกับทาส MySQL
rsync --progress -harz /mnt/mysql_snapshot/ targethostname:/var/lib/mysql/
เมื่อ rsync เสร็จสมบูรณ์คุณสามารถยกเลิกการต่อเชื่อมและลบสแนปชอตได้
umount /mnt/mysql_snapshot
lvremove -f /dev/vg_mysql/mysql_snapshot
สร้างผู้ใช้การจำลองแบบบนต้นแบบถ้าไม่มีผู้ใช้การจำลองแบบเก่าหรือไม่ทราบรหัสผ่าน
GRANT REPLICATION SLAVE on *.* to 'replication'@'[SLAVE IP]' identified by 'YourPass';
ตรวจสอบว่าไฟล์ข้อมูล / var / lib / mysql เป็นของผู้ใช้ mysql ถ้าเป็นเช่นนั้นคุณสามารถละเว้นคำสั่งต่อไปนี้:
chown -R mysql:mysql /var/lib/mysql
บันทึกตำแหน่ง binlog ถัดไป
ls -laF | grep mysql-bin
คุณจะเห็นสิ่งที่ชอบ
..
-rw-rw---- 1 mysql mysql 1073750329 Aug 28 03:33 mysql-bin.000017
-rw-rw---- 1 mysql mysql 1073741932 Aug 28 08:32 mysql-bin.000018
-rw-rw---- 1 mysql mysql 963333441 Aug 28 15:37 mysql-bin.000019
-rw-rw---- 1 mysql mysql 65657162 Aug 28 16:44 mysql-bin.000020
ที่นี่ไฟล์บันทึกหลักคือหมายเลขไฟล์สูงสุดตามลำดับและตำแหน่งบันทึกถังขยะคือขนาดไฟล์ บันทึกค่าเหล่านี้:
master_log_file=mysql-bin.000020
master_log_post=65657162
ถัดไปเริ่ม MySQL ทาส
service mysql start
ดำเนินการคำสั่งเปลี่ยนแปลง master บนทาสโดยดำเนินการต่อไปนี้:
CHANGE MASTER TO
master_host="10.0.0.12",
master_user="replication",
master_password="YourPass",
master_log_file="mysql-bin.000020",
master_log_pos=65657162;
ในที่สุดก็เริ่มทาส
SLAVE START;
ตรวจสอบสถานะทาส:
SHOW SLAVE STATUS;
ตรวจสอบให้แน่ใจว่า Slave IO ทำงานอยู่และไม่มีข้อผิดพลาดในการเชื่อมต่อ โชคดี!
สาขา Juha Vehnia
ฉันเพิ่งเขียนลงในบล็อกของฉันซึ่งพบได้ที่นี่ ... มีรายละเอียดเพิ่มเติมเล็กน้อย แต่เรื่องราวก็เหมือนกัน
http://www.juhavehnia.com/2015/05/rebuilding-mysql-slave-using-linux-lvm.html
--opt --single-transaction --comments --hex-blob --dump-date --no-autocommit --all-databases