天天看點

阿裡雲備份快照後MySQL啟動不了解決辦法

/etc/init.d/mysqld start
Starting MySQL./usr/local/mysql/bin/mysqld_safe: line 586: /var/lib/mysql/mysqld_safe.pid: No such file or directory
awk: (FILENAME=- FNR=1) warning: error writing standard output (Broken pipe)
2019-01-27T04:16:23.831557Z mysqld_safe error: log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Create writable for user 'mysql'.
The server quit without updating PID file (/var/lib/mysql/i[FAILED]zg7ppyt15vrbkz.pid).
           

    阿裡雲伺服器,備份了個快照,備份的時候網站是能用的,然後復原到這個快照,啟動MySQL,報了上面的錯,找了網上很多資料都沒解決,最後阿裡雲的工程師解釋說,我備份快照的時候就有問題,系統表有問題,mysql.user表不存在,導緻資料庫無法初始化 。

2019-01-27T10:17:34.838342Z 0 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
2019-01-27T10:17:34.838856Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-01-27T10:17:34.838945Z 0 [Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key
2019-01-27T10:17:34.838956Z 0 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
2019-01-27T10:17:34.838984Z 0 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
2019-01-27T10:17:34.839021Z 0 [Note] Server socket created on IP: '0.0.0.0'.
2019-01-27T10:17:34.839302Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
2019-01-27T10:17:34.839476Z 0 [Note] InnoDB: Buffer pool(s) load completed at 190127 18:17:34
2019-01-27T10:17:34.841275Z 0 [Warning] Failed to open optimizer cost constant tables

2019-01-27T10:17:34.843929Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
2019-01-27T10:17:34.843989Z 0 [ERROR] Aborting
           

解決辦法:暴力的重新安裝MySQL,在重新安裝之前,記得把資料備份好。

編譯安裝MySQL

  1. 依次執行以下指令檢查系統中是否存在使用rpm安裝的MySQL或者MariaDB。
    rpm -qa | grep mysql
    rpm -qa | grep mariadb
               
    如果已經安裝,則運作以下任一個指令删除。
    rpm -e 軟體名    #注意:這裡的軟體名必須包含軟體的版本資訊,如rpm -e mariadb-libs-5.5.52-1.el7.x86_64。一般使用此指令即可解除安裝成功。
    rpm -e --nodeps 軟體名   #解除安裝不成功時使用此指令強制解除安裝
               
    解除安裝後,再用

    rpm -qa|grep mariadb

    或者

    rpm -qa|grep mysql

    檢視結果。
  2. 依次運作以下指令安裝 MySQL,之前有安裝過直接覆寫就行,一路回車。
    yum install -y libaio-*                         #安裝依賴
    mkdir -p /usr/local/mysql
    cd /usr/local/src
    wget http://zy-res.oss-cn-hangzhou.aliyuncs.com/mysql/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz 
    tar -xzvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
    mv mysql-5.7.17-linux-glibc2.5-x86_64/* /usr/local/mysql/
               
  3. 依次運作以下指令建立mysql組和使用者,并将mysql使用者添加到mysql組。之前添加過可能存在,直接回車。
    groupadd mysql
    useradd -g mysql -s /sbin/nologin mysql
               
  4. 運作指令初始化MySQL資料庫。
    /usr/local/mysql/bin/mysqld --initialize-insecure --datadir=/usr/local/mysql/data/ --user=mysql
               
  5. 更改MySQL安裝目錄的屬性:

    chown -R mysql:mysql /usr/local/mysql

  6. 依次運作以下指令設定開機自啟動。
    cd /usr/local/mysql/support-files/
    cp mysql.server  /etc/init.d/mysqld
    chmod +x /etc/init.d/mysqld             # 添加執行權限
    vim /etc/rc.d/rc.local
               
    在 rc.local 檔案中添加

    /etc/init.d/mysqld start

    。之前添加過就直接退出即可。
  7. 設定環境變量。
    1. 運作

      vi /root/.bash_profile

      打開檔案,按

      i

      進入編輯模式。
    2. PATH=$PATH:$HOME/bin:/usr/local/apache/bin

      修改為

      PATH=$PATH:$HOME/bin:/usr/local/apache/bin:/usr/local/mysql/bin:/usr/local/mysql/bin

      。之前如果修改過就直接退出。

      說明: 此處是在編譯安裝 Apache的環境變量的基礎上再進行修改。

    3. Esc

      鍵退出編輯模式,輸入

      :wq

      儲存并關閉檔案。
    4. 運作

      source /root/.bash_profile

      重新執行檔案。
  8. 啟動 MySQL 資料庫。
    /etc/init.d/mysqld start
               
    出現如下截圖所示資訊,表示MySQL啟動成功。
    阿裡雲備份快照後MySQL啟動不了解決辦法
  9. 修改MySQL的root使用者密碼:初始化後MySQL為空密碼可直接登入,為了保證安全性需要修改MySQL的root使用者密碼。運作以下指令,并按界面提示設定密碼。
    mysqladmin -u root password
               

    提示以下資訊:

```
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
```
           
  1. 關閉資料庫并執行
service mysqld stop
mysqld_safe --skip-grant-tables &
           
  1. 再次測試登入MySQL資料庫。
    mysql -uroot -p #-p和密碼之間無空格
               
    阿裡雲備份快照後MySQL啟動不了解決辦法
  2. 輸入

    show databases;

    檢視資料庫資訊,沒有問題運作

    \q

    退出MySQL。
  3. 輸入

    /usr/local/apache/bin/apachectl restart

    重新開機伺服器,若提示

    httpd not running, trying to start

    ,在輸入一次

    /usr/local/apache/bin/apachectl restart

    ,沒有問題後,基于MySQL的服務就成功了,輸入自己伺服器的IP進行測試一下。

繼續閱讀