【轉】如何將MySQL數據目錄更改爲CentOS 7上的新位置

本文轉載自:http://www.leftso.com/blog/362.html

介紹

數據庫隨着時間的推移而增長,有時超過了文件系統的空間。當它們與操作系統的其他部分位於同一分區上時,也可能遇到I / O爭用。RAID,網絡塊存儲和其他設備可以提供冗餘和其他所需的功能。無論您是增加更多空間,評估優化性能的方法,還是希望利用其他存儲功能,本教程將指導您重新定位MySQL的數據目錄。

先決條件

要完成本指南,您需要:

  • 一個CentOS 7服務器,具有sudo安裝有權限和MySQL 的非root用戶。您可以在CentOS 7初始服務器設置指南中瞭解更多關於如何設置具有這些權限的用戶。如果您還沒有安裝MySQL,CentOS 7指南中的如何安裝MySQL可以幫助您。

在這個例子中,我們將數據移動到一個塊存儲設備上/mnt/volume-nyc1-01。您可以在DigitalOcean指南的“ 如何使用數據塊存儲”中瞭解如何設置。

無論您使用何種底層存儲,本指南都可以幫助您將數據目錄移到新的位置。

第1步 - 移動MySQL數據目錄

爲了準備移動MySQL的數據目錄,讓我們通過使用管理憑證啓動交互式MySQL會話來驗證當前位置。

mysql -u root -p

出現提示時,提供MySQL根密碼。然後從MySQL提示符下選擇數據目錄:

select @@datadir; +-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)

這個輸出證實MySQL被配置爲使用默認數據目錄,/var/lib/mysql/,所以這是我們需要移動的目錄。確認後,鍵入exit並按下“ENTER”離開監視器:

exit

爲了確保數據的完整性,在實際更改數據目錄之前,我們將關閉MySQL:

sudo systemctl stop mysqld

systemctl 不會顯示所有服務管理命令的結果,因此如果您想確保成功,請使用以下命令:

sudo systemctl status mysqld

如果輸出的最後一行告訴您服務器已停止,則可以確定它已關閉:

mysqld.service - SYSV: MySQL database server. Loaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled) Active: inactive (dead) since 三 2018-01-31 10:49:00 CST; 4s ago Docs: man:systemd-sysv-generator(8) Process: 11689 ExecStop=/etc/rc.d/init.d/mysqld stop (code=exited, status=0/SUCCESS) Process: 11420 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=0/SUCCESS) Main PID: 11650 1月 31 10:38:03 localhost.localdomain systemd[1]: Starting SYSV: MySQL database server.... 1月 31 10:38:04 localhost.localdomain mysqld[11420]: Starting mysqld: [ 確定 ] 1月 31 10:38:04 localhost.localdomain systemd[1]: mysqld.service: Supervising process 11650 which is not our child. We'll most likely not notice when it exits. 1月 31 10:38:04 localhost.localdomain systemd[1]: Started SYSV: MySQL database server.. 1月 31 10:48:58 localhost.localdomain systemd[1]: Stopping SYSV: MySQL database server.... 1月 31 10:49:00 localhost.localdomain mysqld[11689]: Stopping mysqld: [ 確定 ] 1月 31 10:49:00 localhost.localdomain systemd[1]: Stopped SYSV: MySQL database server..

現在服務器已關閉,我們將使用現有的數據庫目錄複製到新的位置rsync。使用該-a標誌保留權限和其他目錄屬性,同時-v提供詳細的輸出,所以你可以按照進度。

注意:確保目錄中沒有結尾斜槓,如果使用了選項卡完成,可能會添加該斜槓。當有斜線時,rsync會將目錄的內容轉儲到掛載點,而不是將其轉移到包含的mysql目錄中:

sudo rsync -av /var/lib/mysql /mnt/volume-nyc1-01

一旦rsync(如果rsync命令未安裝通過命令yum install rsync安裝)完成,用.bak擴展名重命名當前文件夾中保存,直到我們已經證實,此舉是成功的。通過重新命名它,我們將避免可能從新舊位置的文件中產生混淆:

sudo mv /var/lib/mysql /var/lib/mysql.bak

現在我們準備把注意力轉向配置。

第2步 - 指向新的數據位置

MySQL有幾種方法來覆蓋配置值。默認情況下,在文件中datadir設置爲。編輯這個文件以反映新的數據目錄:/var/lib/mysql/etc/my.cnf

sudo vi /etc/my.cnf

找到以[mysqld]塊開始的那一行,datadir=用幾個註釋與塊標題分開。改變後面的路徑來反映新的位置。另外,由於套接字先前位於數據目錄中,因此我們需要將其更新到新的位置:

 /etc/my.cnf中 [mysqld] . . . datadir=/mnt/volume-nyc1-01/mysql socket=/mnt/volume-nyc1-01/mysql/mysql.sock . . .

更新現有的行後,我們需要爲mysql客戶端添加配置。在文件的底部插入以下設置,以便不會在[mysqld]塊中分割指令:

/etc/my.cnf中 [client] port=3306 socket=/mnt/volume-nyc1-01/mysql/mysql.sock

當你完成後,點擊ESCAPE,然後鍵入:wq!保存並退出文件。

第3步 - 重新啓動MySQL

現在我們已經更新了配置以使用新的位置,我們準備啓動MySQL並驗證我們的工作。

sudo systemctl start mysqld sudo systemctl status mysqld

要確保新的數據目錄確實在使用中,請啓動MySQL監視器。

mysql -u root -p

再次查看數據目錄的值:

select @@datadir; +----------------------------+ | @@datadir | +----------------------------+ | /mnt/volume-nyc1-01/mysql/ | +----------------------------+ 1 row in set (0.01 sec)

現在您已經重新啓動了MySQL並確認它正在使用新的位置,請藉此機會確保您的數據庫功能完整。一旦您驗證了任何現有數據的完整性,您可以使用刪除備份數據目錄sudo rm -Rf /var/lib/mysql.bak

總結

在本教程中,我們已經將MySQL的數據目錄移到新的位置,並更新了SELinux以適應調整。儘管我們使用的是塊存儲設備,但是這裏的說明應該適用於重新定義數據目錄的位置,而不考慮底層技術。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章