Skill

বাস্তব উদাহরণ এবং ব্যবহারিক ডেমো

মারিয়া ডিবি (MariaDB) - Database Tutorials

265

MariaDB একটি শক্তিশালী এবং স্কেলেবল ওপেন সোর্স ডেটাবেস ম্যানেজমেন্ট সিস্টেম, যা বিভিন্ন ধরনের ডেটাবেস অ্যাপ্লিকেশন তৈরি এবং পরিচালনা করতে সহায়ক। এখানে আমরা কিছু বাস্তব উদাহরণ এবং ব্যবহারিক ডেমো দেখব যা MariaDB ব্যবহার করে কার্যকরী সমাধান তৈরিতে সহায়ক হতে পারে।


১. টেবিল তৈরি এবং ডেটা ইনসার্ট করা

ধরা যাক, আপনি একটি সিম্পল ব্যবহারকারী (Users) টেবিল তৈরি করতে চান যেখানে ব্যবহারকারীদের নাম, ইমেইল, এবং তাদের নিবন্ধন তারিখ থাকবে। এটি MariaDB-তে কিভাবে করা যায় তা দেখে নেওয়া যাক।

টেবিল তৈরি করা:

CREATE TABLE Users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    registration_date DATETIME DEFAULT CURRENT_TIMESTAMP
);

এই কুয়েরিটি একটি টেবিল তৈরি করবে যেখানে user_id একটি স্বয়ংক্রিয়ভাবে বাড়ানো প্রাথমিক কী হবে, name এবং email ফিল্ডগুলো ব্যবহারকারী তথ্য সংরক্ষণ করবে, এবং registration_date সিস্টেমের বর্তমান সময় দিয়ে পূর্ণ হবে।

ডেটা ইনসার্ট করা:

INSERT INTO Users (name, email) 
VALUES ('John Doe', '[email protected]'),
       ('Jane Smith', '[email protected]'),
       ('Alice Johnson', '[email protected]');

এটি Users টেবিলে তিনটি রেকর্ড ইনসার্ট করবে।


২. কুয়েরি পরিচালনা (SELECT Query)

এখন আমরা কিছু সাধারণ কুয়েরি ব্যবহার করে ডেটা রিট্রিভ করি।

সব ব্যবহারকারী দেখানো:

SELECT * FROM Users;

এই কুয়েরিটি Users টেবিলের সব তথ্য রিটার্ন করবে।

নির্দিষ্ট ব্যবহারকারী অনুসন্ধান:

SELECT * FROM Users WHERE email = '[email protected]';

এই কুয়েরিটি নির্দিষ্ট ইমেইল ব্যবহারকারীর তথ্য রিটার্ন করবে।

ব্যবহারকারী সংখ্যা গণনা:

SELECT COUNT(*) FROM Users;

এই কুয়েরিটি Users টেবিলের মোট রেকর্ড সংখ্যা রিটার্ন করবে।


৩. অ্যাগ্রিগেট ফাংশন ব্যবহার করা

সর্বোচ্চ এবং সর্বনিম্ন বয়স:

ধরা যাক, আপনার Users টেবিলের মধ্যে একটি age কলাম আছে (যা আমরা এখনই তৈরি করব না), আপনি age এর ভিত্তিতে অ্যাগ্রিগেট ফাংশন ব্যবহার করে সর্বোচ্চ এবং সর্বনিম্ন বয়স বের করতে পারেন:

SELECT MAX(age) AS max_age, MIN(age) AS min_age FROM Users;

এটি সর্বোচ্চ এবং সর্বনিম্ন বয়স দেখাবে।

গড় বয়স:

SELECT AVG(age) AS average_age FROM Users;

এটি ব্যবহারকারীদের গড় বয়স রিটার্ন করবে।


৪. ট্রানজেকশন ব্যবহার (Transactions)

MariaDB-তে ট্রানজেকশন ব্যবহারের মাধ্যমে একাধিক অপারেশন একসাথে সম্পন্ন করা যায়। ট্রানজেকশনটি তখনই কমিট হবে যখন সব অপারেশন সফলভাবে শেষ হবে। এটি ডেটার সঠিকতা নিশ্চিত করে এবং যদি কোনো ভুল হয় তবে পূর্ববর্তী পরিবর্তনগুলি রোলব্যাক করা যায়।

ট্রানজেকশন শুরু করা:

START TRANSACTION;

ডেটা ইনসার্ট করা:

INSERT INTO Users (name, email) 
VALUES ('Bob Martin', '[email protected]');

INSERT INTO Users (name, email) 
VALUES ('Eve White', '[email protected]');

ট্রানজেকশন কমিট করা:

COMMIT;

এটি ইনসার্ট করা ডেটাগুলিকে স্থায়ী করবে।

ট্রানজেকশন রোলব্যাক করা (যদি কোন সমস্যা হয়):

ROLLBACK;

এটি যদি কোনো কারণে ভুল হয়, তাহলে সমস্ত ইনসার্ট রোলব্যাক হয়ে যাবে।


৫. ইনডেক্স ব্যবহার (Indexing)

ইনডেক্স ব্যবহার করলে সার্চ অপারেশন অনেক দ্রুত হয়। ধরুন, আপনি Users টেবিলের email কলামে দ্রুত অনুসন্ধান করতে চান, তাহলে একটি ইনডেক্স তৈরি করতে হবে।

