因爲業務增長太快,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目錄,需要修改:
- 移動data目錄到新data2目錄
- 移動log目錄到新的log2目錄
- 在log2目錄找到bin-log.index文件,把裏面的log目錄改爲logs2目錄
- 修改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
幾點注意:
- 折騰前先備份
- 注意文件目錄的屬主關係