MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

Ubuntu 16.04でMySQLデータディレクトリを別の場所へ移動・変更する方法

この記事では、MySQLのデータディレクトリを変更し、データベースのデータを新しい場所へ移動する方法を解説します。データベースが急速に成長している場合や、セキュリティ上の理由でデータディレクトリを別の場所へ移したい場合に役立つ手順です。

前提条件

  • Sudo権限を持つ一般(非root)ユーザーが設定されたUbuntuマシン
  • MySQLがインストール済みで正常に動作していること
  • データの移動先となる新しいボリュームまたはロケーション。本記事では、サーバーに接続した新規ボリューム「data_vol」を使用し、移動先を /mnt/data_vol/mysql とします。

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.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

MySQLのrootパスワードを求められたら、パスワードを入力します。次のコマンドを実行して、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
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を使用します。「-a」オプションはデータファイルのパーミッションを保持し、「-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/sys/x@0024user_summary.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

次に、デフォルトのデータディレクトリを変更します。方法はいくつかありますが、ここでは /etc/mysql/mysql.conf.d/mysqld.cnf ファイルを編集します。

$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
Output:
[mysqld_safe]
socket     = /var/run/mysqld/mysqld.sock
nice       = 0
[mysqld]
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

AppArmorのエイリアス設定を変更する

さらに、/etc/apparmor.d/tunables/alias ファイルも編集する必要があります。ファイルの末尾に、以下のエイリアスルールを追加してください。

$ sudo vi /etc/apparmor.d/tunables/alias
alias /var/lib/mysql/ -> /mnt/data_vol/mysql,

ファイルの編集が完了したら、apparmorを再起動します。

また、デフォルトのデータディレクトリを変更したため、スクリプト環境を正常に通過させるための最小限のディレクトリ構造を作成する必要があります。以下のコマンドを実行してください。

$ 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
 Main PID: 18480 (mysqld)
    Tasks: 28 (limit: 512)
    Memory: 137.3M
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)
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のデータディレクトリを新しい場所へ移行する方法を学びました。これにより、より多くのデータを別の場所に保存したり、データのセキュリティを強化することが可能になります。

  1. Windows 10でプログラムの既定のインストール先を変更する方法

    新しいプログラムやアプリケーションをインストールすると、通常はシステムのアーキテクチャやソフトウェアの種類に応じて、「C:\Program Files」または「C:\Program Files (x86)」フォルダーに自動的に保存されます。しかし、Cドライブの空き容量が不足している場合は、既定のインストール先を別のドライブへ変更することで問題を回避できます。一部のソフトウェアではインストール時に保存先を選択できますが、そのオプションが用意されていないケースも多いため、既定のインストール先をあらかじめ変更しておくことが有効です。 変更前の注意点 ディスク容量に十分な余裕がある場合は、既定のイン

  2. 【Excel】フィルターオプション(高度なフィルタ)で抽出結果を別の場所にコピーする方法

    Excelのフィルターオプション(高度なフィルタ)は、抽出条件の適用の有無にかかわらず、セル範囲のデータを別の場所へコピーできる非常に便利な機能です。本記事では、フィルターオプションを使ってデータ範囲を別の場所にコピーする方法を、ステップごとにわかりやすく解説します。 Excelのフィルターオプションとは? フィルターオプションは、Excelのデータタブにある並べ替えとフィルターグループから利用できるツールです。 この機能では、任意のデータセットに対して次の3つの操作を実行できます。 データセットをある場所から別の場所へコピーする 抽出条件を指定してデータを絞り込む 重複する値を削除し、