ইনডেক্স তৈরি করা:

CREATE INDEX idx_email ON Users (email);

এটি email কলামে একটি ইনডেক্স তৈরি করবে, যার মাধ্যমে অনুসন্ধান অনেক দ্রুত হবে।


৬. ব্যাকআপ এবং রিস্টোর (Backup and Restore)

MariaDB ডেটাবেসের ব্যাকআপ এবং রিস্টোর একটি অত্যন্ত গুরুত্বপূর্ণ কার্যক্রম, বিশেষ করে প্রোডাকশন সিস্টেমে। এখানে আমরা দেখব কিভাবে MariaDB ডেটাবেসের ব্যাকআপ নেওয়া এবং রিস্টোর করা যায়।

ব্যাকআপ নেওয়া:

MariaDB ডেটাবেসের ব্যাকআপ নিতে mysqldump টুল ব্যবহার করা যায়।

mysqldump -u root -p database_name > backup.sql

এটি database_name ডেটাবেসের সব তথ্য একটি backup.sql ফাইলে সংরক্ষণ করবে।

ব্যাকআপ রিস্টোর করা:

ব্যাকআপ ফাইল থেকে ডেটাবেস পুনরুদ্ধার করতে:

mysql -u root -p database_name < backup.sql

এটি backup.sql ফাইল থেকে ডেটাবেস পুনরুদ্ধার করবে।


৭. কুয়েরি অপটিমাইজেশন

MariaDB তে কুয়েরি অপটিমাইজেশন একটি গুরুত্বপূর্ণ কার্যক্রম, যা পারফরম্যান্স বৃদ্ধি করে। আপনি EXPLAIN কুয়েরি ব্যবহার করে একটি কুয়েরির কার্যকারিতা বিশ্লেষণ করতে পারেন।

EXPLAIN ব্যবহার:

EXPLAIN SELECT * FROM Users WHERE email = '[email protected]';

এটি কুয়েরির কার্যকারিতা বিশ্লেষণ করবে এবং আপনাকে জানাবে কিভাবে MariaDB এই কুয়েরিটি এক্সিকিউট করবে।


সারাংশ

MariaDB একটি পূর্ণাঙ্গ এবং শক্তিশালী ডেটাবেস ম্যানেজমেন্ট সিস্টেম, যা বিভিন্ন বাস্তব অ্যাপ্লিকেশনে ব্যবহৃত হতে পারে। উদাহরণস্বরূপ, আমরা MariaDB তে টেবিল তৈরি, ডেটা ইনসার্ট, কুয়েরি অপারেশন, ট্রানজেকশন, ইনডেক্স, ব্যাকআপ এবং রিস্টোর, এবং কুয়েরি অপটিমাইজেশন নিয়ে আলোচনা করেছি। এসব বৈশিষ্ট্য ব্যবহার করে আপনি MariaDB কে আপনার প্রকল্পের জন্য কার্যকরীভাবে কাজে লাগাতে পারবেন।

Content added By

MariaDB একটি শক্তিশালী এবং স্কেলেবল ডেটাবেস ম্যানেজমেন্ট সিস্টেম, যা ডেটা সংগঠন এবং পরিচালনায় অত্যন্ত কার্যকর। MariaDB ডেটাবেজ তৈরি এবং টেবিল ম্যানিপুলেশন এর মাধ্যমে আপনি ডেটাবেসের কাঠামো তৈরি করতে, ডেটা সংরক্ষণ করতে এবং প্রয়োজনীয় পরিবর্তন আনতে পারেন।

এখানে আমরা MariaDB ডেটাবেজ তৈরি এবং টেবিল ম্যানিপুলেশন সম্পর্কিত বিভিন্ন কার্যাবলি নিয়ে আলোচনা করবো।


MariaDB ডেটাবেজ তৈরি

MariaDB তে ডেটাবেজ তৈরি করার জন্য CREATE DATABASE কমান্ড ব্যবহার করা হয়। এটি একটি নতুন ডেটাবেজ তৈরি করে, যাতে আপনি টেবিল এবং অন্যান্য অবজেক্ট সংরক্ষণ করতে পারবেন।

1. ডেটাবেজ তৈরি করা

CREATE DATABASE database_name;

এখানে, database_name এর জায়গায় আপনি আপনার পছন্দমত ডেটাবেজের নাম বসাবেন। উদাহরণস্বরূপ:

CREATE DATABASE test_db;

এই কমান্ডটি test_db নামক একটি নতুন ডেটাবেজ তৈরি করবে।

2. ডেটাবেজের তালিকা দেখা

ডেটাবেজ তৈরি করার পর, আপনি MariaDB তে সব ডেটাবেজের তালিকা দেখতে পারেন:

SHOW DATABASES;

এটি আপনার MariaDB সার্ভারে উপলব্ধ সমস্ত ডেটাবেজের একটি তালিকা দেখাবে।

3. ডেটাবেজ নির্বাচন করা

কোন ডেটাবেজে কাজ করবেন, তা নির্ধারণ করতে USE কমান্ড ব্যবহার করা হয়:

USE test_db;

