2013-12-18 61 views
1

我試圖轉儲我的數據庫的副本,以確保我有適當的權限這樣做,並確保備份策略將繼續前進。我遇到的問題是我無法創建轉儲文件。每次我試圖這樣做,它只是返回到我下面的:MySQLDump沒有導出數據或結構

-- MySQL dump 10.13 Distrib 5.5.32, for Linux (i686) 
-- 
-- Host: localhost Database: dbname 
-- ------------------------------------------------------ 
-- Server version  5.5.32 

/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */; 
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; 
/*!40101 SET @[email protected]@COLLATION_CONNECTION */; 
/*!40101 SET NAMES utf8 */; 
/*!40103 SET @[email protected]@TIME_ZONE */; 
/*!40103 SET TIME_ZONE='+00:00' */; 
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */; 
/*!40103 SET [email protected]_TIME_ZONE */; 

/*!40101 SET [email protected]_SQL_MODE */; 
/*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */; 
/*!40014 SET [email protected]_UNIQUE_CHECKS */; 
/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */; 
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */; 
/*!40101 SET [email protected]_COLLATION_CONNECTION */; 
/*!40111 SET [email protected]_SQL_NOTES */; 

-- Dump completed on 2013-12-18 10:34:02 

我運行的命令是:

mysqldump -uroot -p --flush-logs --single-transaction --master-data=2 --delete-master-logs --databases dbname > ./Back_Up_Test`date +%Y_%m_%d`.sql.bak 

我試圖在2> Error.err在結尾處加上的命令來檢查存在的錯誤,但它似乎沒有爲我生成任何錯誤,因爲該文件的大小爲0.因此,我正在試圖運行此目錄的用戶是root,並擁有一切權利。

+----------------------------------------------------------------------------------------------------------------------------------------+ 
| Grants for [email protected]                            | 
+----------------------------------------------------------------------------------------------------------------------------------------+ 
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD *password* WITH GRANT OPTION | 
| GRANT ALL PRIVILEGES ON `dbname`.* TO 'root'@'localhost' WITH GRANT OPTION                | 
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION                   | 
+----------------------------------------------------------------------------------------------------------------------------------------+ 

什麼東西有我困惑的是,命令開發工作完全正常的事實,但在這個測試環境中,備份只是拒絕無論出於何種原因被創建。該文件夾應該具有適當的權限,因爲該文件最終以具有正確名稱的目錄存在,它只是沒有結構或數據。

更新: 我現在 - 全數據庫作爲一個選項,試了一下,它返回完全相同的文件大小和內容,因爲它沒有以前。我不確定原因是什麼。

回答

0

經過幾個小時的測試,我終於找到了答案。當我最初開始這個時,MySQL服務器在過去的某個時間被更新,因此要求我必須運行/usr/bin/mysql_upgrade -u root -p以獲得適當的權限回到root用戶。這樣做後,它允許我爲其他用戶添加權限。在此之後,我做了習慣/義務FLUSH PRIVILEGES

實際的解決方案如下:

試圖傾倒各種不同的數據庫後,立刻所有的數據庫,等等,我只是變得沮喪,並重新啓動服務本身。在這樣做的時候,我試圖完全按照之前的命令執行命令。在這一點上,mysqldump確實確實創建了必要的文件,並具有必要的結構。我不確定爲什麼我需要重新啓動服務 - 很可能mysql_upgrade在執行後需要它。但是,你應該發現自己在一個類似的位置,我會建議你通過以下步驟來運行:

1. My first suggestion would simply be to check your privileges on the account that you are attempting to create the dump from, and verify that it has the necessary privileges. 
2. If the Privileges match up with what is expected/necessary, then flush the privileges to make sure they have taken. 
3. If you are still unable to create an mysql dump at this point, then restart the service. 

,而不是刪除這個問題,因爲該解決方案是如此簡單,我要離開這個只是因爲這個問題似乎經常被問到,特別是在PHP腳本/自動化方面,而我發現的問題並不常見。

希望這可以幫助其他任何有此問題的人。