web-dev-qa-db-ja.com

MySQLデータディレクトリを変更するには?

デフォルトのMySQLデータディレクトリを別のパスに変更することはできますか?古い場所からデータベースにアクセスできますか?

143
MySQL DBA
  1. 次のコマンドを使用してMySQLを停止します。

    Sudo /etc/init.d/mysql stop
    
  2. 次のコマンドを使用して、既存のデータディレクトリ(デフォルトは/var/lib/mysqlにあります)をコピーします。

    Sudo cp -R -p /var/lib/mysql /newpath
    
  3. 次のコマンドでMySQL構成ファイルを編集します。

    Sudo gedit /etc/mysql/my.cnf   # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
    
  4. datadirのエントリを探し、パス(/var/lib/mysqlである必要があります)を新しいデータディレクトリに変更します。

  5. ターミナルで、次のコマンドを入力します。

    Sudo gedit /etc/apparmor.d/usr.sbin.mysqld
    
  6. /var/lib/mysqlで始まる行を探します。新しいパスを持つ行の/var/lib/mysqlを変更します。

  7. ファイルを保存して閉じます。

  8. 次のコマンドでAppArmorプロファイルを再起動します。

    Sudo /etc/init.d/apparmor reload
    
  9. 次のコマンドでMySQLを再起動します。

    Sudo /etc/init.d/mysql restart
    
  10. MySQLにログインすると、以前と同じデータベースにアクセスできます。

250
user1341296

まず、mysqlサーバーを停止する必要があります。例えば.

# /etc/init.d/mysql stop

その後、古いデータディレクトリ(例:/ var/lib/mysql)をコピーしてください。新しいディレクトリへの権限

# cp -R -p /var/lib/mysql /new/data/dir

これで、/etc/mysql/my.cnfで新しいデータを変更し、サーバーを再起動できます

# /etc/init.d/mysql restart
13
H6.

現在のデータを新しいディレクトリにコピーし、my.cnfをMySQLに変更する必要があります。