এটি আপনাকে test_db ডেটাবেজে কাজ করার জন্য সেট করে দিবে।


MariaDB টেবিল তৈরি

MariaDB তে টেবিল তৈরি করতে CREATE TABLE কমান্ড ব্যবহার করা হয়। টেবিল তৈরি করার সময়, আপনি টেবিলের জন্য কলাম এবং তাদের ডেটা টাইপ নির্ধারণ করেন।

1. টেবিল তৈরি করা

CREATE TABLE table_name (
   column1 datatype,
   column2 datatype,
   column3 datatype,
   ...
);

এখানে, table_name হলো টেবিলের নাম এবং column1, column2, ইত্যাদি হল টেবিলের কলাম নাম, যাদের জন্য আপনি ডেটা টাইপ নির্ধারণ করবেন। উদাহরণস্বরূপ:

CREATE TABLE employees (
   id INT AUTO_INCREMENT PRIMARY KEY,
   name VARCHAR(100),
   age INT,
   position VARCHAR(50)
);

এই কমান্ডটি employees নামে একটি টেবিল তৈরি করবে, যেখানে id, name, age, এবং position নামে চারটি কলাম থাকবে। id কলামটি স্বয়ংক্রিয়ভাবে ইনক্রিমেন্ট হবে এবং এটি টেবিলের প্রাইমারি কি হিসেবে কাজ করবে।

2. টেবিলের গঠন চেক করা

টেবিল তৈরি করার পর, তার গঠন (structure) চেক করতে DESCRIBE কমান্ড ব্যবহার করা হয়:

DESCRIBE employees;

এটি employees টেবিলের সমস্ত কলাম এবং তাদের ডেটা টাইপ দেখাবে।


MariaDB টেবিল ম্যানিপুলেশন

MariaDB তে টেবিলের মধ্যে ডেটা ম্যানিপুলেশন করার জন্য বিভিন্ন কমান্ড ব্যবহার করা হয়। এটি টেবিলের মধ্যে ডেটা ইনসার্ট করা, আপডেট করা, এবং ডিলিট করার জন্য ব্যবহৃত হয়।

1. টেবিলে ডেটা ইনসার্ট করা

INSERT INTO কমান্ড ব্যবহার করে টেবিলে ডেটা ইনসার্ট করা হয়। উদাহরণস্বরূপ:

INSERT INTO employees (name, age, position)
VALUES ('John Doe', 30, 'Software Engineer');

এটি employees টেবিলে একটি নতুন রেকর্ড ইনসার্ট করবে, যেখানে name হবে 'John Doe', age হবে 30, এবং position হবে 'Software Engineer'।

2. টেবিল থেকে ডেটা সিলেক্ট করা

টেবিল থেকে ডেটা দেখতে SELECT কমান্ড ব্যবহার করা হয়:

SELECT * FROM employees;

এটি employees টেবিলের সব ডেটা (সব কলাম এবং সব রেকর্ড) প্রদর্শন করবে। আপনি নির্দিষ্ট কলামও সিলেক্ট করতে পারেন:

SELECT name, position FROM employees;

এটি শুধু name এবং position কলামগুলোর ডেটা দেখাবে।

3. টেবিলের ডেটা আপডেট করা

UPDATE কমান্ড ব্যবহার করে টেবিলের ডেটা আপডেট করা হয়:

UPDATE employees
SET age = 31
WHERE name = 'John Doe';

এটি employees টেবিলে 'John Doe' এর age কলামের মান 31 এ আপডেট করবে।

4. টেবিল থেকে ডেটা ডিলিট করা

DELETE FROM কমান্ড ব্যবহার করে টেবিল থেকে ডেটা ডিলিট করা হয়:

DELETE FROM employees
WHERE name = 'John Doe';

এটি employees টেবিল থেকে 'John Doe' নামের রেকর্ডটি মুছে ফেলবে।

5. টেবিলের কলাম পরিবর্তন করা

ALTER TABLE কমান্ড ব্যবহার করে আপনি টেবিলের গঠন পরিবর্তন করতে পারেন, যেমন নতুন কলাম যোগ করা বা পুরনো কলাম মুছে ফেলা। উদাহরণস্বরূপ, একটি নতুন কলাম যোগ করতে:

ALTER TABLE employees
ADD COLUMN salary DECIMAL(10, 2);

এটি employees টেবিলে salary নামক একটি নতুন কলাম যোগ করবে।

6. টেবিল থেকে কলাম মুছে ফেলা

ALTER TABLE কমান্ডের মাধ্যমে আপনি টেবিল থেকে কলামও মুছে ফেলতে পারেন:

ALTER TABLE employees
DROP COLUMN position;

এটি employees টেবিল থেকে position কলামটি মুছে ফেলবে।


MariaDB টেবিল এবং ডেটাবেজ মুছে ফেলা

1. টেবিল মুছে ফেলা

DROP TABLE কমান্ড ব্যবহার করে আপনি টেবিল মুছে ফেলতে পারেন:

DROP TABLE employees;

এটি employees টেবিলটি পুরোপুরি মুছে ফেলবে, এবং সেই টেবিলের সমস্ত ডেটা হারিয়ে যাবে।

2. ডেটাবেজ মুছে ফেলা

