এই আর্টিকেলে আমি লিনাক্স CentOS 7-এ ডাটাবেস সার্ভার MariaDB-এর ইনস্টলেশন, বেসিক কনফিগারেশন এবং পারফরম্যান্স অপ্টিমাইজেশন নিয়ে আলোচনা করব। আর্টিকেলের শেষে আমি MariaDB কনফিগারেশন ফাইলগুলোর কিছু উদাহরণ দেখাব যাতে আপনি আপনার ডিবি সার্ভারের জন্য সেরা প্যারামিটার বেছে নিতে পারেন।
CentOS-এ MariaDB ইনস্টল করুন
সম্প্রতি MariaDB CentOS 7 বেস রিপোজিটরিতে যোগ করা হয়েছে, কিন্তু রিপোজিটরিতে এর সংস্করণ 5.5। এই সংস্করণ আপ-টু-ডেট নয়, এর কিছু পারফরম্যান্স সমস্যা আছে এবং InnoDB-এ ফুল টেক্সট সার্চ প্রদান করে না। MariaDB-এর বর্তমান সংস্করণ ইনস্টল করতে, আপনাকে প্রথমে mariadb.org ডেভেলপার রিপোজিটরি যোগ করতে হবে।
yum ব্যবহার করে nano এডিটর ইনস্টল করুন:
yum install nano -y
তারপর রিপোজিটরি ফাইলটি এডিট করার জন্য খুলুন:
nano /etc/yum.repos.d/mariadb.repo
এখানে নিচের টেক্সট যোগ করুন:
[mariadb] name = MariaDB baseurl = https://yum.mariadb.org/10.4/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
mariadb.repo কনফিগারেশন ফাইল সংরক্ষণ করুন এবং MariaDB সার্ভার এবং ক্লায়েন্ট ইনস্টল করুন:
yum --disablerepo=AppStream install MariaDB-server MariaDB-client -y
ইনস্টলেশন সম্পন্ন, এখন mariadb সার্ভিসকে স্টার্টআপে যোগ করতে হবে:
systemctl start mariadb
systemctl enable mariadb
সার্ভিস স্ট্যাটাস চেক করুন:
systemctl status mariadb
mariadb সার্ভিস সক্রিয় এবং রানিং আছে, তাই আপনি কনফিগারেশন নিয়ে এগিয়ে যেতে পারেন।
MariaDB সার্ভার সিকিউর করুন
MariaDB সার্ভার ইনস্টল এবং চালু করার পর, আমরা সিকিউরিটি সেটিংসে যেতে পারি। বিল্ট-ইন স্ক্রিপ্ট চালান:
/usr/bin/mysql_secure_installation
প্রথমে, এটি আপনাকে root পাসওয়ার্ড দিতে বলবে (MariaDB-এর প্রাথমিক ইনস্টলেশনের পর কোনো পাসওয়ার্ড সেট থাকে না), তাই এন্টার চাপুন এবং পরবর্তী ধাপে একটি জটিল পাসওয়ার্ড সেট করুন। তারপর আপনি স্ক্রিপ্টের শেষ পর্যন্ত এন্টার চাপতে পারেন। অ্যানোনিমাস ইউজার, রিমোট রুট লগইন এবং টেস্ট টেবিল মুছে যাবে, এবং প্রিভিলেজ আপডেট হবে।
MariaDB সার্ভারে রিমোট কানেক্ট করতে, আপনাকে লিনাক্স ফায়ারওয়ালের জন্য iptables ব্যবহার করে কিছু রুল তৈরি করতে হবে:
iptables -I INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables-save > /etc/sysconfig/iptables
ঐচ্ছিকভাবে, আপনি রিমোট MariaDB ডাটাবেসে আউটবাউন্ড কানেকশন অনুমতি দিতে পারেন:
iptables -I OUTPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
MariaDB কানেকশন টেস্ট
আপনাকে নিশ্চিত করতে হবে যে MariaDB সফলভাবে ইনস্টল হয়েছে।
বিল্ট-ইন mysqladmin টুল ব্যবহার করে ডিবি সার্ভারের সাথে সংযোগ করুন:
mysqladmin version
কমান্ডটি নিচের আউটপুট রিটার্ন করে:
mysqladmin Ver 9.1 Distrib 10.4.7-MariaDB, for Linux on x86_64 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Server version 10.4.7-MariaDB Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/lib/mysql/mysql.sock Uptime: 59 min 35 sec Threads: 10 Questions: 24 Slow queries: 0 Opens: 28 Flush tables: 1 Open tab
এটি বোঝায় MariaDB সফলভাবে ইনস্টল হয়েছে, ডাটাবেস আপ এবং রানিং আছে।
আপনি mariadb সার্ভার কনসোলে সংযোগ করে SQL কমান্ড ইন্টারঅ্যাক্টিভভাবে চালাতে পারেন:
mysql -u root -p
MariaDB কনফিগারেশন ফাইল — my.cnf
সাধারণত, MariaDB ইনস্টল করার পর, আমি কনফিগারেশন ফাইল /etc/my.cnf-এ আমার স্ট্যান্ডার্ড কনফিগারেশন যোগ করি যা অধিকাংশ সার্ভারে কাজ করে এবং এখনো কোনো সমস্যা তৈরি করেনি। my.cnf ক্লিয়ার করুন এবং নিচের টেক্সট যোগ করুন:
[mysqld] local-infile=0 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 max_allowed_packet = 128M sql_mode = "" log-error = /var/log/mysql-error.log # Cache parameters query_cache_size = 16M table_open_cache = 4096 thread_cache_size = 16 key_buffer_size = 8M thread_stack = 256K join_buffer_size = 2M sort_buffer_size = 2M # Parameters for temporary tables tmpdir = /tmp max_heap_table_size = 32M tmp_table_size = 32M # InnoDB parameters innodb_file_per_table innodb_buffer_pool_size = 32M innodb_flush_log_at_trx_commit = 2 innodb_flush_method = O_DIRECT innodb_use_native_aio = 0 transaction-isolation = READ-COMMITTED character-set-server = utf8 collation-server = utf8_unicode_ci init-connect = "SET NAMES utf8 COLLATE utf8_unicode_ci" skip-name-resolve [mysqldump] quick quote-names max_allowed_packet = 128M default-character-set = utf8 [mysql] [isamchk] key_buffer = 16M [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid
প্রধান my.cnf প্যারামিটারগুলো সম্পর্কে বিস্তারিত আলোচনা করা যাক:
- datadir হলো ডিবি ফাইলগুলো সংরক্ষিত থাকা ডিরেক্টরি;
- tmpdir হলো অস্থায়ী ফাইল সংরক্ষণের ডিরেক্টরি;
- skip-name-resolve DNS নাম রেজলভিং ডিজেবল করে;
- max_allowed_packet হলো অনুমোদিত সর্বোচ্চ প্যাকেজ সাইজ। যদি আপনার ডিবি blob ফিল্ড ব্যবহার করে, তবে এর মান সবচেয়ে বড় ফিল্ডের সাইজের চেয়ে কম হতে পারে না;
- max_connections হলো খোলা কানেকশনের সর্বোচ্চ সংখ্যা; এই প্যারামিটার নির্ধারণ করে যে কতজন ক্লায়েন্ট একসাথে mariadb সার্ভারের সাথে কাজ করতে পারে;
- # Cache parameters সেকশনে কোয়ারি ক্যাশের সাথে সম্পর্কিত সব কিছু রয়েছে। খুব উচ্চ মান সেট করা পরামর্শ দেওয়া হয় না কারণ আপনার ডিবি সার্ভার বেশি রিসোর্স খরচ করবে;
- # InnoDB parameters সেকশনে innodb টেবิลের সাথে সম্পর্কিত সব কিছু রয়েছে;
- innodb_buffer_pool_size হলো ডেটা এবং ইনডেক্সের জন্য ক্যাশ বাফার। আপনার সার্ভারে ১-২টি প্রজেক্ট থাকলে, উপলব্ধ RAM-এর ৭০-৮০% মান সেট করুন;
- innodb_flush_method Linux-এ O_DIRECT মান সেট করুন, এটি OS-লেভেল ক্যাশিং ডিজেবল করবে;
- innodb_flush_log_at_trx_commit এই প্যারামিটার innoDB টেবিলের রাইট স্পিডকে প্রভাবিত করে। এই প্যারামিটারকে সিরিয়াসলি নিন: আপনি যদি ০ সেট করেন, তবে আপনি উচ্চ পারফরম্যান্স পাবেন, কিন্তু ডেটা লসের ঝুঁকি বাড়বে। আমি ২ মান সেট করতে পছন্দ করি, কারণ আমি কোনো očিত ডিবি সার্ভার পারফরম্যান্স ゲইন দেখিনি, যখন সিকিউরিটি প্রায়োরিটি।
MariaDB-এর পারফরম্যান্স অপ্টিমাইজেশন ও টিউনিং
আমি যোগ করতে চাই যে আপনাকে আমার কনফিগারেশন ফাইল কপি করতে হবে না: প্রতিটি সার্ভার এবং প্রতিটি প্রজেক্টের তাদের নিজস্ব প্যারামিটার দরকার। আমি কিছু স্ক্রিপ্ট ব্যবহার করার পরামর্শ দিই যা MariaDB কনফিগারেশন স্বয়ংক্রিয়ভাবে চেক করে এবং সার্ভার অপ্টিমাইজেশনের জন্য কিছু সুপারিশ দেয়।
আপনার mariadb প্যারামিটার অপ্টিমাইজ করতে আপনি Tuning-Primer.sh স্ক্রিপ্ট ব্যবহার করতে পারেন। প্রথমে, অতিরিক্ত টুলস ইনস্টল করুন:
yum install bc net-tools -y
অপ্টিমাইজেশন স্ক্রিপ্ট ডাউনলোড করুন:
wget https://launchpadlibrarian.net/78745738/tuning-primer.sh
.sh ফাইলে এক্সিকিউট পারমিশন দিন:
chmod +x tuning-primer.sh
স্ক্রিপ্ট চালান:
./tuning-primer.sh
চালানোর পর, স্ক্রিপ্ট আপনাকে যে উপকারী তথ্যগুলো জানতে হবে সেগুলো দেখাবে। সবচেয়ে গুরুত্বপূর্ণ জিনিসগুলো লাল রঙে হাইলাইট করা থাকবে। এগুলো হলো যেসব ঠিক করার সুপারিশ করা হয়।
উদাহরণস্বরূপ, স্ক্রিপ্ট দেখায় যে কানেকশনের সংখ্যা আমার সেট করা মানের চেয়ে অনেক কম।
আপনি এই প্যারামিটার my.cnf ফাইলে এবং কনসোল দুটোই থেকে পরিবর্তন করতে পারেন। আমি কম মান (১০) সেট করেছিলাম এবং স্ক্রিপ্টটি এটিকে অনুমোদন করল।
এই চেকগুলো ব্যবহার করে আপনি আপনার mariadb সার্ভারের পারফরম্যান্স পーフেক্ট করতে পারেন।
আমি জানাতে চাই যে প্রস্তাবিত ডিবি সার্ভার ক্রমাগত অপারেটিং টাইম কমপক্ষে ৪৮ ঘণ্টা, তখন তথ্যটি আরও সঠিক হবে এবং আপনি আপনার সার্ভার টিউন করতে পারবেন।
আপনি স্লো কোয়ারি লগ সক্রিয় করার একটি সেকশন যোগ করতে পারেন। এটি আপনার প্রজেক্টের পারফরম্যান্স বিশ্লেষণে সাহায্য করবে। mysqld সেকশনে নিচের কোড যোগ করুন:
slow_query_log = 1 # স্লো কোয়ারি লগ সক্ষম করুন
long_query_time = 5 # সেকেন্ডে সময় সেট করুন
slow_query_log_file = /var/log/slow-query.log # আপনার স্লো কোয়ারি লগ ফাইলের নাম এবং পাথ
log_queries_not_using_indexes # কী কোয়ারি ইনডেক্স ব্যবহার না করে সেটি লগ ফাইলে লিখা হবে কিনা
এছাড়া, আপনাকে MariaDB-র জন্য লগ ফাইল এবং একটি স্লো কোয়ারি লগ এরর তৈরি করতে হবে:
touch /var/log/mysql-error.log
touch /var/log/slow-query.log
ডিবি সার্ভিস রিস্টার্ট করুন:
systemctl restart mariadb
আপনি আপনার স্লো কোয়ারি লগ দেখতে পারেন যদি /var/log/slow-query.log খুলেন বা রিয়েল টাইমে চেক করুন:
tail -f /var/log/slow-query.log
এভাবে আপনি আপনার প্রজেক্ট যেসব কোয়ারি আপনার ডিবিতে পাঠাচ্ছে সেগুলো বিশ্লেষণ করতে পারবেন এবং অডিট করতে পারবেন।
আপনি যদি কোনো ডিবি সেটিংস পরিবর্তন করেন, কনফিগারেশনটি এরর জন্য চেক করুন। my.cnf সেটিংসে যেকোনো পরিবর্তন করার পর, আপনাকে কনফিগারেশনটি এরর জন্য চেক করতে হবে:
systemctl status mariadb -l
বেসিক MariaDB শেল কমান্ড
নিচে একটি অ্যাডমিনিস্ট্রেটরকে mariadb কনসোলে প্রায়শই ব্যবহার করার জন্য মূল CLI কমান্ডগুলো দেখানো হলো।
লোকালি আপনার MariaDB কনসোলে লগ অন করতে এই কমান্ডটি চালান:
mysql -u root -p
আপনার MariaDB সার্ভারে রিমোট কানেক্ট করতে:
mysql -u root -p -h 192.168.1.20
উপকারী MariaDB (MySQL) কমান্ড:
create database db1;— db1 নামে একটি ডিবি তৈরি করেshow databases;— সার্ভারে ডিবিগুলোর তালিকা দেখায়use db1;— db1 নামে ডিবিতে লগ অন করেshow tables;— বর্তমান ডাটাবেসের সকল টেবিল তালিকাভুক্ত করেcreate user 'project'@'localhost' identified by '$sup#erP@ss1';— একটি ইউজার (project) তৈরি করে এবং এর পাসওয়ার্ড সেট করে $sup#erP@ss1grant all privileges on database_name.* to project@'localhost';— project ইউজারকে পূর্ণ প্রিভিলেজ দেয়flush privileges;— সকল প্রিভিলেজ আপডেট করেshow processlist;— সক্রিয় ডিবি কানেকশন দেখায়। আপনি এই কমান্ডটিও ব্যবহার করতে পারেন:show status where `variable_name` = 'Threads_connected';
আপনার mysql কনসোলে, আপনি কিছু ভেরিয়েবল দেখতে বা পরিবর্তন করতে পারেন, যেমন:
SHOW VARIABLES LIKE 'max_error_count';
বদলাতে:
SET max_error_count=256;
উপসংহারে আমি বলতে চাই যে ডিবি সার্ভার কনফিগার করার সময় আপনাকে সার্ভারে থাকা প্রজেক্টগুলো বিবেচনা করতে হবে। ক্ষুদ্র প্রজেক্টের জন্য যা প্রযোজ্য, তা বড় প্রজেক্টের জন্য নিঃসন্দেহে উপযুক্ত হবে না। চেষ্টা করুন, এক্সপেরিমেন্ট করুন এবং সবসময় আপনার লগ দেখুন। পরবর্তী আর্টিকেলে আমরা দেখাব MariaDB ডাটাবেস সার্ভারের মাঝপথে রেপ্লিকেশন ব্যবহার করে হাই অভেইলেবিলিটি এবং অ্যাপ পারফরম্যান্স কীভাবে বাড়ানো যায়।