[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/

サーバーが実行されていないの場合、データベースをコピーする必要があります。

12
RageZ

すばやく簡単に:

# Create new directory for MySQL data
mkdir /new/dir/for/mysql

# Set ownership of new directory to match existing one
chown --reference=/var/lib/mysql /new/dir/for/mysql

# Set permissions on new directory to match existing one
chmod --reference=/var/lib/mysql /new/dir/for/mysql

# Stop MySQL before copying over files
service mysql stop

# Copy all files in default directory, to new one, retaining perms (-p)
cp -rp /var/lib/mysql/* /new/dir/for/mysql/

/etc/my.cnfファイルを編集し、[mysqld]の下に次の行を追加します。

datadir=/new/dir/for/mysql/

CageFS(CloudLinuxの有無にかかわらず)を使用していて、MySQLディレクトリを変更する場合、このファイルに新しいディレクトリを追加する必要があります:

/etc/cagefs/cagefs.mp

そして、次のコマンドを実行します。

cagefsctl --remount-all
9
sMyles

最初にmysqldを停止します

mysql_install_db --user=mysql \
                 --basedir=/opt/mysql/mysql \
                 --datadir=/opt/mysql/mysql/data

次に、/etc/mysql/my.cnfのdatadirを変更します
mysqldを起動します

ノート:
#1:おそらくSELinuxの設定を調整する必要があります(トラブルの場合はSELinuxを無効にして試してください)。Apparmor(Ubuntu)も問題になる可能性があります。

#2: MySQL Install DB Reference を参照

5
Murlo

マシンにデータベースを保持したいだけでなく、外付けハードドライブにデータを保持し、2つの使用を切り替えることを望みました。

Macを使用していて、Homebrewを使用してMySQLをインストールしている場合、これはうまくいくはずです。それ以外の場合は、マシン上のMySQL datadirを適切な場所に置き換えるだけです。

#cd to my data dir location
cd /usr/local/var/

#copy contents of local data directory to the new location
cp -r mysql/ /Volumes/myhd/mydatadir/

#temporarily move the old datadir
mv mysql mysql.local

#symlink to the new location
ln -s /Volumes/myhd/mydatadir mysql

次に、元に戻すときに次の操作を行います。

mv mysql mysql.remote

mv mysql.local mysql

また、ローカルデータベースを再度使用しています。お役に立てば幸いです。

5
wfbarksdale

最初にmysqlを停止します

Sudo service mysql stop

mysqlデータを新しい場所にコピーします。

Sudo cp -rp /var/lib/mysql /yourdirectory/

apparmorを使用する場合は、次のファイルを編集して次の操作を行います

Sudo vim /etc/apparmor.d/usr.sbin.mysqld

/ var/lib /を/ yourdirectory /に置き換えてから、ファイルに存在しない場合は以下を追加します

    /yourdirectory/mysql/ r,
    /yourdirectory/mysql/** rwk,

コマンドでファイルを保存します

:wq

ファイルmy.cnfを編集します

Sudo vim /etc/mysql/my.cnf

/ var/lib /を/ yourdirectory /に置き換えてから、コマンドで保存します

:wq

最後にmysqlを起動します

Sudo service mysql start

@ raid0、最適化の詳細を参照してください ici

4
naddame

私のようにdebianを使用していて、mysqlディレクトリをホームまたは/ home/...のパスに移動する場合、解決策は次のとおりです。

  • 「Sudo service mysql stop」でmysqlを停止します
  • 「/etc/mysql/mariadb.conf.d/50-server.cnf」の「datadir」変数を新しいパスに変更します
  • / var/lib/mysqlのバックアップを行います: "cp -R -p/var/lib/mysql/path_to_my_backup"
  • このディレクトリを削除します: "Sudo rm -R/var/lib/mysql"
  • データを新しいディレクトリに移動します: "cp -R -p/path_to_my_backup/path_new_dir
  • 「Sudo chown -R mysql:mysql/path_new_dir」によるアクセスの変更
  • 「/etc/systemd/system/mysqld.service」で変数「ProtectHome」を「false」に変更します
  • 「sudo systemctl daemon-reload」によってsystemdをリロードします
  • 「service mysql restart」でmysqlを再起動します

ある日、mariadbドキュメントで解決策を見つけました。これが何人かの人を助けることを願っています!

3
jojo150393

このソリューションは、Workbenchを使用してWindows 7で動作します。これを行うには管理者権限が必要です。本当にデータを保存したい場所へのジャンクション(ショートカットなど)を作成します

ワークベンチを開き、「インスタンス-起動/シャットダウン」を選択しますサーバーを停止します

https://bitsum.com/junctionmaster.php からJunction Masterをインストールします

C:\ ProgramData\MySQL\MySQL Server 5.6に移動します

[データ]を右クリックし、[移動してからフォルダーをリンク...]を選択します。警告を受け入れます[宛先を引用符なしの新しいデータディレクトリ]に移動します。

次に、「引用符なしの新しいデータディレクトリ」に移動します。

[データ]を右クリックし、[セキュリティ]タブに移動します。[編集]をクリックします。[タイプの追加] NETWORK SERVICEをクリックし、名前を確認します。

ワークベンチに戻り、サーバーを起動します

この方法は、Windows 7 EnterpriseでMySQL Workbench 6.2を使用して機能しました。

3
Rob

@ user1341296が述べたように、すべてに加えて...

/etc/mysql/my.cnfを変更しない方がよいでしょう。代わりに、新しいfile/etc/mysql/conf.d/ext.cnf(任意の名前ですが、拡張子はcnfname__である必要があります)を作成します。

そして、あなたの変更を入れてください:

[mysqld]
datadir=/vagrant/mq/mysql

この方法では

  • 既存のファイルを変更する必要はありません(自動化スクリプトの方が簡単です)
  • MySQLバージョン(および構成です!)の更新に問題はありません。
2
Pavel

あなたがWindowsユーザーであり、すべての回答がLinuxユーザー向けであることを確認するためにここに着いた場合、失望しないでください!私のように時間を無駄にさせません。

解決前のでたらめな話:

MySQLはDataディレクトリを使用して、作成したさまざまなデータベースのデータを保存します。最後に、データベースクラスで学習したデータベースの約束が損なわれないようにするために、アプリケーションとファイル形式にいくつかのジャグラーを追加したファイルの形式で保存する必要があります。

ここで、将来作成する可能性のある大きなデータベースを格納するのに十分なスペースがあることを確認したいので、ちょっと!もっとスペースのある別のドライブに入れたい。

したがって、次のことを行います。

ステップ-1:MySQLサービスを停止しています。

  Window Key + R - will open Run
  servies.msc    - will open services manager
  Locate MySQL80 (80 is for version 8.0, look for the one you've).
  Stop it.       (Right click, Stop)

ステップ-2:現在のデータディレクトリを見つける

 Goto C:\ProgramData\MySQL\MySQL Server 8.0

デフォルトでは、ここにDataという名前のフォルダーがあります。これは、デフォルト設定でMySQLによって使用されるフォルダーです(他のより良い場所が見つからなかった場合)。

my.iniファイルを見つけます。すぐそこにあるはずです。

エディター(Notepad ++など)で開きます。

Ctrlキーを押しながらFキーを押して、ファイル内のdatadirを見つけます。

ここに記載されているものはすべて、MySQLがデータディレクトリとして現在使用している実際の場所です。これが変更したいものです。

ステップ-:新しいデータディレクトリに置き換えます。

新しいデータディレクトリをW:__ MySQL_Dataにしたいとします。 my.iniファイルのdatadir値をこの値に変更しましょう。覚えておく必要がないように、以前の値はコメントのままにしてください。

 # Path to the database root
 # datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data
   datadir=W:/__MySQL_Data

ここで、xcopyを使用して、デフォルトのdatadirW:\にコピーします。コマンドプロンプトの起動(Window + R、cmd、Enter)

 >> xcopy "\C:\ProgramData\MySQL\MySQL Server 8.0" "W:\" /E /H /K /O /X

そして、コピーしたフォルダーの名前を、変更した新しいdatadir値に変更します。ここ:W:/__MySQL_Data

単純にコピーしないのはなぜですか?まあそれはクールではないからです!これはコピーされたフォルダーのアクセス許可を失わないので、MySQL80を再起動しても、「ローカルコンピューターのMySQL80サービスが開始して停止しました。一部のサービスは自動的に停止します。他のサービスやプログラムで使用されていない場合。」 -礼儀:Microsoft

ステップ-4:サービスの再起動

 Well, go back to the Services Manager to Start again, 
 "MySQL80" that you stopped, to restart it again.

ステップ-5:完了!さあ、仕事に戻りましょう!!

1
Prem KTiw

マシンをアップグレードするときに、ボックスからボックスに移動するときに、これを頻繁に行う必要があります。/var/lib/mysqlをより良い場所に移動することに加えて、古いMySQLインストールから古いDBテーブルを復元する必要があることがよくあります。これを行うためには...

  1. Mysqlを停止します。必要に応じて上記の指示に従ってください。
  2. データベースディレクトリ(古いインストールのデータベースごとに1つあります)を新しいDATADIRの場所にコピーします。ただし、「mysql」および「performance_schema」ディレクトリは省略します。
  3. コピーされたデータベースディレクトリ間の権限を修正します。所有権はmysql:mysql、ディレクトリは700、ファイルは660である必要があります。
  4. Mysqlを再起動します。インストールに応じて、古いバージョンのDBファイルを更新する必要があります。
1
K Markey

プログラムでこれを実行したい場合(geditを使用した手動のテキスト入力なし)は、上記のuser1341296の回答に基づいたDockerfileのバージョンです。

FROM spittet/Ruby-mysql
MAINTAINER [email protected]

RUN cp -R -p /var/lib/mysql /dev/shm && \
    rm -rf /var/lib/mysql && \
    sed -i -e 's,/var/lib/mysql,/dev/shm/mysql,g' /etc/mysql/my.cnf && \
    /etc/init.d/mysql restart

Dockerハブで利用可能: https://hub.docker.com/r/richardjecooke/Ruby-mysql-in-memory/

1
Richard

MySQLは別の物理ディスクからマップされたため、MySQLを/homeディレクトリに移動する必要がありました。ライブをよりシンプルにするために、my.cnfのディレクトリを変更する代わりに、元のディレクトリ/home/mysqlの代わりに新しいディレクトリ/var/lib/mysqlをマッピングしました。それは私たちにとって魅力的なものです(CentOS 7.1でテスト済み)。

新しいディレクトリを作成し、適切な権限を設定します。

mkdir -p /home/mysql
chmod 755 /home/mysql
chown mysql:mysql /home/mysql

実行中のMySQLを停止します。

systemctl stop mysql

データディレクトリを移動します。

mv -f /var/lib/mysql/* /home/mysql

永続的なマウントを作成して実行します。

echo "/home/mysql /var/lib/mysql none    bind   0 0" >> /etc/fstab
mount -a

サーバーを再起動します。

systemctl start mysql
1
TomS

上記の手順は基礎であり基本です。私はそれらに従いましたが、「mysql failed to start」というエラーを受け取りました。

新しいフォルダーにmysqlデータを保存するには、フォルダーに権限と所有権mysql:mysqlがあることを確認する必要があります。

これに加えて、たとえば/ data/mysql /がある場合、mysqlの親ディレクトリの権限と所有権を確認する必要があります。ここで、/ data /ディレクトリはroot:rootである必要があります。/mysqlの親ディレクトリの所有権を変更した後、「mysql failed to start」というエラーを修正しました。私のVMのOSはRHEL 7.6です。

0

環境の1つでは、mysqlデータディレクトリを新しい場所に変更しましたが、mysqlサーバーの再起動中に時間がかかりました。そのため、ポートを確認しましたが、他のプロセスがmysqlポートをリッスンしていることがわかりました。そのため、プロセスを強制終了し、mysqlサーバーを再起動しましたが、うまくいきました。

以下の手順に従って、データディレクトリを変更しました。 Linuxでmysqlデータディレクトリを変更する

0
santosh tiwary

SuSE 13.1では、これはmysqlデータディレクトリを別の場所に移動するのにうまく機能します。/home/example_user /に、よりわかりやすい名前を付けます:

/ var/lib /内:

# mv -T mysql /home/example_user/mysql_datadir
# ln -s /home/example_user/mysql_datadir ./mysql

Mysqlを再起動しました:

# systemctl restart mysql.service

しかし、それさえ必要ではなかったのではないかと疑っています。

0
user3346151

最初に、設定ファイルがどこにあるかを知る必要がありますか?あなたの設定ファイルはどこにありますか?

Apt-getまたはyum installでインストールした場合。

設定ファイルは

/etc/mysql/my.cnf

データファイルは

/ var/lib/mysql

そしてあなたがすべきことは

  1. mysqlを停止します
  2. mysqlデータを新しいディレクトリに変更します
  3. 構成ファイルを変更します
  4. 構成ファイルをリロードします
  5. mysqlを再起動します

そして、仕事が終わった。

ただし、aptまたはyumを使用してインストールしなかった場合、ディレクトリはこれを好まない可能性があり、mysqlファイルは

whereis mysql

0
42wolf