ডেটাবেজ মুছে ফেলার জন্য DROP DATABASE কমান্ড ব্যবহার করা হয়:

DROP DATABASE test_db;

এটি test_db ডেটাবেজটি মুছে ফেলবে, এবং সেই ডেটাবেজের সমস্ত টেবিলও মুছে যাবে।


সারাংশ

MariaDB তে ডেটাবেজ তৈরি এবং টেবিল ম্যানিপুলেশন হল ডেটাবেস ব্যবস্থাপনার মৌলিক কাজ। ডেটাবেজ তৈরি, টেবিল তৈরি এবং টেবিলের মধ্যে ডেটা ইনসার্ট, আপডেট, ডিলিট করার মাধ্যমে আপনি ডেটাবেসের কাঠামো তৈরি এবং ম্যানিপুলেট করতে পারেন। এই কাজগুলো সঠিকভাবে করলে ডেটাবেসের পারফরম্যান্স এবং ব্যবস্থাপনা আরো দক্ষ হয়।

Content added By

MariaDB-তে Stored Procedure এবং Function ডেটাবেসে নির্দিষ্ট কাজ করার জন্য ব্যবহার করা হয়। Stored Procedure সাধারণত একাধিক SQL স্টেটমেন্টের সঙ্কলন হয়, যা একবার এক্সিকিউট করার পরে প্রয়োজনীয় কাজগুলো সম্পন্ন করে। অন্যদিকে, Function হল একটি কাস্টম SQL ফাংশন যা কোনো নির্দিষ্ট মান রিটার্ন করে।

এখানে, আমরা Stored Procedure এবং Function তৈরির উদাহরণ দেখবো, যার মাধ্যমে আপনি এই দুটি গুরুত্বপূর্ণ ফিচার কীভাবে ব্যবহার করতে পারেন তা বুঝতে পারবেন।


১. Stored Procedure তৈরি

Stored Procedure সাধারণত একাধিক SQL স্টেটমেন্ট বা কাস্টম লজিক একত্রিত করার জন্য ব্যবহৃত হয়, যা বারবার চালানো যায়।

১.১. Stored Procedure উদাহরণ

ধরা যাক, আপনার একটি Employees টেবিল রয়েছে এবং আপনি একটি Stored Procedure তৈরি করতে চান যা একটি নির্দিষ্ট department-এর সমস্ত employee এর তথ্য রিটার্ন করবে।

Employees টেবিলের গঠন কিছুটা এরকম হতে পারে:

CREATE TABLE Employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    department VARCHAR(100),
    salary DECIMAL(10, 2)
);

এখন, একটি Stored Procedure তৈরি করুন যা department অনুসারে কর্মীদের তালিকা ফিরিয়ে দেবে।

DELIMITER CREATEPROCEDUREGetEmployeesByDepartment(INdeptnameVARCHAR(100))BEGINSELECTid,name,department,salaryFROMEmployeesWHEREdepartment=deptname;END

CREATE PROCEDURE GetEmployeesByDepartment(IN dept_name VARCHAR(100))
BEGIN
    SELECT id, name, department, salary
    FROM Employees
    WHERE department = dept_name;
END 

DELIMITER ;

ব্যাখ্যা:

  • DELIMITER </code>:িিিSQLি<codeinline="">;</code>িিিি<codeinline="">;</code>ি,<codeinline="">DELIMITER</code>: স্টোরড প্রোসিডিউরিতে SQL কোডের মধ্যে ডিফল্ট <code inline="">;</code> দিয়ে স্টেটমেন্ট শেষ করা হয়। তবে স্টোরড প্রোসিডিউরিতে <code inline="">;</code> অনেক বেশি ব্যবহৃত হয়, তাই <code inline="">DELIMITER ব্যবহার করে নতুন ডেলিমিটার সেট করা হয়।
  • CREATE PROCEDURE: নতুন একটি Stored Procedure তৈরি করতে ব্যবহৃত হয়।
  • IN dept_name VARCHAR(100): এটি ইনপুট প্যারামিটার হিসাবে dept_name গ্রহন করে।
  • SELECT স্টেটমেন্টের মাধ্যমে নির্দিষ্ট department-এর কর্মীদের তথ্য ফেরত দেওয়া হয়।

১.২. Stored Procedure কল করা

এখন, যদি আপনি HR ডিপার্টমেন্টের কর্মীদের তালিকা দেখতে চান, তবে আপনি এইভাবে Stored Procedure কল করতে পারেন:

CALL GetEmployeesByDepartment('HR');

২. Function তৈরি

MariaDB-তে Function একটি কাস্টম ফাংশন, যা নির্দিষ্ট মান রিটার্ন করে। সাধারণত এটি SQL কুয়েরি বা অ্যালগোরিদমের উপর ভিত্তি করে গণনা বা অন্যান্য কাজ করতে ব্যবহৃত হয়।

২.১. Function উদাহরণ

ধরা যাক, আপনার Employees টেবিল আছে এবং আপনি একটি Function তৈরি করতে চান যা কোনো কর্মীর salary এবং bonus যোগ করে মোট আয় হিসাব করবে।

