MYSQL遷移或者升級的故障解決大全

有時候在更換服務器或者升級服務器、遷移服務器時候,必須遷移數據庫時候每每會出現一些意外事情。mysql

大體狀況以下:web

 

1、故障和問題分析sql

1、啓動service mysqld restart 時候卻提示錯誤shell

[root@localhost ~]# service mysqld restart數據庫

Stopping mysqld:                                           [  OK  ]centos

MySQL Daemon failed to start.安全

Starting mysqld:                                           [FAILED]服務器

 

2、啓動失敗的日誌提示經過more /var/lib/mysql/localhost.localdomain.err查看dom

查看錯誤日誌測試

140103  7:03:21  InnoDB: Started; log sequence number 0 0

140103  7:03:21 [ERROR] /usr/libexec/mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 2)

140103  7:03:21 [ERROR] Can't start server: can't create PID file: No such file or directory

140103 07:03:21 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

這裏是報告目錄不存在'/var/run/mysqld/

 

再看錯誤日誌

140103  7:10:19 [ERROR] /usr/libexec/mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 13)

140103  7:10:19 [ERROR] Can't start server: can't create PID file: Permission denied

140103 07:10:19 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

增長了目錄後這裏報告權限不夠

 

還有物理文件找不到的錯誤:

140103 21:53:11 [ERROR] /usr/libexec/mysqld: Can't find file: './mysql/user.frm' (errno: 13)

140103 21:53:11 [ERROR] Fatal error: Can't open and lock privilege tables: Can't find file: './mysql/user.frm' (errno: 13)

140103 21:53:11 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

140103 21:54:20 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

這裏報告數據物理表找不到

 

安全權限的問題

[root@web]# /usr/sbin/mysqld  

060715 21:16:36 [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root! 

060715 21:16:36 [ERROR] Aborting  

060715 21:16:36 [Note] /usr/sbin/mysqld: Shutdown complete

這裏報告安全致使問題

 

[ERROR] Fatal error: Can't open and lock privilege tables: Table 

數據表被鎖或者是私人權限

 

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes

啓動的鏈接文件發生變化,這個通常是由於修改了my.cnf後再次啓動產生的

 

2、環境故障解決

運行目錄不存在和權限不匹配

按照要求創建一個目錄

[root@localhost ~]# mkdir /var/run/mysqld

權限問題,修改權限

[root@localhost ~]# chown -R mysql:mysql /var/run/mysqld

再啓動就正常了

物理數據表找不到,能夠在shell下執行 /usr/sbin/setenforce 0  關閉防禦策略就能夠解決了

安全致使問題:我電腦測試發現若是爲根目錄設置了加鎖後會致使該問題,解決辦法

若是設置了根目錄的鎖定chattr +i  / ,則會出現啓動失敗,故障提示如上,解決辦法是在/etc/my.conf中的mysqld這一節中加入user=mysql

數據表被鎖的解決

#mysql_install_db 

 

鏈接文件發生變化致使沒法啓動的

直接刪除/var/lib/mysql/ 下的文件,包括套接字文件ibdata1 ib_logfile0 ib_logfile1 mysql.sock 以後從新啓動,通常是不會有異常的。

 

3、遷移升級過程致使的一些問題和遷移方法

 

1、第一步,系統上原來的自帶的MYSQL卸載掉,全新yum 安裝,安裝好後service mysqld restart 看是否正常,若是正常則service mysqld stop,準備開始遷移數據庫

 

2、把舊的服務器上的數據庫遷移過來,但mysql系統庫不能覆蓋,全部數據庫目錄都遷移

    chgrp -R mysql /var/lib/mysql/mysql && chown -R mysql /var/lib/mysql/mysql

    chown -R mysql:mysql /var/lib/mysql/

    find /var/lib/mysql/ -type d -exec chmod 700 -R {} \;

    find /var/lib/mysql/ -type f -exec chmod 660 -R {} \;

   

3、複製和權限設置完成後,升級數據庫到64,shell執行

    #mysqld_safe   強制啓動

    #mysql_upgrade --force -u admin -p     升級到64位上,假設管理是admin,命令結束後輸入密碼

    看看升級的狀況,若是有錯誤提示通常是權限沒設置好,回到第2步,從新設置權限

    centos下若是權限沒問題,則必須去掉安全保護的,該工做在個人測試過程確實形成數據庫沒法訪問,shell下執行 /usr/sbin/setenforce 0

    

    從新修復和檢查索引

    myisamchk -r /var/lib/mysql/*/*MYI

 

    有三種修復表的方法以下所示:

    myisamchk --recover --quick /path/to/tblName

    myisamchk --recover /path/to/tblName

    myisamchk --safe-recover /var/lib/mysql/mysql/*

    第一種是最快的,用來修復最普通的問題;而最後一種是最慢的,用來修復一些其它方法所不能修復的問題。

4、修復和升級完成後,中止數據庫service mysqld stop

5、把舊數據庫上的mysql庫的usr表覆蓋掉,換成舊的,以保證用戶賬號的延續性,這時候啓動mysqld通常會提示失敗

6、必須強制啓動執行mysqld_safe,而後登陸進去,用原來的管理賬號登陸就能夠,進去後修復數據表myisamchk --safe-recover /var/lib/mysql/mysql/usr

7、所有完成後直接reboot,從新啓動系統,等系統恢復後就會發現一切都正常了

8、注意配置文件裏:修改my.cnf  查找skip-locking 替換爲skip-external-locking

9、若是設置了根目錄的鎖定chattr +i / ,則會出現啓動失敗,解決辦法是在/etc/my.conf中的mysqld這一節中加入user=mysql

啓動失敗的查看錯誤的日誌

more /var/lib/mysql/localhost.localdomain.err

相關文章
相關標籤/搜索