এই নিবন্ধে, আমরা শিখব কিভাবে MySQL ডেটা ডিরেক্টরি পরিবর্তন করতে হয় বা MySQL ডেটাবেস ডেটাকে নতুন অবস্থানে স্থানান্তর করতে হয়, এই পরিস্থিতিটি ব্যবহার করা যেতে পারে যখন ডাটাবেস খুব দ্রুত বৃদ্ধি পাচ্ছে, বা কিছু নিরাপত্তার কারণে আমরা ডেটা ডিরেক্টরি সরাতে চাই। নতুন অবস্থানে।
পূর্বশর্ত
- সুডো অনুমতি সহ একটি নন-রুট ব্যবহারকারী সহ একটি উবুন্টু মেশিন।
- MySQL ইনস্টল করা এবং কাজ করছে৷ ৷
- একটি নতুন ভলিউম বা অবস্থান যেখানে আমরা ডাটাবেসের ডেটা অবস্থান সরাতে চাই, নতুন অবস্থান হবে /mnt/data_vol/MySQL কারণ data_vol হল মেশিন বা সার্ভারের সাথে সংযুক্ত নতুন ভলিউম।
MySQL ডেটা ফোল্ডারের অবস্থান পরিবর্তন করা হচ্ছে
আমরা আরও এগিয়ে যাওয়ার আগে, আমরা প্রথমে ডেটা ডিরেক্টরির বর্তমান অবস্থান খুঁজে বের করব
$ mysql –u root –p Output: Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 472 Server version: 5.6.30-0ubuntu0.14.04.1 (Ubuntu) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>সাফ করতে '\c' টাইপ করুন
মাইএসকিউএল-এর রুট পাসওয়ার্ডের জন্য অনুরোধ করা হলে, অনুগ্রহ করে পাসওয়ার্ডটি লিখুন। MySQL-এর বর্তমান কার্যরত ডাটা ডিরেক্টরি জানতে নিচের কমান্ডটি চালান।
Mysql> select @@datadir; Output: +-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)
যেহেতু আউটপুট দেখাবে যে MySQL ডাটাবেস /var/lib/MySQL কে ডেটা ডিরেক্টরি হিসাবে ডিফল্ট ফোল্ডার হিসাবে ব্যবহার করে। আমরা প্রথমে কিছু পরিবর্তন করার আগে, আমরা ডেটার অখণ্ডতা পরীক্ষা করব, আমরা MySQL বন্ধ করব এবং স্থিতি পরীক্ষা করব
$ sudo systemctl stop mysql
যেহেতু systemctl সার্ভিস কমান্ডের জন্য কিছু প্রদর্শন করবে না
$ sudo systemctl status mysql Output: mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: inactive (dead) since Mon 2016-09-12 13:57:43 IST; 1s ago Process: 17669 ExecStartPost=/usr/share/mysql/mysql-systemd-start post (code=exited, status=0/SUCCESS) Process: 17668 ExecStart=/usr/sbin/mysqld (code=exited, status=0/SUCCESS) Process: 17664 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 17668 (code=exited, status=0/SUCCESS) Sep 12 13:55:14 ubuntu-16 systemd[1]: Starting MySQL Community Server... Sep 12 13:55:15 ubuntu-16 systemd[1]: Started MySQL Community Server. Sep 12 13:57:40 ubuntu-16 systemd[1]: Stopping MySQL Community Server... Sep 12 13:57:43 ubuntu-16 systemd[1]: Stopped MySQL Community Server.
একবার, আমরা নিশ্চিত করি যে MySQL বন্ধ হয়ে গেছে, আমরা ডেটাটিকে নতুন অবস্থানে নিয়ে যাব। ডেটা সরানোর জন্য, আমরা Rsync ব্যবহার করব –একটি বিকল্প যা ডেটা ফাইলের অনুমতি সংরক্ষণ করে এবং –v যা ভার্বোস আউটপুট দেখায়।
নতুন অবস্থানে ডাটা সরানোর সম্পূর্ণ কমান্ড নিচে দেওয়া হল –
$ rsync –av /var/lib/mysql /mnt/data_vol/ OutPut: sending incremental file list mysql/ mysql/auto.cnf mysql/debian-5.7.flag mysql/ib_buffer_pool mysql/ib_logfile0 mysql/ib_logfile1 mysql/ibdata1 mysql/mysql/ mysql/mysql/columns_priv.MYD mysql/mysql/columns_priv.MYI mysql/mysql/columns_priv.frm mysql/mysql/db.MYD mysql/mysql/db.MYI mysql/mysql/db.frm mysql/mysql/db.opt …. mysql/sys/x@0024user_summary.frmmysql/sys/x@0024user_summary_by_file_io.frm mysql/sys/x@0024user_summary_by_file_io_type.frm mysql/sys/x@0024user_summary_by_stages.frm mysql/sys/x@0024user_summary_by_statement_latency.frm mysql/sys/x@0024user_summary_by_statement_type.frm mysql/sys/x@0024wait_classes_global_by_avg_latency.frm mysql/sys/x@0024wait_classes_global_by_latency.frm mysql/sys/x@0024waits_by_host_by_latency.frm mysqlsys//x@0024waits_by_user_by_latency.frm mysql/sys/x@0024waits_global_by_latency.frm sent 199,384,083 bytes received 6,858 bytes 132,927,294.00 bytes/sec total size is 199,307,568 speedup is 1.00
rsync এর পরে, সফলভাবে ডেটা ফোল্ডারটিকে নতুন অবস্থানে নিয়ে যান। নিরাপত্তার কারণে আমরা ডেটা ফোল্ডারটি রাখব যতক্ষণ না নিশ্চিত করা হয় যে ডেটা নতুন অবস্থানে রয়েছে, আমরা বর্তমান ডেটা ডিরেক্টরির নাম পরিবর্তন করে /var/lib/mysql থেকে /var/lib/mysql_backup করব। বর্তমান ডাটা ডাইরেক্টরি পরিবর্তন করার কমান্ড নিচে দেওয়া হল।
নীচে বর্তমান ডাটা ডিরেক্টরি পরিবর্তন করার কমান্ড রয়েছে –
$ sudo mv /var/lib/mysql /var/lib/mysql_backup
এখন, আমরা ডিফল্ট ডেটা ডিরেক্টরি পরিবর্তন করব, পরিবর্তন করার জন্য আমাদের অনেক উপায় আছে, কিন্তু আমরা mysqld.cnf ফাইলটি সম্পাদনা করব যা /etc/mysql/mysql.conf.d/mysqld.cnf এ অবস্থিত। পি>
mysqld.cnf সম্পাদনা করতে, নীচের কমান্ডটি রয়েছে
$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf Output: [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] # # * Basic Settings # user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /mnt/data_vol/mysql/ tmpdir = /tmp lc-messages-dir = /usr/share/mysql skip-external-locking
অ্যাপারমার উপনাম সেটিংস পরিবর্তন করা হচ্ছে
এছাড়াও, আমাদের /etc/apparmor.d/tunables/alias
সম্পাদনা করতে হবেফাইলের নীচে, আমাদের উপনাম নিয়মে নিম্নলিখিত লাইনগুলি যোগ করতে হবে৷
৷$ sudo vi /etc/apparmor.d/tunables/alias Output: # ------------------------------------------------------------------ # # Copyright (C) 2010 Canonical Ltd. # # This program is free software; you can redistribute it and/or # modify it under the terms of version 2 of the GNU General Public # License published by the Free Software Foundation. # # ------------------------------------------------------------------ # Alias rules can be used to rewrite paths and are done after variable # resolution. For example, if '/usr' is on removable media: # alias /usr/ -> /mnt/usr/, # # Or if mysql databases are stored in /home: # alias /var/lib/mysql/ -> /home/mysql/, alias /var/lib/mysql/ -> /mnt/data_vol/mysql
ফাইলটি এডিট হয়ে গেলে, আমাদের অ্যাপারমার রিস্টার্ট করতে হবে।
নিচে অ্যাপারমার রিস্টার্ট করার কমান্ড দেওয়া হল।
যেহেতু আমরা ডিফল্ট ডেটা ডিরেক্টরি পরিবর্তন করেছি, আমাদের নিচের কমান্ডটি চালানোর প্রয়োজন ছিল যা স্ক্রিপ্ট পরিবেশগুলি পাস করার জন্য ন্যূনতম ডিরেক্টরি ফোল্ডার কাঠামো তৈরি করবে৷
$ sudo mkdir /var/lib/mysql/mysql –p
এখন আমরা mysql পরিষেবাগুলি পুনরায় চালু করব৷
৷$ sudo systemctl start mysql
এখন আমরা নিচের কমান্ড দিয়ে MySQL পরিষেবার স্থিতি পরীক্ষা করব
$ sudo systemctl status mysql Output: mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2016-09-12 14:17:27 IST; 23s ago Process: 18481 ExecStartPost=/usr/share/mysql/mysql-systemd-start post (code=exited, status=0/SUCC Process: 18477 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCES Main PID: 18480 (mysqld) Tasks: 28 (limit: 512) Memory: 137.3M CPU: 329ms CGroup: /system.slice/mysql.service └─18480 /usr/sbin/mysqld Sep 12 14:17:26 ubuntu-16 systemd[1]: Starting MySQL Community Server... Sep 12 14:17:27 ubuntu-16 systemd[1]: Started MySQL Community Server.
নতুন ডেটা ডিরেক্টরি পরিবর্তিত হয়েছে তা নিশ্চিত করতে, আমরা নীচের কমান্ডটি চালাব
$ mysql -uroot -p Output: Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.13-0ubuntu0.16.04.2 (Ubuntu) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> select @@datadir +----------------------+ | @@datadir | +----------------------+ | /mnt/data_vol/mysql/ | +-----------------+ 1 row in set (0.00 sec) mysql>
একবার আমরা নিশ্চিত করি যে ডেটা ডিরেক্টরি পরিবর্তন করা হয়েছে, আমরা ডিফল্ট ডেটা ডিরেক্টরিটি সরিয়ে ফেলব যা /var/lib/mysql_backup-এ, পুরানো ডাটাবেস ডিরেক্টরি অপসারণের জন্য নীচে নির্দেশ রয়েছে৷
$ sudo rm –rf /var/lib/mysql_backup
উপরের কনফিগারেশন এবং ধাপে, আমরা MySQL ডেটা ডিরেক্টরিকে নতুন অবস্থানে স্থানান্তর করতে শিখেছি যা আমাদেরকে সুরক্ষিত করতে বা একটি ভিন্ন অবস্থানে আরও ডেটা সংরক্ষণ করতে সাহায্য করবে৷