DELIMITER CREATEFUNCTIONCalculateTotalSalary(empidINT)RETURNSDECIMAL(10,2)BEGINDECLAREtotalsalaryDECIMAL(10,2);DECLAREempsalaryDECIMAL(10,2);DECLAREempbonusDECIMAL(10,2);--GetemployeesalaryandbonusSELECTsalaryINTOempsalaryFROMEmployeesWHEREid=empid;SELECTbonusINTOempbonusFROMEmployeesWHEREid=empid;--CalculatetotalsalarySETtotalsalary=empsalary+empbonus;RETURNtotalsalary;END

CREATE FUNCTION CalculateTotalSalary(emp_id INT)
RETURNS DECIMAL(10, 2)
BEGIN
    DECLARE total_salary DECIMAL(10, 2);
    DECLARE emp_salary DECIMAL(10, 2);
    DECLARE emp_bonus DECIMAL(10, 2);

    -- Get employee salary and bonus
    SELECT salary INTO emp_salary FROM Employees WHERE id = emp_id;
    SELECT bonus INTO emp_bonus FROM Employees WHERE id = emp_id;

    -- Calculate total salary
    SET total_salary = emp_salary + emp_bonus;

    RETURN total_salary;
END 

DELIMITER ;

ব্যাখ্যা:

  • CREATE FUNCTION: একটি ফাংশন তৈরি করতে ব্যবহৃত হয়।
  • RETURNS DECIMAL(10, 2): এটি ফাংশনের আউটপুট টাইপ নির্দেশ করে, যা এই উদাহরণে DECIMAL(10, 2)
  • DECLARE: ফাংশনের মধ্যে লোকাল ভ্যারিয়েবল ঘোষণা করা হয়।
  • SELECT INTO: নির্দিষ্ট কর্মীর salary এবং bonus মান নেওয়া হয়।
  • RETURN: ফাংশনের ফলাফল হিসেবে total_salary রিটার্ন করা হয়।

২.২. Function কল করা

এখন, আপনি যদি কোনো কর্মীর total salary দেখতে চান, তাহলে আপনি এইভাবে Function কল করতে পারবেন:

SELECT CalculateTotalSalary(1);

এখানে, 1 হল কর্মীর ID যাকে আপনি Total Salary হিসাব করতে চান।


৩. Stored Procedure এবং Function এর মধ্যে পার্থক্য

বিষয়Stored ProcedureFunction
রিটার্ন ভ্যালুস্টোরড প্রোসিডিউর সাধারণত কোনো ভ্যালু রিটার্ন করে না।ফাংশন অবশ্যই একটি ভ্যালু রিটার্ন করে।
ব্যবহারএকটি নির্দিষ্ট কাজ বা কোয়েরি সম্পাদন করতে ব্যবহৃত হয়।সাধারণত একটি মান হিসাব বা প্রক্রিয়া সম্পাদন করতে ব্যবহৃত হয়।
CALL করার পদ্ধতিCALL কমান্ড ব্যবহার করে কল করা হয়।SELECT কমান্ডের মধ্যে কল করা হয়।
অপারেশনএকাধিক SQL স্টেটমেন্ট চালাতে পারে।একটি নির্দিষ্ট মান রিটার্ন করার জন্য উপযুক্ত।

সারাংশ

MariaDB-তে Stored Procedure এবং Function দুটি শক্তিশালী ফিচার, যা ডেটাবেসের নির্দিষ্ট কাজগুলো সংকলন করে। Stored Procedure সাধারণত একাধিক SQL কোয়েরি বা লজিক একত্রিত করে কাজ সম্পাদন করে, যখন Function একটি নির্দিষ্ট মান রিটার্ন করে। এই ফিচারগুলো MariaDB-তে ডেটাবেস পরিচালনা আরও সুবিধাজনক এবং দক্ষ করে তোলে।

Content added By

Master-Slave Replication হল একটি ডেটাবেস কনফিগারেশন পদ্ধতি, যেখানে একটি সার্ভার (Master) ডেটা পরিচালনা করে এবং অন্য একটি বা একাধিক সার্ভার (Slave) তার ডেটা কপি করে রাখে। এটি মূলত ডেটাবেসের লোড ব্যালান্সিং, ব্যাকআপ এবং হাই এভেলিবিলিটি নিশ্চিত করতে ব্যবহৃত হয়। এই কনফিগারেশনে, Master সার্ভারকে মূল (primary) সার্ভার হিসেবে বিবেচনা করা হয়, যেখানে সমস্ত লেখার অপারেশন (INSERT, UPDATE, DELETE) করা হয়, আর Slave সার্ভার গুলি Master সার্ভারের কপি হিসেবে কাজ করে, যেখানে শুধুমাত্র পড়ার (READ) অপারেশন করা হয়।


1. Master-Slave Replication কনফিগারেশন প্রক্রিয়া

MariaDB Master-Slave Replication সেটআপ করার জন্য কিছু ধাপ অনুসরণ করতে হয়, যেমন Master এবং Slave সার্ভারগুলোর কনফিগারেশন, সার্ভারের মধ্যে যোগাযোগ স্থাপন, এবং Replication প্রক্রিয়া শুরু করা। নিচে এই প্রক্রিয়া বিস্তারিতভাবে আলোচনা করা হল।


