歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux更改mysql數據庫目錄辛酸歷程

Linux更改mysql數據庫目錄辛酸歷程

日期:2017/3/1 12:19:32   编辑:關於Linux

關於Linux更改mysql數據庫目錄辛酸歷程,其實我想交代更多的內容,只是限於文章的實用性,我決定去繁就簡。

今天早上,客戶告訴我期貨交易平台登陸不上去,這肯定是項目出了bug。

一、show processlist

show processlist;

這裡寫圖片描述

發現部分sql等待表級鎖(且這麼叫吧,懶得找翻譯軟件了),我首先想到的是“某幾張表是myisam引擎,容易發生表級鎖,之前就有類似的問題發生,先kill掉sql進程,然後將表引擎由myisam改為innodb。”

當然了,我按照這個想法准備要執行表引擎的更換了,但出現了突發狀況。

二、got error 28 from storage engine

如題所示,當我准備打開表查看數據的時候,出現了“got error 28 from storage engine”錯誤消息提示,我的翻譯是“存儲引擎出現了28錯誤”。

當然我百度了,找到這樣一篇mysql的“Got error 28 from storage engine”錯誤,說實話,這篇文章沒有給我什麼鳥的幫助,但現在回想起來,確實是我自己大意了,雖然說清空“/tmp”目錄的做法不值得推薦,但至少應該去清空一些磁盤,把數據庫備份一下

當然了,我想到去備份數據,使用了“mysqldump”命令嘗試了一次數據備份,但是遺憾的是,報了一個錯誤,提示我無法保存。這是顯而易見的,因為磁盤本身就不足了,沒有清空磁盤,搞毛線的備份。但這是事後諸葛亮的想法,當時的我顯然沒有針對性的對數據進行備份!再次奉勸各位,數據庫出問題時,即使有自動化的數據備份,但盡量在修正問題之前再做一次實時的備份!

三、df -h

沒有備份成功,我就轉向了另外一個方向,查看數據磁盤空間。

[root@iZ23gsv94suZ run]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       20G  19G   16M  100% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/xvdb1       99G  255M   99G  1% /mnt

看到use等於“100%”,我已經確定問題出在哪裡了,但是我在這裡繼續犯了一個錯誤。

“莫非是阿裡雲的磁盤沒有掛載成功,就是/dev/xvdb1對應的這個100G磁盤沒有掛載成功,否則怎麼把20G的這個盤給沾滿了呢?”

後知後覺的我現在恍然大悟,對於windows操作系統,C盤滿了,怎麼也不會把數據移動到D盤來,然而當時我怎麼都在懷疑阿裡雲的磁盤沒有掛載成功!這就是一個天大的錯誤!

四、阿裡雲磁盤掛載

由於上面這一步認為阿裡雲磁盤沒有掛載成功,所以當時糊塗的我一心要重新掛載磁盤,於是我又在Linux 系統掛載數據盤這個泥潭裡深陷不已,久久不能自拔,由於硬盤確實已經掛在成功,所以我再怎麼費盡心思也只能得到“磁盤已掛載成功”的答案。但是,這裡還是不得不說,一個人的精力實在有限,我幾乎已經是一個全棧工程師,自己對自己在意的標簽是“打雜工,偏java”,這就讓我不得不感慨萬千。

由於是個創業團隊,我又是一個負責人,所以我要做的工作有:

java編程 web編程 Linux編程(shell腳本、項目部署) C#客戶端協調(調查bug、業務探討、相關代碼審核) 安卓編程(目前處於學習階段) 項目管理(麻雀雖小肝膽俱全,我必須要讓每個人開心快樂的工作,效率最大化) 財務、行政(發發工資、請大家聚餐活動、游玩、工作環境布置、澆花、打掃衛生) 需求分析(客戶溝通、需求調查、業務建模) 個人能力提升(編程能力、為人處事能力)

等等等等,只要能想得到的,沒有不做的,實在是無法集中重心專業負責哪一塊,就導致哪一塊都不精通,這也是導致本次問題出現一個關鍵因素。

所以,如果朋友們有好的解決方案,請不吝賜教,我希望通過互聯網認識更多朋友,在未來的創業道路上一路前行,互惠互利

五、mysql數據庫目錄更改

既然阿裡雲的磁盤已經掛在,那麼接下來的工作就是把mysql的默認數據目錄遷移到100G的盤上,而不是系統盤!

這個過程現在說起來很簡單,但是在執行的過程中,卻是千辛萬苦!

linux 更改mysql的數據庫目錄,這篇文章提供了相應的辦法,按理說,按照裡面提到的方法執行下去就OK,但這裡,我不得不強調,項目千差萬別,每個人解決問題的辦法也不盡相同,所以,動數據庫之前,千萬要先備份!

顯然,我按照這篇文章所說,是沒有把目錄遷移成功,所以你也需要這樣,請千萬注意!

①、mv

Linux的mv命令很強大,但風險系數也很高!
強烈建議使用cp命令,而非mv命令,除非你一萬個確定方案可行。

②、chown -R mysql:mysql /home/data/mysql/

chown -R mysql:mysql /home/data/mysql/  # 改變數據庫的歸屬為mysql

這個語句慎用,反正坑哭了我!

③、 /mnt

前面曾提到
/dev/xvdb1 99G 255M 99G 1% /mnt
不知道,你是否注意,對於我一個Linux的雛鳥來說,顯然沒有意識到這個100G的磁盤,其路徑是“/mnt”,也就是說,mysql的數據目錄需要重置到該“/mnt”目錄下

④、目錄遷移

1、cp -afpr /var/lib/mysql/ /mnt/

使用cp命令,將mysql的數據默認目錄,移動到新的掛載盤/mnt下面

[root@iZ23gsv94suZ mysql]# pwd
/mnt/mysql
[root@iZ23gsv94suZ mysql]# ls
auto.cnf  ib_logfile0  ibtmp1            iZ23gsv94suZ.pid  mysql-bin.000001  mysql.sock          RPM_UPGRADE_HISTORY      
ibdata1   ib_logfile1  iZ23gsv94suZ.err  mysql             mysql-bin.index   performance_schema  RPM_UPGRADE_MARKER-LAST
2、vim /etc/my.cnf
    [mysql]
    default-character-set=utf8
    socket          = /mnt/mysql/mysql.sock
    #
    [mysqld]
    # The TCP/IP Port the MySQL Server will listen on
    port=3306
    socket          = /mnt/mysql/mysql.sock

把mysql配置文件的socket目錄更改到/mnt下對應的路徑

3、vim /etc/init.d/mysql
  then
   # datadir=/var/lib/mysql
datadir=/mnt/mysql

將該文件中的datadir修改為對應的/mnt目錄

4、ln -s /mnt/mysql/mysql.sock /var/lib/mysql/mysql.sock

使用ln命令,指定一條鏈接給mysql.sock,具體的作用,我不知,你可百度。

按照以上四步,就可以轉移mysql的數據庫目錄了,但是,我的過程遠比這個艱辛。

搞來搞去,我的mysql是搞崩潰了,沒有辦法,需要重新安裝。這裡,你可以參照centOS下安裝mysql5.7、升級mysql到5.7。然後,數據恢復你可以使用source命令,如果涉及到二進制日志恢復,你可以參照mysql之備份和導入數據(包括二進制日志)

但最重要的是,操作數據庫之前,想盡一切辦法先備份數據庫


Copyright © Linux教程網 All Rights Reserved