簡體   English   中英

如何更改 MySQL 數據目錄?

[英]How to change MySQL data directory?

是否可以將我的默認 MySQL 數據目錄更改為另一個路徑? 我可以從舊位置訪問數據庫嗎?

  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,您可以訪問與以前相同的數據庫。

快速簡便的操作:

# 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

您必須將當前數據復制到新目錄並更改my.cnf您的 MySQL。

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

您必須在服務器未運行時復制數據庫。

首先你應該停止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

如果像我一樣使用 debian 並且想將 mysql 目錄移動到您的家或 /home/... 上的路徑,則解決方案是:

  • 通過“sudo service mysql stop”停止 mysql
  • 將“datadir”變量更改為“/etc/mysql/mariadb.conf.d/50-server.cnf”中的新路徑
  • 備份 /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 文檔上為我找到了解決方案。 希望這可以幫助一些人!

如果您是 Windows 用戶並登陸這里發現所有答案都適用於 Linux 用戶,請不要失望! 我不會讓你像我那樣浪費時間。

解決方案前的一些廢話:

MySQL 使用一個 Data 目錄來存儲您創建的不同數據庫的數據。 好吧,最后,它必須以文件的形式存儲它們,並在應用程序和文件格式中添加一些雜耍,以確保您在 Databases 類中學到的 Database 承諾完好無損。

現在您想確保有足夠的空間來存儲您將來可能創建的大型數據庫,所以您想,嘿! 我想把它放到另一個有更多空間的驅動器中。

因此,您執行以下操作。

步驟 - 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 當前用於數據目錄的實際位置。 這就是你想要改變的。

步驟 - 3 :用新的數據目錄替換它。

假設您希望新數據目錄為 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 服務已啟動然后停止。某些服務會自動停止如果它們未被其他服務或程序使用。” - 禮貌:微軟

第 4 步:重新啟動服務

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

第 5 步:完成! 現在回去工作!!

我想在我的機器上保留一個數據庫,但在我的外部硬盤驅動器上也有一個數據,並在兩者之間切換。

如果您使用的是 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

並且您再次使用本地數據庫。 希望有幫助。

第一站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 安裝數據庫參考

首先停止你的mysql

sudo service mysql stop

將mysql數據復制到新位置。

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

如果您使用apparmor,請編輯以下文件並執行以下操作

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

將 where /var/lib/ 替換為 /yourdirectory/ 然后將以下內容添加到文件中(如果不存在)

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

使用命令保存文件

:wq

編輯文件 my.cnf

sudo vim /etc/mysql/my.cnf

用 /yourdirectory/ 替換 where /var/lib/ 然后用命令保存

:wq

最后啟動mysql

sudo service mysql start

@查看更多關於raid0,優化ici

此解決方案適用於使用 Workbench 的 Windows 7。 您將需要管理員權限才能執行此操作。 它創建了一個連接(就像一個快捷方式)到你真正想要存儲數據的任何地方

打開 Workbench 並選擇 INSTANCE - Startup / Shutdown 停止服務器

https://bitsum.com/junctionmaster.php安裝 Junction Master

導航到 C:\\ProgramData\\MySQL\\MySQL Server 5.6

右鍵單擊數據並選擇“移動,然后將文件夾鏈接到...”接受警告將目標指向“您的新數據目錄在此處不帶引號”單擊移動和鏈接

現在轉到“這里沒有引號的新數據目錄”

右鍵單擊數據轉到安全選項卡單擊編輯單擊添加類型網絡服務然后檢查名稱單擊確定單擊允許完全控制復選框然后確定

返回 Workbench 並啟動服務器

這種方法在 Windows 7 Enterprise 上使用 MySQL Workbench 6.2 對我有用。

@user1341296 所說的一切,加上......

您最好不要更改/etc/mysql/my.cnf而是要創建新文件/etc/mysql/conf.d/ext.cnf (任何名稱,但擴展名應為cnf

並將您的更改放入其中:

[mysqld]
datadir=/vagrant/mq/mysql

這樣

  • 您不需要更改現有文件(自動化腳本更容易)
  • MySQL 版本(以及它的配置!)更新沒有問題。

我在升級機器時經常需要這樣做,從一個盒子移動到另一個盒子。 除了將 /var/lib/mysql 移動到更好的位置之外,我還經常需要從舊的 MySQL 安裝中恢復舊的數據庫表。 為了做到這一點...

  1. 停止mysql。 按照上面的說明,有必要。
  2. 將數據庫目錄——每個舊安裝的數據庫都有一個——復制到新的 DATADIR 位置。 但省略“mysql”和“performance_schema”目錄。
  3. 正確復制數據庫目錄之間的權限。 所有權應該是mysql:mysql,目錄應該是700,文件應該是660。
  4. 重啟mysql。 根據您的安裝,舊版本的 DB 文件應該更新。

我們不得不將 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

如果您想以編程方式執行此操作(無需使用 gedit 手動輸入文本),這里有一個基於 user1341296 上面的回答的 Dockerfile 版本:

FROM spittet/ruby-mysql
MAINTAINER you@gmail.com

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/

也可以符號鏈接 datadir。 至少在 macOS 開發環境中。

(自制)例如

# make sure you're not overwriting anything important, backup existing data
mv /usr/local/var/mysql [your preferred data directory] 
ln -s [your preferred data directory] /usr/local/var/mysql

重啟mysql。

首先,你應該知道你的配置文件在哪里? 你的配置文件在哪里?

如果你用 apt-get 或 yum install 安裝。

配置文件可能出現在

/etc/mysql/my.cnf

數據文件可能出現在

/var/lib/mysql

你應該做的是

  1. 停止mysql
  2. 將mysql數據更改為新目錄
  3. 更改配置文件
  4. 重新加載配置文件
  5. 重啟mysql

然后工作完成。

但是如果你沒有用apt或yum安裝它,目錄可能不喜歡這樣,你可以找到mysql文件

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

但懷疑即使那樣也沒有必要。

對於我將 mysql 數據目錄更改為新位置的環境之一,但在重新啟動 mysql 服務器期間,這需要時間。 於是查了一下端口,發現其他進程正在監聽mysql端口。 所以我終止了這個進程並重新啟動了 mysql 服務器,它運行良好。

我按照以下步驟更改數據目錄,效果很好。 在 Linux 中更改 mysql 數據目錄

以上步驟是基礎和基礎。 我跟着他們,仍然收到“mysql無法啟動”的錯誤。

對於用於存儲 mysql 數據的新文件夾,您需要確保該文件夾具有 mysql:mysql 的權限和所有權。

除此之外,如果有/data/mysql/,它需要檢查mysql的父目錄的權限和所有權。 這里 /data/ 目錄應該是 root:root。 在更改/mysql 的父目錄的所有權后,我修復了“mysql 無法啟動”的錯誤。 我的 VM 中的操作系統是 RHEL 7.6。

除了已接受的答案,如果您想在 bash 腳本或 dockerfile 中以編程方式更改配置文件中的 datadir,您可以使用 sed:

sed -i 's|# datadir\t= /var/lib/mysql|datadir\t= custom_path|g' /etc/mysql/mysql.conf.d/mysqld.cnf

這取消了設置的注釋並將值設置為custom_path 這里的一個重要細節是=左邊的字符是一個制表符,右邊的字符是一個空格。 我花了一段時間才找到它。

如果您使用的是 SE linux,請通過編輯 /etc/selinux/config 並將 SELINUX=enforcing 更改為 SELINUX=permissive 將其設置為許可模式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM