এই নিবন্ধে আমি Linux CentOS 7-এ ডাটাবেস সার্ভার MariaDB এর ইনস্টলেশন, মৌলিক কনফিগারেশন এবং কর্মক্ষমতা অপ্টিমাইজেশান বিবেচনা করব। নিবন্ধের শেষে আমি MariaDB কনফিগারেশন ফাইলের কিছু উদাহরণ দেখাব যাতে আপনি সেরাটি বেছে নিতে সক্ষম হবেন। আপনার ডিবি সার্ভারের জন্য পরামিতি।
CentOS-এ MariaDB ইনস্টল করুন
সম্প্রতি, মারিয়াডিবি স্ট্যান্ডার্ড CentOS 7 বেস রিপোজিটরিতে যুক্ত করা হয়েছে, কিন্তু রিপোজিটরিতে এর সংস্করণটি 5.5। এই সংস্করণটি আপ-টু-ডেট নয়, এতে কিছু কর্মক্ষমতা সমস্যা রয়েছে এবং InnoDB-তে সম্পূর্ণ পাঠ্য অনুসন্ধান প্রদান করে না। MariaDB এর বর্তমান সংস্করণ ইনস্টল করতে, আপনাকে প্রথমে mariadb.org বিকাশকারী সংগ্রহস্থল যোগ করতে হবে।
ন্যানো ইনস্টল করুন yum ব্যবহার করে সম্পাদক:
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 পরিষেবা সক্রিয় এবং চলমান, তাই আপনি কনফিগারেশনের সাথে যেতে পারেন।
মারিয়াডিবি সার্ভার সুরক্ষিত করা
আমরা মারিয়াডিবি সার্ভার ইনস্টল এবং চালানোর পরে, আমরা নিরাপত্তা সেটিংসে যেতে পারি। বিল্ট-ইন স্ক্রিপ্ট চালান:
/usr/bin/mysql_secure_installation
প্রথমত, এটি আপনাকে রুট পাসওয়ার্ড লিখতে অনুরোধ করবে (mariadb-এর প্রাথমিক ইনস্টলেশনের পরে কোনও পাসওয়ার্ড সেট করা হয়নি), তাই আমরা ENTER টিপুন এবং পরবর্তী ধাপে একটি জটিল পাসওয়ার্ড সেট করব। তারপর আপনি দৃশ্যকল্প সম্পাদনের শেষ পর্যন্ত ENTER চাপতে পারেন। বেনামী ব্যবহারকারী, একটি দূরবর্তী রুট লগইন এবং পরীক্ষার টেবিল মুছে ফেলা হবে, এবং বিশেষাধিকার আপডেট করা হবে।
mariadb সার্ভারের সাথে দূরবর্তীভাবে সংযোগ করতে, আপনাকে অবশ্যই iptables ব্যবহার করে Linux ফায়ারওয়ালের জন্য কিছু নিয়ম তৈরি করতে হবে:
iptables -I INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables-save > /etc/sysconfig/iptables
ঐচ্ছিকভাবে, আপনি দূরবর্তী মারিয়াডিবি ডেটাবেসে আউটবাউন্ড সংযোগের অনুমতি দিতে পারেন:
iptables -I OUTPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
মারিয়াডিবি সংযোগ পরীক্ষা
আপনাকে নিশ্চিত করতে হবে যে MariaDB সফলভাবে ইনস্টল করা হয়েছে।
চলুন বিল্ট-ইন mysqladmin টুল ব্যবহার করে DB সার্ভারের সাথে সংযোগ করি:
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
এর মানে হল যে মারিয়াডিবি সফলভাবে ইনস্টল করা হয়েছে, ডাটাবেস চালু এবং চলছে।
ইন্টারেক্টিভভাবে SQL কমান্ড চালানোর জন্য আপনি mariadb সার্ভার কনসোলের সাথে সংযোগ করতে পারেন:
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 পরামিতিগুলিতে চিন্তা করি:
- দাতাদির ডিবি ফাইলগুলি যে ডিরেক্টরিতে সংরক্ষণ করা হয় তা হল;
- tmpdir অস্থায়ী ফাইল সংরক্ষণ করার ডিরেক্টরি;
- skip-name-resolve DNS নাম সমাধান নিষ্ক্রিয় করে;
- max_allowed_packet সর্বোচ্চ প্যাকেজের আকার অনুমোদিত। আপনি যদি DB ব্লব ক্ষেত্র ব্যবহার করেন, তাহলে এর মান বৃহত্তম ক্ষেত্রের আকারের চেয়ে কম হতে পারে না;
- সর্বোচ্চ_সংযোগ খোলা সংযোগের সর্বাধিক সংখ্যা; পরামিতি সেট করে যে কতজন ক্লায়েন্ট একই সাথে mariadb সার্ভারের সাথে কাজ করতে পারে;
- # ক্যাশে প্যারামিটার বিভাগটি ক্যোয়ারী ক্যাশে সম্পর্কিত সবকিছু অন্তর্ভুক্ত করে। আপনার ডিবি সার্ভার বেশি রিসোর্স ব্যবহার করবে বলে খুব বেশি মান সেট করার পরামর্শ দেওয়া হয় না;
- # InnoDB প্যারামিটার বিভাগে innodb টেবিলের সাথে সম্পর্কিত সবকিছু অন্তর্ভুক্ত রয়েছে;
- innodb_buffer_pool_size ডেটা এবং ইনডেক্সের জন্য ক্যাশে বাফার। যদি আপনার সার্ভারে 1-2টি প্রজেক্ট থাকে, তাহলে মানটি উপলব্ধ RAM এর 70-80% এ সেট করুন;
- innodb_flush_method লিনাক্সের জন্য O_DIRECT মান সেট করুন, এটি OS-স্তরের ক্যাশিং অক্ষম করবে;
- innodb_flush_log_at_trx_commit এই প্যারামিটারটি innoDB টেবিলের লেখার গতিকে প্রভাবিত করে। এই পরামিতিটি গুরুত্ব সহকারে নিন:আপনি যদি এখানে 0 সেট করেন, তাহলে আপনার কার্যক্ষমতা বেশি হবে, কিন্তু ডেটা হারানোর ঝুঁকি বেড়ে যায়। আমি এখানে মান 2 সেট করতে পছন্দ করি, যেহেতু আমি কোন সুস্পষ্ট DB সার্ভারের কর্মক্ষমতা লাভ দেখিনি, যখন নিরাপত্তা একটি অগ্রাধিকার।
মারিয়াডিবি-র জন্য পারফরম্যান্স অপ্টিমাইজেশান এবং টানিং
আমি যোগ করতে চাই যে আপনাকে আমার কনফিগারেশন ফাইল অনুলিপি করতে হবে না:প্রতিটি সার্ভার এবং প্রতিটি প্রকল্পের নিজস্ব পরামিতি প্রয়োজন। আমি কিছু স্ক্রিপ্ট ব্যবহার করার পরামর্শ দিই যেগুলি স্বয়ংক্রিয়ভাবে 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 ফাইল এবং কনসোলে এই প্যারামিটারটি পরিবর্তন করতে পারেন। আমি একটি নিম্ন মান (10) সেট করেছি এবং স্ক্রিপ্ট এটি অনুমোদন করেছে:
এই চেকগুলি ব্যবহার করে, আপনি আপনার mariadb সার্ভারের কর্মক্ষমতা নিখুঁত করতে পারেন।
আমি নোট করতে চাই যে প্রস্তাবিত ডিবি সার্ভারের অবিচ্ছিন্ন অপারেটিং সময় কমপক্ষে 48 ঘন্টা, তারপর তথ্য আরও নির্ভুল হবে এবং আপনি আপনার সার্ভার টিউন করতে সক্ষম হবেন৷
আপনি একটি ধীর ক্যোয়ারী লগ সক্রিয় করতে একটি বিভাগ যোগ করতে পারেন৷ এটি আপনার প্রকল্পের কর্মক্ষমতা বিশ্লেষণ করতে সাহায্য করবে। mysqld-এ নিম্নলিখিত যোগ করুন বিভাগ:
slow_query_log = 1 # enable the log of slow queries
long_query_time = 5 # set the time in seconds
slow_query_log_file = /var/log/slow-query.log # the name of your slow query log file and the path to it
log_queries_not_using_indexes # whether to write queries that do not use indexes to the log file
এছাড়াও আপনাকে অবশ্যই মারিয়াডিবি এবং একটি ধীরগতির ক্যোয়ারী লগ ত্রুটির জন্য লগ ফাইল তৈরি করতে হবে:
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
এইভাবে, আপনি আপনার প্রকল্প আপনার ডিবিতে পাঠানো প্রশ্নগুলি বিশ্লেষণ করতে এবং একটি অডিট পরিচালনা করতে সক্ষম হবেন৷
আপনি যদি কোনো DB সেটিংস পরিবর্তন করেন, ত্রুটির জন্য আপনার কনফিগারেশন পরীক্ষা করুন। 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';
— একটি ব্যবহারকারী (প্রকল্প) তৈরি করে এবং তার পাসওয়ার্ড সেট করে $sup#erP@ss1
grant all privileges on database_name.* to project@'localhost';
— ব্যবহারকারীর প্রকল্পে সম্পূর্ণ সুবিধা দেয়
flush privileges;
— সমস্ত বিশেষাধিকার আপডেট করে
show processlist;
- সক্রিয় DB সংযোগ দেখুন। আপনি এই কমান্ডটিও ব্যবহার করতে পারেন:
show status where `variable_name` = 'Threads_connected';
আপনার mysql কনসোলে, আপনি কিছু ভেরিয়েবল দেখতে বা পরিবর্তন করতে পারেন, যেমন:
SHOW VARIABLES LIKE 'max_error_count';
পরিবর্তন করতে:
SET max_error_count=256;
উপসংহারে আমি বলতে চাই যে আপনি যখন একটি ডিবি সার্ভার কনফিগার করেন তখন আপনাকে অবশ্যই সার্ভারে অবস্থিত প্রকল্পগুলি বিবেচনা করতে হবে। ছোট প্রকল্পের জন্য যা প্রযোজ্য তা অবশ্যই একটি বড় প্রকল্পের জন্য উপযুক্ত হবে না। চেষ্টা করুন, পরীক্ষা করুন এবং সর্বদা আপনার লগগুলি দেখুন। পরের প্রবন্ধে আমরা দেখাব কিভাবে মারিয়াডিবি ডাটাবেস সার্ভারের মধ্যে প্রতিলিপি ব্যবহার করে উচ্চ প্রাপ্যতা প্রদান করা যায় এবং অ্যাপের কার্যক্ষমতা বৃদ্ধি করা যায়।