2. Master সার্ভারের কনফিগারেশন

  1. MariaDB কনফিগারেশন ফাইল (my.cnf) এ পরিবর্তন:

    • Master সার্ভারের my.cnf ফাইলে কিছু কনফিগারেশন পরিবর্তন করতে হবে, যাতে এটি Replication শুরু করতে পারে।
    • server-id (unique identifier) এবং log-bin (binary log) প্যারামিটার সক্রিয় করতে হবে।

    উদাহরণ:

    [mysqld]
    server-id = 1
    log-bin = /var/log/mysql/mysql-bin.log
    binlog-do-db = your_database_name  # Optional: replicate only specific databases
    
    • server-id: এই ভেরিয়েবলটি প্রতিটি সার্ভারের জন্য ইউনিক হতে হবে (এখানে Master সার্ভারের জন্য 1 দেওয়া হয়েছে)।
    • log-bin: এই প্যারামিটারটি Binary Log ফাইলের লোকেশন নির্ধারণ করে। Replication এর জন্য এই ফাইলটি প্রয়োজন হয়।
    • binlog-do-db: যদি আপনি নির্দিষ্ট একটি ডেটাবেসের Replication চান, তবে এটি উল্লেখ করতে পারেন। নাহলে সব ডেটাবেসের Replication হবে।
  2. MariaDB সার্ভার রিস্টার্ট করা: কনফিগারেশন পরিবর্তনের পর MariaDB সার্ভারটি রিস্টার্ট করতে হবে।

    sudo systemctl restart mariadb
    
  3. Replication User তৈরি করা: Master সার্ভারে একটি ব্যবহারকারী তৈরি করুন, যে Slave সার্ভার থেকে Replication করতে পারবে।

    CREATE USER 'replicator'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
    FLUSH PRIVILEGES;
    
  4. Master সার্ভারের অবস্থান এবং লোগ তথ্য প্রাপ্তি: Master সার্ভারের অবস্থান (Log file name এবং Position) জানতে হবে, যা Slave সার্ভারের সাথে Synch করতে ব্যবহার করা হবে। এই তথ্যটি নিম্নলিখিত কমান্ড দ্বারা পাওয়া যাবে:

    SHOW MASTER STATUS;
    

    এটি আপনাকে File এবং Position এর তথ্য দেবে। উদাহরণস্বরূপ:

    +------------------+----------+--------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB  |
    +------------------+----------+--------------+-------------------+
    | mysql-bin.000001 | 107      | your_database_name  |                   |
    +------------------+----------+--------------+-------------------+
    

    এখানে, File হচ্ছে mysql-bin.000001 এবং Position হচ্ছে 107


3. Slave সার্ভারের কনফিগারেশন

  1. MariaDB কনফিগারেশন ফাইল (my.cnf) এ পরিবর্তন: Slave সার্ভারের my.cnf ফাইলেও কিছু পরিবর্তন করতে হবে।

    উদাহরণ:

    [mysqld]
    server-id = 2
    relay-log = /var/log/mysql/mysql-relay-bin.log
    log-bin = /var/log/mysql/mysql-bin.log  # Optional: If Slave needs to be a Master in future
    
    • server-id: Slave সার্ভারের জন্য একটি ইউনিক আইডি দিতে হবে। এটি Master সার্ভারের থেকে আলাদা হতে হবে (এখানে Slave সার্ভারের জন্য 2 দেওয়া হয়েছে)।
    • relay-log: Slave সার্ভারের Relay Log ফাইলের অবস্থান নির্ধারণ করে। এটি Master সার্ভারের লগ অনুসরণ করবে।
  2. MariaDB সার্ভার রিস্টার্ট করা: কনফিগারেশন পরিবর্তনের পর Slave সার্ভারের MariaDB সার্ভার রিস্টার্ট করতে হবে।

    sudo systemctl restart mariadb
    
  3. Slave সার্ভারে Replication প্রক্রিয়া শুরু করা: Slave সার্ভারে CHANGE MASTER TO কমান্ড ব্যবহার করে Master সার্ভারের অবস্থান এবং Replication ইউজারের তথ্য সেট করতে হবে।

    CHANGE MASTER TO
    MASTER_HOST = 'master_server_ip',
    MASTER_USER = 'replicator',
    MASTER_PASSWORD = 'password',
    MASTER_LOG_FILE = 'mysql-bin.000001',
    MASTER_LOG_POS = 107;
    

    এখানে, MASTER_LOG_FILE এবং MASTER_LOG_POS হল Master সার্ভারের SHOW MASTER STATUS কমান্ড থেকে প্রাপ্ত তথ্য।

  4. Replication শুরু করা: এরপর, Slave সার্ভারে Replication প্রক্রিয়া শুরু করতে হবে:

    START SLAVE;
    
  5. Replication স্ট্যাটাস চেক করা: Slave সার্ভারের Replication অবস্থান চেক করতে নিচের কমান্ড ব্যবহার করুন:

    SHOW SLAVE STATUS\G
    

    এখানে, Slave_IO_Running এবং Slave_SQL_Running যদি Yes দেখায়, তাহলে Replication সফলভাবে কাজ করছে।


