ส่วนของเว็บไซต์
ตัวเลือกของบรรณาธิการ:
- 3 ฐานข้อมูลแบบกระจาย
- ผู้จัดการเนื้อหา - ความรับผิดชอบ เงินเดือน การฝึกอบรม ข้อเสียและข้อดีของการทำงานเป็นผู้เชี่ยวชาญด้านเนื้อหา
- จะป้องกันตัวเองจากการขุดที่ซ่อนอยู่ในเบราว์เซอร์ของคุณได้อย่างไร?
- การกู้คืนรหัสผ่านใน Ask
- วิธีเปิดกล้องบนแล็ปท็อป
- ทำไมเพลงไม่เล่นบน VKontakte?
- วิธีเพิ่มขนาดของไดรฟ์ C โดยเสียค่าใช้จ่ายของไดรฟ์ D โดยไม่สูญเสียข้อมูล
- สาเหตุของการทำงานผิดพลาดบนเมนบอร์ด หากชิปเซ็ตบนเมนบอร์ดเกิดไฟไหม้
- ชื่อเดิมสำหรับการแชท
- การใช้สไตล์ใน Excel วิธีสร้างสไตล์ใหม่ของคุณเอง
การโฆษณา
พื้นฐานของการจำลองแบบใน MySQL การตั้งค่าการจำลองฐานข้อมูล mysql การติดตั้งและการกำหนดค่าของ Master |
ขอให้เป็นวันที่ดีทุกคน! วันนี้ในบทความของเรา เราจะดูตัวอย่างการตั้งค่าการจำลองแบบ "master-slave" ทฤษฎีเล็กน้อยเหตุใดจึงต้องมีการจำลองแบบ? ก่อนอื่น นี่คือเครือข่ายความปลอดภัยในกรณีที่เซิร์ฟเวอร์ mysql หลักล้มเหลว จากนั้นคุณสามารถสลับไปยังเซิร์ฟเวอร์ทาสและทำงานต่อไปได้ ประการที่สอง นี่เป็นโอกาสในการลดภาระบนเซิร์ฟเวอร์ Mysql หลักโดยใช้เซิร์ฟเวอร์หลักสำหรับการเขียนเท่านั้น และดำเนินการอ่านบนเซิร์ฟเวอร์ทาส การจำลองแบบเกิดขึ้นได้อย่างไร? เซิร์ฟเวอร์หลักจะเขียน binlogs ซึ่งระบุการดำเนินการที่ดำเนินการบนฐานข้อมูล (ฐานข้อมูล) และจดจำออฟเซ็ตในบันทึกตั้งแต่เริ่มต้นจนถึงบันทึกปัจจุบัน (ตำแหน่ง) เซิร์ฟเวอร์ทาสเชื่อมต่อกับต้นแบบ เปรียบเทียบค่าตำแหน่ง และอ่านการเปลี่ยนแปลงในบันทึกโดยเริ่มจากค่าของตำแหน่งของตัวเองและลงท้ายด้วยค่าของตำแหน่งของต้นแบบ มันใช้การเปลี่ยนแปลง (คำสั่ง) กับฐานข้อมูลบนเซิร์ฟเวอร์ทาส การติดตั้งและการกำหนดค่าของ Masterเราเปลี่ยน my.cnf บนเซิร์ฟเวอร์หลัก: Server-id = 1 - ระบุรหัสเซิร์ฟเวอร์ log_bin = /var/log/mysql/mysql-bin.log - ชื่อบันทึกและเส้นทาง คำอธิบายเล็กๆ น้อยๆ: ตามค่าเริ่มต้น ตัวช่วยสร้างจะเขียน binlogs สำหรับฐานข้อมูลทั้งหมด ซึ่งสามารถแก้ไขได้โดยใช้ "binlog-do-db" ค่าจะถูกบันทึกลงในบันทึกเมื่อใช้ฐานข้อมูลเฉพาะ การเปลี่ยนแปลงในฐานข้อมูลอื่นจะไม่ถูกบันทึกที่นี่คุณสามารถระบุจำนวนวันที่จะจัดเก็บบันทึก ขนาดสูงสุดคือเท่าใด (พารามิเตอร์ expir_logs_days และ max_binlog_size) เพิ่มผู้ใช้ใน MySQL ภายใต้การจำลองสิทธิ์ที่จะดำเนินการ: GRANT ทาสการจำลองแบบบน *.* ถึง user_name@ip_slave_server ระบุโดย "รหัสผ่าน"; Replication Slave เป็นสิทธิ์ที่อนุญาตให้ผู้ใช้อ่าน Binlog ip_slave_server - ip ของเซิร์ฟเวอร์ที่ผู้ใช้จะเชื่อมต่อ รีบูตเซิร์ฟเวอร์ mysql: /etc/init.d/mysql รีสตาร์ท ตรวจสอบงานของอาจารย์: แสดงสถานะหลัก คุณควรเห็นชื่อของ binlog และตำแหน่งของมัน เมื่อดำเนินการคำสั่งบนฐานข้อมูลตำแหน่งจะเปลี่ยนไป การตั้งค่าทาสเราทำการเปลี่ยนแปลงไฟล์ my.cnf: Server-id = 2 - ตัวระบุของเซิร์ฟเวอร์ทาสจะต้องแตกต่างจากตัวระบุหลัก Relay-log = /var/lib/mysql/mysql-relay-bin - เช่นเดียวกับบันทึกไบนารีประกอบด้วยชุดของไฟล์ที่มีหมายเลขซึ่งมีเหตุการณ์ที่อธิบายการเปลี่ยนแปลงในฐานข้อมูล Relay-log-index = /var/lib/mysql/mysql-relay-bin.index - ไฟล์ดัชนีที่มีชื่อของไฟล์บันทึกการถ่ายทอดทั้งหมดที่ใช้งานอยู่ Replicate-do-DB = ฐานข้อมูลที่จะถูกจำลองแบบ หมายเหตุสำคัญ! เมื่อจัดระเบียบ cross db (เมื่อใช้ฐานข้อมูลหนึ่งและข้อมูลถูกอัพเดตในฐานข้อมูลอื่น) ไม่จำเป็นต้องระบุ binlog-do-db ในการตั้งค่าเซิร์ฟเวอร์หลัก binlog- และควรเขียนสำหรับฐานข้อมูลทั้งหมด และใน การตั้งค่าทาสจำเป็นต้องใช้การทำซ้ำ-do แทน -db ระบุการทำซ้ำ-wild-do-table=db_name.% โดยที่ db_name คือชื่อของฐานข้อมูลที่ถูกจำลองแบบรีบูตเซิร์ฟเวอร์ mysql: /etc/init.d/mysql รีสตาร์ท การเปิดใช้งานการจำลองแบบตั้งค่า GLOBAL อ่านอย่างเดียว = เปิด; ลองดูที่สถานะของเจ้านาย: แสดงสถานะหลัก เราจำค่าของไฟล์และตำแหน่งได้ (หรือดีกว่านั้นให้จดบันทึกไว้) ค่าตำแหน่งไม่ควรเปลี่ยนแปลงในขณะนี้ เราดัมพ์ต้นแบบโดยใช้คำสั่ง mysqldump: Mysqldump -uname -ppassword db_master_name > dump_db, โดยที่ name คือชื่อผู้ใช้ รหัสผ่านคือรหัสผ่าน db_master_name คือชื่อฐานข้อมูล dump_db คือชื่อของดัมพ์ หลังจากการถ่ายโอนข้อมูลเสร็จสิ้น เราอนุญาตให้เขียนลงในฐานข้อมูลได้: ตั้งค่า GLOBAL อ่านอย่างเดียว = ปิด; เราถ่ายโอนดัมพ์ไปยังทาสและขยายมัน Mysql -uname -ppassword db_slave_name< dump_db กำลังตั้งค่าการจำลอง เปลี่ยน MASTER เป็น MASTER_HOST = “master ip”, MASTER_USER = “user_name”, MASTER_PASSWORD = “รหัสผ่าน”, MASTER_LOG_FILE = “ชื่อบันทึก”, MASTER_LOG_POS = ตำแหน่ง; master ip - IP ของเซิร์ฟเวอร์ที่ Master ตั้งอยู่, ชื่อผู้ใช้ - ชื่อของผู้ใช้ที่เราสร้างบน Master, ชื่อบันทึก - ค่าไฟล์บน Master เมื่อสร้างการถ่ายโอนข้อมูลฐานข้อมูล, ตำแหน่ง - ค่า Position บน ต้นแบบเมื่อมีการสร้างดัมพ์ฐานข้อมูล มาเริ่มทาสกันดีกว่า: เริ่มทาส; มาดูกันว่าการจำลองดำเนินไปอย่างไร: บนต้นแบบ: SHOW MASTER STATUS\G บนสเลฟ: SHOW SLAVE STATUS\G การตั้งค่าความปลอดภัยบนเซิร์ฟเวอร์หลักพารามิเตอร์bind-addressใน /etc/mysql/my.cnf ระบุที่อยู่ IP ใดที่เซิร์ฟเวอร์ mysql จะฟังขณะรอการเชื่อมต่อ โดยทั่วไปจะมีค่า bind-address = 127.0.0.1 แต่หลังจากตั้งค่าเซิร์ฟเวอร์ทาสแล้ว เราจำเป็นต้องอนุญาตการเชื่อมต่อจากเซิร์ฟเวอร์ทาสและยังคงต้องทำงานอยู่ การเชื่อมต่อในท้องถิ่น- Bind-address สามารถอนุญาตการเชื่อมต่อจาก IP เดียวหรือจากทั้งหมด เพราะ เราจำเป็นต้องระบุมากกว่าหนึ่ง IP สำหรับการเชื่อมต่อ เราใส่เครื่องหมายความคิดเห็นในบรรทัดด้วย bind-address = 127.0.0.1 ตอนนี้เซิร์ฟเวอร์ mysql จะยอมรับการเชื่อมต่อจากที่อยู่ IP ทั้งหมดซึ่งเป็นอันตรายมาก iptables จะช่วยเราแก้ปัญหานี้: Iptables -I INPUT -p tcp -s ip_slave_server-a --dport 3306 -j ACCEPT -ขั้นแรกให้อนุญาตการเชื่อมต่อจากที่อยู่ IP ของเซิร์ฟเวอร์ทาส iptables -I INPUT -p tcp --dport 3306 -j DROP -จากนั้นปฏิเสธการเชื่อมต่อจาก ที่อยู่ IP อื่นๆ ทั้งหมด ตอนนี้เราจะมีเซิร์ฟเวอร์ MySQL 2 เครื่องที่ทำงานในโหมดมาสเตอร์-สเลฟ ซึ่งเพิ่มความน่าเชื่อถือของไซต์ได้อย่างมาก และสำหรับไซต์ Drupal บางแห่งจะช่วยเพิ่มความเร็วในการทำงาน ในบทความถัดไป เราจะดูการสลับระหว่างโหมดหลักและโหมดทาสในกรณีที่เซิร์ฟเวอร์หลักล้มเหลว ฉันเริ่มคุ้นเคยกับการจำลองแบบของเซิร์ฟเวอร์ MySQL เมื่อไม่นานนี้ และในขณะที่ฉันทำการทดลองต่างๆ กับการกำหนดค่า ฉันก็จดบันทึกสิ่งที่ใช้ได้ผลสำหรับฉัน พอรวบรวมเนื้อหาได้ค่อนข้างมาก เลยเกิดไอเดียเขียนบทความนี้ขึ้นมา ฉันได้พยายามรวบรวมเคล็ดลับและวิธีแก้ปัญหาสำหรับปัญหาพื้นฐานที่สุดบางข้อที่ฉันพบ ฉันจะให้ลิงก์ไปยังเอกสารประกอบและแหล่งข้อมูลอื่นๆ ตลอดทาง ฉันไม่สามารถแกล้งทำเป็นอธิบายได้ทั้งหมด แต่ฉันหวังว่าบทความนี้จะมีประโยชน์ แนะนำสั้น ๆการจำลองแบบ (จากละติน replico - ฉันทำซ้ำ) คือการจำลองแบบของการเปลี่ยนแปลงข้อมูลจากเซิร์ฟเวอร์ฐานข้อมูลหลักไปยังเซิร์ฟเวอร์ที่ขึ้นต่อกันตั้งแต่หนึ่งเซิร์ฟเวอร์ขึ้นไป เราจะเรียกเซิร์ฟเวอร์หลัก ผู้เชี่ยวชาญและขึ้นอยู่กับ - แบบจำลอง.การเปลี่ยนแปลงข้อมูลที่เกิดขึ้นบนต้นแบบจะถูกทำซ้ำบนเรพลิกา (แต่ไม่ใช่ในทางกลับกัน) ดังนั้น การสืบค้นเพื่อเปลี่ยนแปลงข้อมูล (INSERT, UPDATE, DELETE ฯลฯ) จะถูกดำเนินการบนต้นแบบเท่านั้น ในขณะที่การสืบค้นเพื่ออ่านข้อมูล (หรืออีกนัยหนึ่งคือ SELECT) สามารถดำเนินการได้ทั้งบนแบบจำลองและต้นแบบ กระบวนการเรพลิเคชันบนเรพลิกาตัวใดตัวหนึ่งไม่ส่งผลต่อการทำงานของเรพลิกาอื่น และในทางปฏิบัติแล้วจะไม่ส่งผลกระทบต่อการทำงานของต้นแบบ การจำลองแบบจะดำเนินการโดยใช้บันทึกไบนารีที่เก็บรักษาไว้บนต้นแบบ โดยจะจัดเก็บการสืบค้นทั้งหมดที่นำไปสู่ (หรืออาจนำไปสู่) การเปลี่ยนแปลงในฐานข้อมูล (การสืบค้นจะไม่ได้รับการบันทึกอย่างชัดเจน ดังนั้น หากคุณต้องการดู คุณจะต้องใช้ยูทิลิตี mysqlbinlog) binlogs จะถูกถ่ายโอนไปยังเรพลิกา (binlog ที่ดาวน์โหลดจากต้นแบบเรียกว่า "relay binlog") และการสืบค้นที่เก็บไว้จะถูกดำเนินการโดยเริ่มจากตำแหน่งที่แน่นอน สิ่งสำคัญคือต้องเข้าใจว่าในระหว่างการจำลองแบบ ไม่ใช่ข้อมูลที่เปลี่ยนแปลงเท่านั้นที่ถูกถ่ายโอน แต่เป็นเพียงแบบสอบถามที่ทำให้เกิดการเปลี่ยนแปลงเท่านั้น ด้วยการจำลองแบบ เนื้อหาของฐานข้อมูลจะถูกทำซ้ำบนเซิร์ฟเวอร์หลายเครื่อง เหตุใดจึงต้องหันไปพึ่งการทำซ้ำ? มีสาเหตุหลายประการ:
กำลังตั้งค่าการจำลองสมมติว่าเรามีฐานข้อมูล MySQL ที่ใช้งานได้ ซึ่งเต็มไปด้วยข้อมูลและเปิดใช้งานแล้ว และด้วยเหตุผลประการหนึ่งที่อธิบายไว้ข้างต้น เราจะเปิดใช้งานการจำลองแบบเซิร์ฟเวอร์ของเรา ข้อมูลเริ่มต้นของเรา:
การตั้งค่าตัวช่วยสร้างอย่าลืมระบุ ID เซิร์ฟเวอร์ที่ไม่ซ้ำกัน เส้นทางสำหรับบันทึกไบนารี และชื่อของฐานข้อมูลสำหรับการจำลองในส่วน:เซิร์ฟเวอร์-id = 1 log-bin = /var/lib/mysql/mysql-bin ทำซ้ำ-do-db = testdb ตรวจสอบให้แน่ใจว่าคุณมีพื้นที่ดิสก์เพียงพอสำหรับบันทึกไบนารี มาเพิ่มผู้ใช้การจำลองแบบซึ่งจะดำเนินการจำลองแบบสิทธิ์ สิทธิ์ "การจำลองแบบทาส" จะเพียงพอแล้ว: รีบูต MySQL เพื่อให้การเปลี่ยนแปลงในการกำหนดค่ามีผล: หากทุกอย่างเป็นไปด้วยดี คำสั่ง "show master status" ควรแสดงดังนี้: การตั้งค่าการจำลองมาระบุ ID เซิร์ฟเวอร์ ชื่อของฐานข้อมูลสำหรับการจำลอง และเส้นทางไปยังรีเลย์บินล็อกในส่วนการกำหนดค่า จากนั้นโหลด MySQL อีกครั้ง:เซิร์ฟเวอร์-id = 2 รีเลย์-log = /var/lib/mysql/mysql-relay-bin รีเลย์บันทึกดัชนี = /var/lib/mysql/mysql-relay-bin.index ทำซ้ำ-do-db = testdb Root@replica# บริการ mysqld รีสตาร์ท กำลังถ่ายโอนข้อมูลที่นี่เราจะต้องล็อคฐานข้อมูลสำหรับการเขียน ในการดำเนินการนี้ คุณสามารถหยุดแอปพลิเคชันหรือใช้แฟล็ก read_only บนต้นแบบได้ (โปรดทราบ: แฟล็กนี้ไม่มีผลกับผู้ใช้ที่มีสิทธิ์ SUPER) หากเรามีตาราง MyISAM เรามา "ล้างตาราง" ด้วย:mysql@master> ล้างตารางพร้อมล็อคการอ่าน; mysql@master> SET GLOBAL read_only = เปิด; มาดูสถานะของมาสเตอร์ด้วยคำสั่ง “แสดงสถานะมาสเตอร์” และจดจำค่าไฟล์และตำแหน่ง (หลังจากบล็อคมาสเตอร์สำเร็จแล้ว ไม่ควรเปลี่ยนแปลง): เราดัมพ์ฐานข้อมูล และหลังจากการดำเนินการเสร็จสิ้น เราจะลบการล็อกของต้นแบบออก: เราถ่ายโอนดัมพ์ไปยังเรพลิกาและกู้คืนข้อมูลจากมัน มาดูกันว่าการจำลองเกิดขึ้นอย่างไรด้วยคำสั่ง "แสดงสถานะทาส": ฉันได้เน้นถึงคุณค่าที่น่าสนใจที่สุดแล้ว หากการจำลองเริ่มต้นได้สำเร็จ ค่าควรใกล้เคียงกับในรายการ (ดูคำอธิบายของคำสั่ง "แสดงสถานะทาส" ในเอกสารประกอบ) ค่า Seconds_Behind_Master สามารถเป็นจำนวนเต็มใดก็ได้ ด้วยขั้นตอนง่ายๆ เหล่านี้ เราจะได้รับแบบจำลองที่มีข้อมูลเหมือนกับข้อมูลบนต้นแบบ
การเพิ่มแบบจำลองสมมติว่าเรามีต้นแบบและแบบจำลองที่ใช้งานได้อยู่แล้ว และเราจำเป็นต้องเพิ่มอีกอันหนึ่งให้กับพวกมัน ซึ่งทำได้ง่ายกว่าการเพิ่มเรพลิกาแรกให้กับต้นแบบ และสิ่งที่ดีกว่ามากคือไม่จำเป็นต้องหยุดอาจารย์ในเรื่องนี้ขั้นแรก มากำหนดค่า MySQL บนเรพลิกาที่สอง และตรวจสอบให้แน่ใจว่าเราได้ป้อนพารามิเตอร์ที่จำเป็นลงในการกำหนดค่าแล้ว: เซิร์ฟเวอร์-id = 3 ทำซ้ำ-do-db = testdb ตอนนี้เรามาหยุดการจำลองแบบในการจำลองครั้งแรก: แบบจำลองจะยังคงทำงานตามปกติ แต่ข้อมูลในแบบจำลองจะไม่เป็นปัจจุบันอีกต่อไป มาดูสถานะและจำตำแหน่งหลักที่เรพลิกาไปถึงก่อนที่จะหยุดการจำลอง: ค่าที่เราต้องการคือ Master_Log_File และ Exec_Master_Log_Pos: มาสร้างดัมพ์ฐานข้อมูลและจำลองแบบต่อในแบบจำลองแรก: มาคืนค่าข้อมูลจากดัมพ์บนเรพลิกาที่สองกัน จากนั้นเปิดใช้งานการจำลองแบบ: ค่า MASTER_LOG_FILE และ MASTER_LOG_POS คือค่า Master_Log_File และ Exec_Master_Log_Pos ตามลำดับ จากผลลัพธ์ของคำสั่ง “แสดงสถานะทาส” ในเรพลิกาแรก การรวมแบบจำลองบางครั้งสถานการณ์ต่อไปนี้เกิดขึ้น: มีสองฐานข้อมูลบนต้นแบบ ซึ่งหนึ่งในนั้นจะถูกจำลองแบบบนแบบจำลองหนึ่ง และฐานข้อมูลที่สองอยู่บนอีกแบบจำลอง วิธีการตั้งค่าการจำลองแบบของฐานข้อมูลทั้งสองบนแบบจำลองทั้งสองโดยไม่ต้องทิ้งลงบนต้นแบบหรือปิดระบบ ค่อนข้างง่ายโดยใช้คำสั่ง "startทาสจนกระทั่ง"ดังนั้นเราจึงมีต้นแบบที่มีฐานข้อมูล testdb1 และ testdb2 ซึ่งจำลองแบบบนแบบจำลอง Replica-1 และ Replica-2 ตามลำดับ มากำหนดค่าการจำลองแบบของฐานข้อมูลทั้งสองเป็นแบบจำลอง 1 โดยไม่หยุดต้นแบบ หยุดการจำลองบน Replica-2 ด้วยคำสั่งและจดจำตำแหน่งของต้นแบบ: mysql@replica-2> หยุดทาส; mysql@replica-2> แสดงสถานะทาส\G Master_Log_File: mysql-bin.000015 Exec_Master_Log_Pos: 231 มาสร้างดัมพ์ของฐานข้อมูล testdb2 และดำเนินการจำลองต่อ (ซึ่งเสร็จสิ้นการจัดการด้วย Replica-2) เราจะคืนค่าดัมพ์เป็นแบบจำลอง-1 สถานการณ์บน Replica-1 เป็นเช่นนี้: ฐานข้อมูล testdb1 อยู่ที่ตำแหน่งหลักหนึ่งตำแหน่งและยังคงทำซ้ำต่อไป ฐานข้อมูล testdb2 ได้รับการกู้คืนจากดัมพ์จากตำแหน่งอื่น มาซิงโครไนซ์กัน หยุดการจำลองแบบและจำตำแหน่งของต้นแบบ: ตรวจสอบให้แน่ใจว่าในการกำหนดค่าสำหรับ Replica-1 ชื่อของฐานข้อมูลที่สองระบุไว้ในส่วน: มารีบูต MySQL เพื่อให้การเปลี่ยนแปลงในการกำหนดค่ามีผล อย่างไรก็ตาม เราสามารถรีสตาร์ท MySQL ได้โดยไม่ต้องหยุดการจำลอง - จากบันทึก เราจะรู้ว่าตำแหน่งใดในต้นแบบที่หยุดการจำลอง ตอนนี้เรามาจำลองจากตำแหน่งที่ Replica-2 หยุดชั่วคราวไปยังตำแหน่งที่เราเพิ่งหยุดการจำลองชั่วคราว: การจำลองจะสิ้นสุดทันทีที่แบบจำลองถึงตำแหน่งที่ระบุในส่วนจนถึง หลังจากนั้นฐานข้อมูลทั้งสองของเราจะสอดคล้องกับตำแหน่งหลักเดียวกัน (ซึ่งเราหยุดการจำลองบนแบบจำลอง-1) มาตรวจสอบให้แน่ใจกัน: มาเพิ่มชื่อของทั้งสองฐานข้อมูลในการกำหนดค่าสำหรับแบบจำลอง-1 ในส่วน: สิ่งสำคัญ: แต่ละฐานข้อมูลจะต้องอยู่ในรายการแยกบรรทัด ต้นแบบการหล่อและแบบจำลองอาจจำเป็นต้องเปลี่ยนเรพลิกาเป็นโหมดมาสเตอร์ เช่น ในกรณีที่มาสเตอร์ล้มเหลวหรือเมื่อทำงานด้านเทคนิค เพื่อให้สวิตช์ดังกล่าวเป็นไปได้ คุณต้องกำหนดค่าเรพลิกาเหมือนต้นแบบหรือสร้างมันขึ้นมา ต้นแบบที่ไม่โต้ตอบ.มาเปิดใช้งานการบันทึกไบนารี (นอกเหนือจากการถ่ายทอด binlogs) ในการกำหนดค่าในส่วน: และเพิ่มผู้ใช้สำหรับการจำลองแบบ: ต้นแบบแบบพาสซีฟดำเนินการจำลองแบบเหมือนกับแบบจำลองทั่วไป แต่นอกเหนือจากนั้นยังสร้างบันทึกไบนารี - นั่นคือเราสามารถเริ่มการจำลองแบบจากแบบจำลองนั้นได้ มาตรวจสอบสิ่งนี้ด้วยคำสั่ง "show master status": ตอนนี้ เพื่อที่จะเปลี่ยนพาสซีฟมาสเตอร์เป็นโหมดแอคทีฟ คุณต้องหยุดการจำลองบนมาสเตอร์นั้นและเปิดใช้งานการจำลองบนมาสเตอร์แอคทีฟเดิม เพื่อให้แน่ใจว่าข้อมูลจะไม่สูญหายในขณะที่เปลี่ยน ต้นแบบที่ใช้งานอยู่จะต้องล็อคการเขียน บทสรุปเราได้เรียนรู้มาบ้างเล็กน้อยเกี่ยวกับวิธีตั้งค่าการจำลองแบบใน MySQL และดำเนินการขั้นพื้นฐานบางอย่าง ขออภัย คำถามสำคัญต่อไปนี้อยู่นอกขอบเขตของบทความนี้:
ขอบคุณสำหรับความสนใจของคุณ! แท็ก: เพิ่มแท็ก การจำลองแบบเป็นกลไกในการซิงโครไนซ์เนื้อหาของอ็อบเจ็กต์หลายชุด กระบวนการนี้หมายถึงการคัดลอกข้อมูลจากแหล่งหนึ่งไปยังอีกแหล่งหนึ่งและในทางกลับกัน การกำหนด:
หากต้องการตั้งค่าการจำลองแบบใน MySQL คุณต้องปฏิบัติตามลำดับการดำเนินการที่อธิบายไว้ด้านล่าง แต่นี่ไม่ใช่ความเชื่อและพารามิเตอร์สามารถเปลี่ยนแปลงได้ขึ้นอยู่กับสถานการณ์ บนเซิร์ฟเวอร์หลัก แก้ไขไฟล์ my.cnf และเพิ่มบรรทัดต่อไปนี้ในส่วน mysqld: Server-id = log-bin = mysql-bin log-bin-index = mysql-bin.index log-error = mysql-bin.err รีเลย์-log = รีเลย์-bin รีเลย์-log-info-file = รีเลย์-bin ข้อมูลรีเลย์-log-index = รีเลย์-bin.indexหมดอายุ_logs_days=7 binlog-do-db =
บนทาส ให้แก้ไขไฟล์ my.cnf และเพิ่มบรรทัดต่อไปนี้ในส่วน mysqld: Server-id = master-host = master master-user = การจำลองแบบ master-password = รหัสผ่าน master-port = 3306 รีเลย์-log = รีเลย์-bin รีเลย์-log-info-file = รีเลย์-log.info รีเลย์-log-index = รีเลย์-log.index ทำซ้ำ-do-db = บนเซิร์ฟเวอร์หลัก ให้เพิ่มผู้ใช้การจำลองแบบที่มีสิทธิ์การจำลองข้อมูล: ให้สิทธิ์การจำลองแบบ SLAVE บน *.* ถึง "replication"@"replica" ที่ระบุโดย "รหัสผ่าน" มาบล็อกฐานข้อมูลที่จำลองแบบบนเซิร์ฟเวอร์หลักจากการเปลี่ยนแปลงข้อมูล โดยทางโปรแกรมหรือการใช้ฟังก์ชัน MySQL: Mysql@master> ล้างตารางพร้อมล็อคการอ่าน; mysql@master> SET GLOBAL read_only = เปิด; หากต้องการปลดล็อคให้ใช้คำสั่ง: Mysql@master> SET GLOBAL read_only = ปิด; มาสร้างสำเนาสำรองของฐานข้อมูลทั้งหมดบนเซิร์ฟเวอร์หลัก (หรือที่เราต้องการ): รูต@มาสเตอร์# tar -czf mysqldir.tar.gz /var/lib/mysql/ หรือใช้ยูทิลิตี้ mysqldump: Root@master# mysqldump -u root -p --lock-all-tables > dbdump.sql มาหยุดเซิร์ฟเวอร์ทั้งสองกัน (ในบางกรณีคุณสามารถทำได้โดยไม่ต้องใช้มัน): Root@master# mysqlamdin -u root -p ปิดระบบ root@replica# mysqlamdin -u root -p ปิดระบบ มาคืนค่าฐานข้อมูลที่จำลองแบบบนเซิร์ฟเวอร์ทาสโดยการคัดลอกไดเร็กทอรี ก่อนเริ่มการจำลองแบบ ฐานข้อมูลจะต้องเหมือนกัน: Root@replica# cd /var/lib/mysql root@replica# tar -xzf mysqldir.tar.gz หรือการทำงานของ mysql ก็ไม่จำเป็นต้องหยุด mysql บนเซิร์ฟเวอร์ทาส: Root@replica# mysql -u root -p< dbdump.sql มารัน mysql บนเซิร์ฟเวอร์หลัก (และบนเซิร์ฟเวอร์ทาสหากจำเป็น): Root@master# /etc/init.d/mysql เริ่มต้น root@replica# /etc/init.d/mysql เริ่มต้น มาตรวจสอบการทำงานของเซิร์ฟเวอร์หลักและเซิร์ฟเวอร์ทาส: Mysql@replica> เริ่มทาส; mysql@replica> แสดงสถานะทาส\G mysql@master> แสดงสถานะหลัก\G บนเซิร์ฟเวอร์ทาส ให้ตรวจสอบบันทึกในไฟล์ master.info ซึ่งควรมีคำขอให้เปลี่ยนแปลงข้อมูลในฐานข้อมูล ดังนั้นไฟล์ไบนารี่นี้จะต้องถูกแปลงเป็นรูปแบบข้อความก่อน: Root@replica# mysqlbinlog master.info > master_info.sql หากเกิดข้อผิดพลาด คุณสามารถใช้คำสั่ง: Mysql@replica> หยุดทาส; mysql@replica> รีเซ็ตทาส; mysql@master> รีเซ็ตมาสเตอร์; และทำซ้ำทุกขั้นตอนโดยเริ่มจากการบล็อกฐานข้อมูล หากต้องการเพิ่มเซิร์ฟเวอร์การจำลองแบบด่วน คุณสามารถใช้ไวยากรณ์ต่อไปนี้: Mysql@replica> แสดงสถานะ SLAVE\G mysql@master> แสดงสถานะหลัก\G mysql@replica-2> เปลี่ยน MASTER เป็น MASTER_HOST = "master", MASTER_USER ="replication", MASTER_PASSWORD = "password", MASTER_LOG_FILE ="mysql- bin.000004 ", MASTER_LOG_POS = 155; mysql@replica-2> เริ่มทาส; ข้อมูลจากสถานะจะแสดงตำแหน่งและชื่อ ไฟล์ปัจจุบันบันทึก. ด้วยการจำลองแบบอะซิงโครนัส การอัปเดตจากแบบจำลองหนึ่งจะถูกเผยแพร่ไปยังแบบจำลองอื่นหลังจากผ่านไประยะหนึ่ง แทนที่จะเป็นในธุรกรรมเดียวกัน ดังนั้นการจำลองแบบอะซิงโครนัสทำให้เกิดเวลาแฝงหรือเวลารอ ซึ่งในระหว่างนั้นแบบจำลองแต่ละรายการอาจไม่เหมือนกันอย่างมีประสิทธิผล แต่การจำลองประเภทนี้ก็มีข้อดีเช่นกัน: เซิร์ฟเวอร์หลักไม่จำเป็นต้องกังวลเกี่ยวกับการซิงโครไนซ์ข้อมูล คุณสามารถบล็อกฐานข้อมูลได้ (เช่น เพื่อสร้าง สำเนาสำรอง) บนเครื่องทาส ไม่มีปัญหาสำหรับผู้ใช้ รายชื่อแหล่งที่มาที่ใช้
เมื่อใช้เนื้อหาใดๆ จากไซต์ทั้งหมดหรือบางส่วน คุณต้องระบุลิงก์ไปยังแหล่งที่มาอย่างชัดเจน ทุกวันนี้ฐานข้อมูล MySQL ถูกใช้เกือบทุกที่ที่เป็นไปได้ เป็นไปไม่ได้เลยที่จะจินตนาการถึงเว็บไซต์ที่จะทำงานได้หากไม่มี MySQL แน่นอนว่ายังมีข้อยกเว้นอยู่บ้าง แต่ตลาดส่วนใหญ่ถูกครอบครองโดยระบบฐานข้อมูลนี้ และการใช้งานที่ได้รับความนิยมมากที่สุดคือ MariaDB เมื่อโปรเจ็กต์มีขนาดเล็ก เซิร์ฟเวอร์เดียวก็เพียงพอที่จะรันได้ ซึ่งเป็นที่ตั้งของบริการทั้งหมด: เว็บเซิร์ฟเวอร์ เซิร์ฟเวอร์ฐานข้อมูล และ เมลเซิร์ฟเวอร์- แต่เมื่อโปรเจ็กต์มีขนาดใหญ่ขึ้น คุณอาจต้องจัดสรรเซิร์ฟเวอร์แยกต่างหากสำหรับแต่ละบริการ หรือแม้แต่แบ่งบริการหนึ่งออกเป็นหลายเซิร์ฟเวอร์ เช่น MySQL เพื่อรักษาสถานะซิงโครนัสของฐานข้อมูลบนเซิร์ฟเวอร์ทั้งหมดพร้อมกัน คุณต้องใช้การจำลอง ในบทความนี้เราจะดูวิธีกำหนดค่าการจำลองแบบ MySQL โดยใช้ MariaDB Galera Cluster MARIADB GALERA คืออะไร?MariaDB Galera คือระบบคลัสเตอร์มาสเตอร์-มาสเตอร์สำหรับ MariaDB ตั้งแต่ MariaDB 10.1.1 ซอฟต์แวร์ Galera Server และ MariaDB Server มาในแพ็คเกจเดียว ดังนั้นคุณจะได้รับซอฟต์แวร์ทั้งหมดที่คุณต้องการทันที บน ในขณะนี้ MariaDB Galera สามารถทำงานได้กับกลไกฐานข้อมูล InnoDB และ XtraDB เท่านั้น ข้อดีประการหนึ่งของการใช้การจำลองแบบคือการเพิ่มความซ้ำซ้อนให้กับฐานข้อมูลของไซต์ หากฐานข้อมูลใดฐานข้อมูลหนึ่งล้มเหลว คุณสามารถสลับไปยังฐานข้อมูลอื่นได้ทันที เซิร์ฟเวอร์ทั้งหมดจะรักษาสถานะการซิงโครไนซ์ระหว่างกันและรับรองว่าไม่มีธุรกรรมที่สูญหาย คุณสมบัติที่สำคัญของ MariaDB Galera:
การกำหนดค่าการจำลอง MySQLในบทช่วยสอนนี้ เราจะใช้ Ubuntu 16.04 และ MariaDB เวอร์ชัน 10.1 เป็นตัวอย่าง ก่อนที่คุณจะเริ่มต้น ให้อัพเดตระบบของคุณโดยสมบูรณ์: sudo apt-get อัปเดต -y เนื่องจากเราจะปรับใช้การกำหนดค่าของเรากับหลายโหนด เราจึงต้องดำเนินการอัปเดตกับโหนดทั้งหมด หากยังไม่ได้ติดตั้งเซิร์ฟเวอร์ฐานข้อมูล MariaDB คุณจะต้องติดตั้ง ขั้นแรกให้เพิ่มที่เก็บและรหัส: sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8 sudo add-apt-repository "deb http://ftp.utexas.edu/mariadb/repo/10.1/ubuntu xenial หลัก" sudo apt-get อัปเดต -y เมื่อการอัพเดตรายการแพ็คเกจเสร็จสมบูรณ์ ให้ติดตั้ง MariaDB ด้วยคำสั่ง: sudo apt ติดตั้งเซิร์ฟเวอร์ mariadb rsync -y เราจะต้องมีแพ็คเกจ rsync เพื่อทำการซิงโครไนซ์โดยตรง เมื่อการติดตั้งเสร็จสมบูรณ์ คุณจะต้องรักษาความปลอดภัยฐานข้อมูลโดยใช้สคริปต์ mysql_secure_installation: sudo mysql_secure_installation ตามค่าเริ่มต้น อนุญาตให้ผู้มาเยือนเข้าสู่ระบบได้ มีฐานข้อมูลทดสอบ และไม่มีการตั้งรหัสผ่านสำหรับผู้ใช้รูท ทั้งหมดนี้ต้องได้รับการแก้ไข อ่านเพิ่มเติมในบทความ กล่าวโดยสรุป คุณจะต้องตอบคำถามสองสามข้อ: ป้อนรหัสผ่านปัจจุบันสำหรับรูท (ไม่ต้องป้อน): ย ลบฐานข้อมูลทดสอบและเข้าถึงได้หรือไม่ย โหลดตารางสิทธิพิเศษตอนนี้เลยไหม
wsrep_on=เปิด wsrep_sst_method=rsync
wsrep_cluster_name="galera_cluster"
การตั้งค่าการจำลองแบบ MySQL เกือบเสร็จสมบูรณ์แล้ว ขั้นตอนสุดท้ายก่อนการเปิดตัวคือการตั้งค่าไฟร์วอลล์ ขั้นแรกให้เปิดใช้งานเครื่องมือการจัดการกฎ iptables ใน Ubuntu - UFW: จากนั้นเปิดพอร์ตต่อไปนี้: sudo ufw อนุญาต 3306/tcp เปิดตัว มาเรียดีบี กาเลราหลังจากตั้งค่าโหนดทั้งหมดสำเร็จแล้ว สิ่งที่เราต้องทำคือเปิดใช้คลัสเตอร์ Galera บนโหนดแรก ก่อนที่เราจะเริ่มคลัสเตอร์ได้ คุณต้องแน่ใจว่าบริการ MariaDB หยุดทำงานบนเซิร์ฟเวอร์ทั้งหมดก่อน: sudo galera_new_cluster คุณสามารถตรวจสอบว่าคลัสเตอร์กำลังทำงานอยู่และมีกี่เครื่องที่เชื่อมต่อกับคลัสเตอร์ด้วยคำสั่ง: ขณะนี้มีเพียงเครื่องเดียวเท่านั้น ตอนนี้ไปที่เซิร์ฟเวอร์อื่นและรันโหนดที่นั่น: sudo systemctl เริ่ม mysql คุณสามารถตรวจสอบว่าการเปิดตัวสำเร็จหรือไม่และมีข้อผิดพลาดใด ๆ ด้วยคำสั่ง: sudo systemctl สถานะ mysql จากนั้น ด้วยการรันคำสั่งเดียวกัน คุณจะตรวจสอบว่าโหนดใหม่ถูกเพิ่มลงในคลัสเตอร์โดยอัตโนมัติ: mysql -u root -p -e "แสดงสถานะเช่น "wsrep_cluster_size"" หากต้องการตรวจสอบวิธีการทำงานของการจำลอง เพียงสร้างฐานข้อมูลบนโหนดแรกแล้วดูว่ามีการเพิ่มไปยังโหนดอื่นๆ ทั้งหมดจริงหรือไม่: mysql -u รูท -p MariaDB [(ไม่มี)]> สร้างฐานข้อมูล test_db; mysql -u รูท -p MariaDB [(none)]> แสดงฐานข้อมูล; อย่างที่คุณเห็น ฐานข้อมูลนั้นปรากฏขึ้นโดยอัตโนมัติบนเครื่องอื่น การจำลองข้อมูล Mysql กำลังทำงาน |
อ่าน: |
---|
ใหม่
- ผู้จัดการเนื้อหา - ความรับผิดชอบ เงินเดือน การฝึกอบรม ข้อเสียและข้อดีของการทำงานเป็นผู้เชี่ยวชาญด้านเนื้อหา
- จะป้องกันตัวเองจากการขุดที่ซ่อนอยู่ในเบราว์เซอร์ของคุณได้อย่างไร?
- การกู้คืนรหัสผ่านใน Ask
- วิธีเปิดกล้องบนแล็ปท็อป
- ทำไมเพลงไม่เล่นบน VKontakte?
- วิธีเพิ่มขนาดของไดรฟ์ C โดยเสียค่าใช้จ่ายของไดรฟ์ D โดยไม่สูญเสียข้อมูล
- สาเหตุของการทำงานผิดพลาดบนเมนบอร์ด หากชิปเซ็ตบนเมนบอร์ดเกิดไฟไหม้
- ชื่อเดิมสำหรับการแชท
- การใช้สไตล์ใน Excel วิธีสร้างสไตล์ใหม่ของคุณเอง
- เกิดข้อผิดพลาดอะไรระหว่างการติดตั้ง?