วิธีการตั้งค่าการจำลองแบบ MariaDB (Master-Slave) ใน CentOS/RHEL 7 และ Debian 8/9
แม้ว่าเจ้าหน้าที่ไอทีบางคนได้ยินวลี “การจำลองฐานข้อมูล“ พวกเขามักจะเชื่อมโยงกับความจำเป็นที่ต้องมีสำเนาข้อมูลเดียวกันหลายชุดเพื่อหลีกเลี่ยงการสูญหายของข้อมูลในกรณีที่ฮาร์ดแวร์ล้มเหลวหรือข้อมูลเสียหาย แม้ว่าสิ่งนั้นจะเป็นจริงในระดับหนึ่ง แต่ก็มีการจำลองฐานข้อมูลมากกว่าแนวคิดทั่วไปในการสำรองฐานข้อมูลและความพร้อมใช้งานของข้อมูล
ท่ามกลางประโยชน์อื่นๆ ของการจำลองฐานข้อมูลในการตั้งค่ามาสเตอร์-สเลฟ เราสามารถพูดถึง:
- การสำรองข้อมูลสามารถทำได้บนเซิร์ฟเวอร์ทาสโดยไม่ส่งผลกระทบ (และได้รับผลกระทบจาก) การดำเนินการเขียนในเซิร์ฟเวอร์หลัก
- การดำเนินการที่ต้องใช้ทรัพยากรมาก (เช่น การวิเคราะห์ข้อมูล) สามารถดำเนินการได้บนสเลฟ โดยไม่กระทบต่อประสิทธิภาพของมาสเตอร์
ในบทความนี้ เราจะอธิบายวิธีการตั้งค่าการจำลองแบบหลัก-รองใน MariaDB 10.1 ตรงข้ามกับการจำลองแบบคลาสสิก MariaDB นำเสนอแนวคิดของ รหัสธุรกรรมทั่วโลก (GTIDs) ใน v10.0 ซึ่งอนุญาตให้เปลี่ยนทาสเป็น เชื่อมต่อและทำซ้ำจากต้นแบบอื่นได้อย่างง่ายดาย ยิ่งไปกว่านั้น สถานะของทาสจะถูกบันทึกในลักษณะที่ปลอดภัย (การอัปเดตสถานะจะทำในธุรกรรมเดียวกันกับการอัปเดตข้อมูล)
หากคุณกำลังมองหาการจำลอง MySQL ภายใต้ CentOS/RHEL 6 ให้ทำตามคำแนะนำนี้ ตั้งค่าการจำลอง MySQL (Master-Slave) บน CentOS/RHEL 6
การติดตั้ง MariaDB 10.1 ใน CentOS/RHEL 7 และ Debian 8/9
สภาพแวดล้อมการทดสอบของเราประกอบด้วยเครื่องดังต่อไปนี้ (ทั้งสองเครื่องคือ CentOS 7):
Master: 192.168.0.18
Slave: 192.168.0.19
หากต้องการติดตั้ง MariaDB เวอร์ชันล่าสุด เราจะต้องเพิ่มพื้นที่เก็บข้อมูลลงในเซิร์ฟเวอร์ของเรา หากคุณใช้ MariaDB เวอร์ชันเก่าว่า 5.5 ให้พิจารณาอัปเกรดเป็นเวอร์ชัน 10.1 ล่าสุดโดยใช้บทความด้านล่าง
- อัปเกรด MariaDB 5.5 เป็น MariaDB 10.1
ใน CentOS/RHEL
สร้างไฟล์ชื่อ MariaDB.repo
ภายใน /etc/yum.repos.d โดยมีเนื้อหาต่อไปนี้ทั้งบน Master และ Slaveแข็งแกร่ง> ระบบ:
MariaDB 10.1 CentOS repository list - created 2016-01-23 14:16 UTC
http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
บันทึกไฟล์และติดตั้ง MariaDB บนเซิร์ฟเวอร์ทั้งสองโดยใช้ yum:
yum update && yum install MariaDB-server MariaDB-client
ในเดเบียน/อูบุนตู
เพิ่มคีย์เพื่อตรวจสอบแพ็กเกจและที่เก็บ MariaDB:
apt-get install software-properties-common
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
add-apt-repository 'deb [arch=amd64,i386] http://mirror.edatel.net.co/mariadb/repo/10.1/debian jessie main'
หมายเหตุ: แทนที่การแจกจ่าย ชื่อ และ ชื่อรหัส ในบรรทัดที่ไฮไลต์ด้านบน
ติดตั้งโดยใช้คำสั่ง apt-get:
apt-get update
apt-get install mariadb-server
เมื่อคุณติดตั้ง MariaDB แล้ว ให้รันโพรซีเดอร์ mysql_secure_installation
ทั้งบนเครื่องหลักและรอง เรามาตั้งค่าฐานข้อมูลทดสอบตัวอย่างในเครื่องหลักกัน
การตั้งค่าฐานข้อมูล MySQL ตัวอย่างบน Master
ตอนนี้เราจะตั้งค่าฐานข้อมูล พนักงาน
ในเซิร์ฟเวอร์หลักจาก https://github.com/datacharmer/test_db (ซึ่งมีชุดข้อมูล 4 แข็งแกร่ง> ล้านบันทึกกระจายอยู่บนหกตาราง) ในสองขั้นตอนง่ายๆ:
โคลนพื้นที่เก็บข้อมูลและใช้เพื่อนำเข้าฐานข้อมูลตัวอย่างไปยังการติดตั้ง MariaDB ของคุณ:
git clone https://github.com/datacharmer/test_db
cd test_db
mysql < employees.sql
การกำหนดค่าเซิร์ฟเวอร์ MySQL บน Master
ในการกำหนดค่าหลัก ให้ทำตามขั้นตอนเหล่านี้:
ขั้นตอนที่ 1: แก้ไขไฟล์ /etc/my.cnf
ใต้ส่วน [mysqld]
ให้เพิ่มสี่บรรทัดต่อไปนี้:
log-bin
server_id=1
replicate-do-db=employees
bind-address=192.168.0.18
และรีสตาร์ท MariaDB:
systemctl restart mariadb
ขั้นตอนที่ 2: เข้าสู่ระบบเซิร์ฟเวอร์ MariaDB ในฐานะรูท สร้างทาสผู้ใช้ และกำหนดสิทธิ์ที่จำเป็น:
MariaDB [(none)]> CREATE USER 'slave'@'localhost' IDENTIFIED BY 'SlavePassword';
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO slave IDENTIFIED BY 'SlavePassword' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
MariaDB [(none)]> SHOW MASTER STATUS;
คำสั่ง สุดท้าย (SHOW MASTER STATUS) ส่งคืนตำแหน่งปัจจุบันในบันทึกไบนารี่ (พิกัดที่แน่นอนที่ระบุว่าจุดใดที่ทาสควรเริ่มจำลองจาก:
ขั้นตอนที่ 3: ออกจากพรอมต์ MariaDB (ด้วย exit;
) และใช้คำสั่งต่อไปนี้เพื่อถ่ายภาพฐานข้อมูลพนักงาน เมื่อคุณกด Enter คุณจะได้รับแจ้งให้พิมพ์รหัสผ่านสำหรับรูทที่คุณตั้งค่าไว้ก่อนหน้านี้ผ่าน mysql_secure_installation
:
mysqldump -u root -p employees > employees-dump.sql
หลังจากดัมพ์เสร็จสิ้น ให้เชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูลอีกครั้งเพื่อปลดล็อกตาราง จากนั้นออกจากระบบ:
MariaDB [(none)]> UNLOCK TABLES;
MariaDB [(none)]> exit;
ขั้นตอนที่ 4: คัดลอกดัมพ์ไปยังทาส:
scp employees-dump.sql [email :/root/
ขั้นตอนที่ 5: เรียกใช้ขั้นตอน mysql_upgrade
เพื่ออัปเกรดตารางระบบ (คุณจะได้รับแจ้งให้ป้อนรหัสผ่านรูท MariaDB):
mysql_upgrade -u root -p
ขั้นตอนที่ 6: อนุญาตบริการฐานข้อมูลผ่านไฟร์วอลล์:
firewall-cmd --add-service=mysql
firewall-cmd --add-service=mysql --permanent
firewall-cmd --reload
ตอนนี้มากำหนดค่าทาสกัน
การกำหนดค่าเซิร์ฟเวอร์ MySQL บนทาส
ในการกำหนดค่าทาส ให้ทำตามขั้นตอนเหล่านี้:
ขั้นตอนที่ 1: สร้างบัญชีเพื่อดำเนินการจำลองแบบ เชื่อมต่อกับเซิร์ฟเวอร์ MariaDB ในเครื่องด้วย:
mysql -u root –p
และป้อนรหัสผ่านที่คุณตั้งไว้ก่อนหน้านี้
ขั้นตอนที่ 2: เมื่อเชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูลแล้ว ให้สร้างผู้ใช้และฐานข้อมูลว่าง และให้สิทธิ์:
MariaDB [(none)]> CREATE DATABASE employees;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON employees.* TO 'slave'@'localhost' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
ขั้นตอนที่ 3: ออกจากพรอมต์ MariaDB และโหลดดัมพ์ที่สร้างในเซิร์ฟเวอร์หลัก:
mysql -u root -p employees < employees-dump.sql
ขั้นตอนที่ 4: แก้ไขไฟล์ /etc/my.cnf
เพื่อกำหนดเซิร์ฟเวอร์ ID ให้กับทาสภายใต้ [mysqld]
ส่วน โปรดทราบว่าจะต้องเป็นจำนวนเต็มที่แตกต่างจาก 1 ตามที่เราใช้ 1 ในต้นแบบ:
server_id=2
replicate-do-db=employees
รีสตาร์ทเซิร์ฟเวอร์ฐานข้อมูล:
systemctl restart mariadb
ขั้นตอนที่ 5: เรียกใช้ขั้นตอน mysql_upgrade
เพื่ออัปเกรดตารางระบบ (คุณจะได้รับแจ้งให้ป้อนรหัสผ่านรูท MariaDB):
mysql_upgrade -u root -p
ขั้นตอนที่ 6: เมื่อนำเข้าดัมพ์ไปยังทาสแล้ว เหลือเพียงไม่กี่ขั้นตอนในการเริ่มต้นการจำลอง เข้าสู่ระบบฐานข้อมูลและรันคำสั่งต่อไปนี้ในพรอมต์ MariaDB ให้ความสนใจเป็นพิเศษกับตัวแปร MASTER_LOG_FILE
และ MASTER_LOG_POS
ซึ่งควรตรงกับค่าที่ส่งกลับโดย SHOW MASTER STATUS ในขั้นตอนที่ 2 ของ “การกำหนดค่าหลัก” ข้างบน.
MariaDB [(none)]> CHANGE MASTER TO
MASTER_HOST='192.168.0.18',
MASTER_USER='slave',
MASTER_PASSWORD='SlavePassword',
MASTER_PORT=3306,
MASTER_LOG_FILE='master-bin.000001',
MASTER_LOG_POS=314,
MASTER_CONNECT_RETRY=10,
MASTER_USE_GTID=current_pos;
ขั้นตอนที่ 7: เริ่มต้นทาสและตรวจสอบสถานะโดยไม่ต้องออกจากพรอมต์ MariaDB:
MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G;
ไม่ใช่ว่าคุณต้องการสิ่งนี้ตอนนี้ แต่โปรดทราบว่าคุณสามารถหยุดทาสได้ด้วย:
MariaDB [(none)]> STOP SLAVE;
หากคำสั่ง SHOW SLAVE STATUS\G;
ส่งกลับข้อผิดพลาดใดๆ ใช้ข้อผิดพลาดเหล่านั้นเพื่อแก้ไขปัญหาแล้วเรียกใช้ START SLAVE;
เพื่อทดสอบอีกครั้ง
ทดสอบการจำลองฐานข้อมูล MySQL/MariaDB
มาเพิ่มบันทึกลงในตาราง พนักงาน ในเซิร์ฟเวอร์หลัก:
MariaDB [(none)]> INSERT INTO employees (emp_no, birth_date, first_name, last_name, gender, hire_date) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');
จากนั้นตรวจสอบว่าการเปลี่ยนแปลงนี้ถูกจำลองแบบในทาส:
MariaDB [(none)]> USE employees;
MariaDB [(none)]> SELECT * FROM employees WHERE emp_no=500000;
อย่างที่คุณเห็น การจำลองแบบทำงานอย่างถูกต้องตั้งแต่ต้นแบบไปจนถึงทาส
สรุป
ในบทความนี้ เราได้อธิบายวิธีติดตั้ง MariaDB เวอร์ชันล่าสุดใน CentOS/RHEL 7 และ Debian 8/9 และได้กล่าวถึงวิธีตั้งค่าการจำลองแบบ Master-Slave ด้วย GTID สำหรับข้อมูลเพิ่มเติม คุณอาจต้องการดูคู่มือการจำลอง MariaDB และอย่าลังเลที่จะติดต่อเราโดยใช้แบบฟอร์มด้านล่างหากคุณมีคำถามหรือความคิดเห็น