4. Master-Slave Replication এর কার্যকারিতা পরীক্ষা করা

  • Master সার্ভারে ডেটা ইনসার্ট:

    USE your_database_name;
    INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2');
    
  • Slave সার্ভারে ডেটা চেক করা: Slave সার্ভারে গিয়ে নিচের কমান্ড চালিয়ে নিশ্চিত করুন যে ডেটা সঠিকভাবে Replicate হয়েছে।

    USE your_database_name;
    SELECT * FROM your_table;
    

এখানে, আপনি দেখতে পাবেন যে Master সার্ভারে ইনসার্ট করা ডেটা Slave সার্ভারেও উপস্থিত।


সারাংশ

MariaDB Master-Slave Replication হল একটি কার্যকরী পদ্ধতি ডেটাবেসের লোড ব্যালান্সিং এবং হাই-অ্যাভেইলেবিলিটি নিশ্চিত করার জন্য। Master সার্ভার লেখার কাজ সম্পাদন করে, এবং Slave সার্ভারগুলি Master এর ডেটা কপি করে পড়ে থাকে। Replication সেটআপ করার জন্য, Master এবং Slave সার্ভারে কিছু কনফিগারেশন পরিবর্তন করতে হয়, এবং পরিশেষে Replication শুরু করতে হয়। এটি বিশেষভাবে উপকারী যখন ডেটাবেসের উচ্চ ট্র্যাফিক বা একাধিক ক্লায়েন্টের প্রয়োজনীয়তা থাকে।


Content added By

Galera Cluster হল একটি সিঙ্ক্রোনাস রেপ্লিকেশন প্রযুক্তি যা MariaDB ডেটাবেসের উচ্চতর উপলভ্যতা (HA) এবং স্কেলেবিলিটি নিশ্চিত করে। এটি আপনাকে একাধিক MariaDB সার্ভারকে একটি ক্লাস্টারে একত্রিত করে একযোগভাবে ডেটা রেপ্লিকেট করতে সাহায্য করে, যেখানে সমস্ত নোডে একই ডেটা থাকে। Galera Cluster-এ, কোনো একটি নোড ব্যর্থ হলে অন্য নোডগুলি ডেটাবেস সার্ভিস প্রদান করতে সক্ষম থাকে, যা আপনার অ্যাপ্লিকেশনকে ক্র্যাশ না হওয়ার সুবিধা দেয়।

এই গাইডে, আমরা MariaDB Galera Cluster ডেপ্লয়মেন্টের একটি সাধারণ উদাহরণ দেখব, যেখানে তিনটি নোডের ক্লাস্টার তৈরি করা হবে।


Galera Cluster ডেপ্লয়মেন্টের জন্য প্রস্তুতি

Galera Cluster সেটআপ করার জন্য কিছু প্রাথমিক প্রস্তুতি নিতে হবে:

  • MariaDB Galera ক্লাস্টার প্যাকেজ ইনস্টলেশন
  • নেটওয়ার্ক কনফিগারেশন
  • নোডগুলির মধ্যে সংযোগের জন্য প্রয়োজনীয় পোর্ট খোলা

১. MariaDB Galera Cluster প্যাকেজ ইনস্টলেশন

প্রতিটি নোডে MariaDB এবং Galera ইনস্টল করা

প্রথমেই MariaDB এবং Galera Cluster প্যাকেজ ইনস্টল করতে হবে। এটি Ubuntu বা CentOS-এর মতো লিনাক্স ডিস্ট্রিবিউশনগুলির জন্য আলাদা হতে পারে।

Ubuntu (প্রতি নোডে)

sudo apt-get update
sudo apt-get install mariadb-server mariadb-client galera-4

CentOS (প্রতি নোডে)

sudo yum install mariadb-server mariadb galera-4

এটি MariaDB এবং Galera এর প্রয়োজনীয় উপাদান ইনস্টল করবে।


২. MariaDB Galera Cluster কনফিগারেশন

এবার আপনি MariaDB কনফিগারেশন ফাইল my.cnf এ কিছু প্রয়োজনীয় সেটিংস করতে হবে।

MariaDB কনফিগারেশন ফাইলটি (my.cnf) এডিট করুন

my.cnf ফাইলটি সাধারণত /etc/mysql/my.cnf অথবা /etc/my.cnf অবস্থানে থাকে। ফাইলটি খুলে নিচের কনফিগারেশন যোগ করুন।

[mysqld]
# Galera Specific Configurations
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node1_ip,node2_ip,node3_ip"
wsrep_node_address="nodeX_ip"  # এই নোডের IP
wsrep_node_name="nodeX"  # এই নোডের নাম
wsrep_sst_method=rsync
wsrep_sst_auth="sstuser:password"

# Basic MariaDB configurations
bind-address = 0.0.0.0
max_connections = 1000
innodb_buffer_pool_size = 512M

wsrep_cluster_address

এটি ক্লাস্টারের অন্য নোডগুলির IP অ্যাড্রেস উল্লেখ করে। এখানে তিনটি নোড থাকলে, তাদের IP গুলো গুলো node1_ip,node2_ip,node3_ip আকারে লিখবেন।

wsrep_node_address

এটি নির্দিষ্ট নোডের IP অ্যাড্রেস হবে। প্রতিটি নোডের জন্য আলাদা IP ব্যবহার করতে হবে।

wsrep_sst_auth

