Mysql手動遷移數據和日誌目錄的實驗

因爲業務增長太快,mysql服務器遇到目錄空間不足問題,這裏測試下手動修改data和log目錄能不能成功
實驗證明可以移動成功,跳到最後看結論

目的

測試手動把mysql的data目錄和log目錄mv到其他路徑能不能成功
mysql配置現狀:

port=7006
socket=/data/mysql7006/mysql.sock
pid-file=/data/mysql7006/mysql.pid
basedir=/apps/mysql
datadir=/data/mysql7006/data
log-error=/logs/mysql7006/error-log
log-bin=/logs/mysql7006/bin-log

準備data和log修改到新目錄:

socket=/data2/mysql7006/mysql.sock
pid-file=/data2/mysql7006/mysql.pid
datadir=/data2/mysql7006/data
log-error=/logs2/mysql7006/error-log
log-bin=/logs2/mysql7006/bin-log

步驟

# 停止mysql
/apps/mysql/bin/mysqladmin -uroot --port=7006 --socket=/data/mysql7006/mysql.sock -p shutdown
# 新建目錄
mkdir /data2
mkdir /logs2
# mv原mysql目錄
mv /data/mysql7006/ /data2
mv /logs/mysql7006/ /logs2
# 修改配置文件my.cnf爲(修改前先備份):
socket=/data2/mysql7006/mysql.sock
pid-file=/data2/mysql7006/mysql.pid
datadir=/data2/mysql7006/data
log-error=/logs2/mysql7006/error-log
log-bin=/logs2/mysql7006/bin-log

啓動mysql

/apps/mysql/bin/mysqld_safe --defaults-file=/apps/mysql/my.cnf &

失敗了,日誌:

/apps/mysql/bin/mysqld: File '/logs/mysql7006/bin-log.000025' not found (Errcode: 2 - No such file or directory)
2018-11-03 07:16:13 8163 [ERROR] Failed to open log (file '/logs/mysql7006/bin-log.000025', errno 2)
2018-11-03 07:16:13 8163 [ERROR] Could not open log file
2018-11-03 07:16:13 8163 [ERROR] Can't init tc log
2018-11-03 07:16:13 8163 [ERROR] Aborting

2018-11-03 07:16:13 8163 [Note] Binlog end

奇怪,我明明把logs目錄換成了logs2,爲什麼還去找logs下面的日誌呢?
哦想起來日誌目錄下的bin-log.index文件,它記錄了有效的binglog日誌,打開如下:

/logs/mysql7006/bin-log.000013
/logs/mysql7006/bin-log.000014
/logs/mysql7006/bin-log.000015
/logs/mysql7006/bin-log.000016
/logs/mysql7006/bin-log.000017
/logs/mysql7006/bin-log.000018
/logs/mysql7006/bin-log.000019
/logs/mysql7006/bin-log.000020
/logs/mysql7006/bin-log.000021
/logs/mysql7006/bin-log.000022
/logs/mysql7006/bin-log.000023
/logs/mysql7006/bin-log.000024
/logs/mysql7006/bin-log.000025

我們把他改成:

/logs2/mysql7006/bin-log.000013
/logs2/mysql7006/bin-log.000014
/logs2/mysql7006/bin-log.000015
/logs2/mysql7006/bin-log.000016
/logs2/mysql7006/bin-log.000017
/logs2/mysql7006/bin-log.000018
/logs2/mysql7006/bin-log.000019
/logs2/mysql7006/bin-log.000020
/logs2/mysql7006/bin-log.000021
/logs2/mysql7006/bin-log.000022
/logs2/mysql7006/bin-log.000023
/logs2/mysql7006/bin-log.000024
/logs2/mysql7006/bin-log.000025

重新啓動mysql:/apps/mysql/bin/mysqld_safe --defaults-file=/apps/mysql/my.cnf &
登錄:

/apps/mysql/bin/mysql -u root --port=7006 --socket=/data2/mysql7006/mysql.sock -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.41-log MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

結論

mysql直接手動移動data和log目錄能不能成功?
yes可以的!
如果修改data和log目錄,需要修改:

  1. 移動data目錄到新data2目錄
  2. 移動log目錄到新的log2目錄
  3. 在log2目錄找到bin-log.index文件,把裏面的log目錄改爲logs2目錄
  4. 修改my.cnf文件,對應配置改爲新的data2目錄、log2目錄:
socket=/data2/mysql7006/mysql.sock
pid-file=/data2/mysql7006/mysql.pid
datadir=/data2/mysql7006/data
log-error=/logs2/mysql7006/error-log
log-bin=/logs2/mysql7006/bin-log

幾點注意:

  • 折騰前先備份
  • 注意文件目錄的屬主關係
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章