我真的擺脫不了mysqldump中的這些條件語句?
我的 mysqldump DDL 文件充滿了很多:
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `my_trigger`...
我一直在尋找無濟於事的選項來保持沉默。
我的理解是,這種輸出是必要的,這樣腳本才能在可能是另一個版本的 mysql 伺服器中成功地重新創建模式。對於我的安裝系統封閉的場景,我知道版本將與轉儲源相同。
同樣,我需要能夠在轉儲中進行編輯(手動或腳本),而這些輸出使任務變得更加艱鉅。
在 SO 的其他地方,我看到了一些關於此的問題,但人們一直專注於宣傳為什麼應該不理會代幣。Kinder 的人建議在命令行上解析輸出以過濾掉它們。請注意,當我使用 phpMyAdmin 轉儲時,這些令牌不存在。
是的!
那麼,真的沒有更好的選擇來跳過這種輸出嗎?我在 Windows 和 PowerShell 上工作。
保留條件執行註釋非常重要。但是,如果您絕對知道將載入轉儲的 MySQL 版本大於或等於創建它的版本,則可以使用以下命令刪除“註釋”部分:
sed -r s'#/\*![0-9]{5} ?([^*]*)\*/#\1#'g
它將轉換行,例如
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
到
SET SQL_MODE=@OLD_SQL_MODE ;
因為這一行必須在任何 MySQL >= 4.1.1 上執行
請注意,這不會刪除多行條件執行註釋,例如在轉儲觸發器時。
由於無法預測未來,因此最好儲存帶有註釋的轉儲,並且僅在您想要將其視覺化時將其刪除。
mysqldump ... > dump.sql cat dump.sql | sed -E s'#/\*![0-9]{5} ?([^*]*)\*/#\1#'g > dump.no-comments.sql
你不想讓它沉默。這些選項是為了保護您(或至少保護經驗不足的 MySQL 使用者)。
您可以嘗試使用的唯一選項是–compatible
生成與其他數據庫系統或舊 MySQL 伺服器更兼容的輸出。name 的值可以是 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_table_options 或 no_field_options。要使用多個值,請用逗號分隔它們。這些值與設置伺服器 SQL 模式的相應選項具有相同的含義。請參閱第 5.1.8 節,“伺服器 SQL 模式”。
此選項不保證與其他伺服器的兼容性。它僅啟用目前可用於使轉儲輸出更兼容的那些 SQL 模式值。例如,–compatible=oracle 不會將數據類型映射到 Oracle 類型或使用 Oracle 註釋語法。
嘗試做
mysqldump --compatible=mysql40,no_field_options,no_key_options --no-data --skip-routines
只是為了試驗,看看以 MySQL 為中心的註釋元命令是否消失。