デフォルトのMySQLデータディレクトリを別のパスに変更することはできますか?古い場所からデータベースにアクセスできますか?
次のコマンドを使用してMySQLを停止します。
Sudo /etc/init.d/mysql stop
次のコマンドを使用して、既存のデータディレクトリ(デフォルトは/var/lib/mysql
にあります)をコピーします。
Sudo cp -R -p /var/lib/mysql /newpath
次のコマンドでMySQL構成ファイルを編集します。
Sudo gedit /etc/mysql/my.cnf # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
datadir
のエントリを探し、パス(/var/lib/mysql
である必要があります)を新しいデータディレクトリに変更します。
ターミナルで、次のコマンドを入力します。
Sudo gedit /etc/apparmor.d/usr.sbin.mysqld
/var/lib/mysql
で始まる行を探します。新しいパスを持つ行の/var/lib/mysql
を変更します。
ファイルを保存して閉じます。
次のコマンドでAppArmorプロファイルを再起動します。
Sudo /etc/init.d/apparmor reload
次のコマンドでMySQLを再起動します。
Sudo /etc/init.d/mysql restart
MySQLにログインすると、以前と同じデータベースにアクセスできます。
まず、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
現在のデータを新しいディレクトリにコピーし、my.cnf
をMySQLに変更する必要があります。
[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/
サーバーが実行されていないの場合、データベースをコピーする必要があります。
すばやく簡単に:
# 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
最初に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 を参照
マシンにデータベースを保持したいだけでなく、外付けハードドライブにデータを保持し、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
また、ローカルデータベースを再度使用しています。お役に立てば幸いです。
最初に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
私のようにdebianを使用していて、mysqlディレクトリをホームまたは/ home/...のパスに移動する場合、解決策は次のとおりです。
ある日、mariadbドキュメントで解決策を見つけました。これが何人かの人を助けることを願っています!
このソリューションは、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を使用して機能しました。
@ user1341296が述べたように、すべてに加えて...
/etc/mysql/my.cnf
を変更しない方がよいでしょう。代わりに、新しいfile/etc/mysql/conf.d/ext.cnf
(任意の名前ですが、拡張子はcnf
name__である必要があります)を作成します。
そして、あなたの変更を入れてください:
[mysqld]
datadir=/vagrant/mq/mysql
この方法では
あなたが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
を使用して、デフォルトのdatadir
をW:\
にコピーします。コマンドプロンプトの起動(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:完了!さあ、仕事に戻りましょう!!
マシンをアップグレードするときに、ボックスからボックスに移動するときに、これを頻繁に行う必要があります。/var/lib/mysqlをより良い場所に移動することに加えて、古いMySQLインストールから古いDBテーブルを復元する必要があることがよくあります。これを行うためには...
プログラムでこれを実行したい場合(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/
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
上記の手順は基礎であり基本です。私はそれらに従いましたが、「mysql failed to start」というエラーを受け取りました。
新しいフォルダーにmysqlデータを保存するには、フォルダーに権限と所有権mysql:mysqlがあることを確認する必要があります。
これに加えて、たとえば/ data/mysql /がある場合、mysqlの親ディレクトリの権限と所有権を確認する必要があります。ここで、/ data /ディレクトリはroot:rootである必要があります。/mysqlの親ディレクトリの所有権を変更した後、「mysql failed to start」というエラーを修正しました。私のVMのOSはRHEL 7.6です。
環境の1つでは、mysqlデータディレクトリを新しい場所に変更しましたが、mysqlサーバーの再起動中に時間がかかりました。そのため、ポートを確認しましたが、他のプロセスがmysqlポートをリッスンしていることがわかりました。そのため、プロセスを強制終了し、mysqlサーバーを再起動しましたが、うまくいきました。
以下の手順に従って、データディレクトリを変更しました。 Linuxでmysqlデータディレクトリを変更する
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
しかし、それさえ必要ではなかったのではないかと疑っています。
最初に、設定ファイルがどこにあるかを知る必要がありますか?あなたの設定ファイルはどこにありますか?
Apt-getまたはyum installでインストールした場合。
設定ファイルは
/etc/mysql/my.cnf
データファイルは
/ var/lib/mysql
そしてあなたがすべきことは
そして、仕事が終わった。
ただし、aptまたはyumを使用してインストールしなかった場合、ディレクトリはこれを好まない可能性があり、mysqlファイルは
whereis mysql