এটি SST (State Snapshot Transfer) প্রক্রিয়ায় ব্যবহারকারী নাম এবং পাসওয়ার্ডের জন্য। ক্লাস্টারের মধ্যে ডেটা ট্রান্সফার করতে একটি ব্যবহারকারী এবং পাসওয়ার্ড তৈরি করতে হবে।


৩. SST ইউজার এবং পাসওয়ার্ড তৈরি করা

SST (State Snapshot Transfer) হল Galera Cluster-এ ডেটা সিঙ্ক্রোনাইজেশনের জন্য ব্যবহৃত প্রক্রিয়া। এটি কার্যকরভাবে ক্লাস্টারের নতুন নোডে ডেটা সরবরাহ করে। এই প্রক্রিয়ার জন্য একটি SST ব্যবহারকারী এবং পাসওয়ার্ড প্রয়োজন।

MariaDB-তে একটি SST ব্যবহারকারী তৈরি করুন:

CREATE USER 'sstuser'@'%' IDENTIFIED BY 'password';
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'%';
FLUSH PRIVILEGES;

এটি একটি ব্যবহারকারী তৈরি করবে যার নাম sstuser এবং পাসওয়ার্ড password হবে, যা SST প্রক্রিয়ায় ব্যবহৃত হবে।


৪. Galera Cluster-এ প্রথম নোড (Initial Node) চালানো

এখন প্রথম নোড চালানোর জন্য, প্রথম নোডকে গ্যালেরা ক্লাস্টার চালানোর জন্য bootstrap করতে হবে। এটি ক্লাস্টারের প্রথম নোড, এবং অন্য নোডগুলি এটিতে যোগ দেবে।

sudo systemctl stop mariadb
sudo galera_new_cluster
sudo systemctl start mariadb

এটি প্রথম নোড চালু করবে এবং এটি ক্লাস্টারের মাস্টার হিসেবে কাজ করবে। প্রথম নোড সফলভাবে চালু হলে, আপনি MariaDB এ লগইন করতে পারেন:

mysql -u root -p

৫. অন্য নোডে Galera Cluster যোগ করা

এবার দ্বিতীয় এবং তৃতীয় নোডে গ্যালেরা ক্লাস্টার যোগ করতে হবে। প্রতিটি নোডে MariaDB চালু করুন এবং ক্লাস্টারের সাথে সংযোগ করুন:

sudo systemctl start mariadb

এই নোডগুলি স্বয়ংক্রিয়ভাবে প্রথম নোডের সাথে সিঙ্ক্রোনাইজ হয়ে যাবে। লগইন করতে পারেন:

mysql -u root -p

wsrep_cluster_address কনফিগারেশন অনুসারে, সমস্ত নোড একে অপরের সাথে সংযুক্ত হবে এবং একটি সফল Galera Cluster তৈরি হবে।


৬. Cluster স্ট্যাটাস চেক করা

Galera Cluster এর স্ট্যাটাস চেক করতে নিচের SQL কমান্ড ব্যবহার করুন:

SHOW STATUS LIKE 'wsrep%';

এটি ক্লাস্টারের স্ট্যাটাস প্রদর্শন করবে, যেমন কুয়েরি করা নোডের নাম, সিঙ্ক্রোনাইজেশন অবস্থা ইত্যাদি।


৭. ক্লাস্টারের মধ্যে রেপ্লিকেশন এবং ডেটা সিঙ্ক্রোনাইজেশন

Galera Cluster সিঙ্ক্রোনাস রেপ্লিকেশন ব্যবহার করে, অর্থাৎ কোনো একটি নোডে ডেটা পরিবর্তন হলে, তা সব নোডে একযোগভাবে আপডেট হয়। এটি ক্লাস্টারের মধ্যে সবসময় একে অপরের সাথে সমন্বিত ডেটাবেস তৈরি করে।

আপনি একটি টেবিল তৈরি বা ডেটা ইনসার্ট করার পর সমস্ত নোডে এই পরিবর্তনটি দেখতে পাবেন।

CREATE DATABASE test_db;
USE test_db;
CREATE TABLE example (id INT, name VARCHAR(50));
INSERT INTO example VALUES (1, 'test');

এটি এক নোডে ইনসার্ট করার পর অন্যান্য নোডগুলিতে স্বয়ংক্রিয়ভাবে সিঙ্ক্রোনাইজ হবে।


সারাংশ

MariaDB Galera Cluster ডেপ্লয়মেন্টের মাধ্যমে, আপনি একাধিক সার্ভারের মধ্যে সিঙ্ক্রোনাস রেপ্লিকেশন বাস্তবায়ন করতে পারবেন, যা উচ্চ উপলভ্যতা এবং ডেটাবেসের পারফরম্যান্স বৃদ্ধি করবে। এই গাইডে আমরা তিনটি নোডের একটি গ্যালেরা ক্লাস্টার সেটআপ করার প্রক্রিয়া দেখেছি, যার মধ্যে ছিল MariaDB ইনস্টলেশন, কনফিগারেশন, SST ইউজার তৈরি এবং ক্লাস্টার স্ট্যাটাস চেক করা। Galera Cluster সফলভাবে সেটআপ হলে, এটি আপনাকে উন্নত রিলায়েবিলিটি এবং স্কেলেবিলিটি প্রদান করবে।

Content added By
Promotion

Are you sure to start over?

Loading...