怎么把網(wǎng)站整站下載長(zhǎng)沙網(wǎng)站seo排名
文章目錄
- 0 背景
- 1 備份現(xiàn)有數(shù)據(jù)庫(kù)數(shù)據(jù)
- 2 停止 MySQL 服務(wù)
- 3 復(fù)制現(xiàn)有的 MySQL 數(shù)據(jù)到新目錄
- 4 修改 MySQL 配置文件
- 5 更新 AppArmor 或 SELinux 配置(如有啟用)
- 6. 修改 MySQL 系統(tǒng)文件中的 datadir
- 7. 啟動(dòng) MySQL 服務(wù)
- 8. 驗(yàn)證更改
- 參考資料
0 背景
在原先劃分ubuntu磁盤分區(qū)的時(shí)候,給/
分區(qū)劃分的空間很少,但是其他的分區(qū)還有很多的空間。
故想把 mysql 數(shù)據(jù)庫(kù)的數(shù)據(jù)遷移到另外的磁盤分區(qū)中。
1 備份現(xiàn)有數(shù)據(jù)庫(kù)數(shù)據(jù)
更改 datadir 前,建議備份現(xiàn)有的 MySQL 數(shù)據(jù),以防數(shù)據(jù)丟失。使用以下命令導(dǎo)出所有數(shù)據(jù)庫(kù):
mysqldump --all-databases > all-databases-backup.sql
2 停止 MySQL 服務(wù)
- 查看 mysql 當(dāng)前狀態(tài)
service mysql status
或者systemctl status mysql
stop mysql
sudo systemctl stop mysql
再次查看 mysql 的狀態(tài)
3 復(fù)制現(xiàn)有的 MySQL 數(shù)據(jù)到新目錄
復(fù)制當(dāng)前的 MySQL 數(shù)據(jù)目錄內(nèi)容到新位置:
在 mysql 的命令中,運(yùn)行下述指令,即可查看到數(shù)據(jù)文件的地址。
show global variables like "%datadir%";
我電腦的原始的 mysql 數(shù)據(jù)文件保存路徑為:/var/lib/mysql/
數(shù)據(jù)遷移:
sudo cp -R /var/lib/mysql /home/soft/mysql_datadir/
sudo chown -R mysql:mysql /home/soft/mysql_datadir/mysql
sudo chmod 755 /home/soft/mysql_datadir/mysql
【注意】:
我最初選擇放在我的家目錄下,程序一直報(bào)錯(cuò),沒有權(quán)限訪問該文件夾。
原來路徑:/home/jie/soft/mysql_data/mysql
報(bào)錯(cuò)
新路徑是 :/home/soft/mysql_data/mysql
正常使用
mysql 的數(shù)據(jù)存儲(chǔ),放在某個(gè)用戶的家目錄下,確實(shí)也不合適。因?yàn)榭赡軙?huì)導(dǎo)致其他用戶沒有權(quán)限訪問。
4 修改 MySQL 配置文件
我的電腦的 mysql 系統(tǒng)目錄是: /etc/mysql/
,找到 MySQL 的配置文件并更新 datadir:
根據(jù)自己的 mysql 選擇下述兩個(gè)文件的其中一個(gè)文件進(jìn)行編輯:
sudo vim /etc/mysql/my.cnf
或者, (我用的是這個(gè))
在修改前,可先備份。
針對(duì)配置文件進(jìn)行修改:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到 datadir 這一行并更改為新的目錄,更新 socket 位置為新的 socket:
#
# The MySQL database server configuration file.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html# Here is entries for some specific programs
# The following values assume you have at least 32M ram[mysqld]
#
# * Basic Settings
#
user = mysql
# pid-file = /var/run/mysqld/mysqld.pid
# socket = /var/run/mysqld/mysqld.sock
#socket = /var/lib/mysql/mysql.sock
socket = /home/soft/mysql_data/mysql/mysql.sock#port = 3306
datadir = /home/soft/mysql_data/mysql
5 更新 AppArmor 或 SELinux 配置(如有啟用)
我只更新了 AppArmor 沒有更新 SELinux
如果你的系統(tǒng)啟用了 AppArmor 或 SELinux,可能需要更新其配置以允許 MySQL 訪問新的 datadir。
AppArmor: 編輯 AppArmor 配置文件
sudo vim /etc/apparmor.d/usr.sbin.mysqld
添加新的 datadir 路徑:
/home/soft/mysql_datadir/mysql/ r,
/home/soft/mysql_datadir/mysql/** rwk,
usr.sbin.mysqld
文件內(nèi)容:
# Allow data dir access/var/lib/mysql/ r,/var/lib/mysql/** rwk,/home/soft/mysql_data/mysql/ r,/home/soft/mysql_data/mysql/** rwk,
保存后,重新加載 AppArmor 配置:
sudo systemctl restart apparmor
SELinux:如果使用 SELinux,你需要更新文件的安全上下文(我沒有用到這個(gè)):
sudo semanage fcontext -a -t mysqld_db_t "/home/jie/soft/mysql_datadir(/.*)?"
sudo restorecon -Rv /home/jie/soft/mysql_datadir
6. 修改 MySQL 系統(tǒng)文件中的 datadir
編輯 MySQL 系統(tǒng)文件 /lib/systemd/system/mysql.service:
sudo vim /lib/systemd/system/mysql.service
找到以下部分:
ExecStartPre=/usr/share/mysql/mysql-systemd-start pre
在這一行的下方添加:
ExecStartPre=/bin/mkdir -p /home/jie/soft/mysql_datadir/mysql
ExecStartPre=/bin/chown -R mysql:mysql /home/jie/soft/mysql_datadir/mysql
效果如下圖所示:
保存后,刷新 systemd 配置:
sudo systemctl daemon-reload
7. 啟動(dòng) MySQL 服務(wù)
重新啟動(dòng) MySQL 服務(wù):
sudo systemctl start mysql
然后檢查 MySQL 狀態(tài):
sudo systemctl status mysql
8. 驗(yàn)證更改
驗(yàn)證 MySQL 是否使用了新的 datadir:
mysql -u root -p -e "SHOW VARIABLES LIKE 'datadir';"
或者
mysql -h 127.0.0.1 -P 3306 -u root -p -e "SHOW VARIABLES LIKE 'datadir';"
如下圖所示,返回新的 datadir 路徑 /home/soft/mysql_datadir/mysql
。
如果一切正常,MySQL 將會(huì)在新的 datadir 下運(yùn)行。如果遇到任何問題,可以通過日志文件 /home/soft/mysql_datadir/mysql/error.log 檢查更多細(xì)節(jié)。
參考資料
- MySQL更換數(shù)據(jù)存儲(chǔ)路徑的方法
- chatgpt 4o