eth*_*ros 76 mysql export mysqldump
我正在尝试创建一个简单的结构,只转储我的数据库.使用mysqldump给我一个结果,如:
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
DROP TABLE IF EXISTS `foo`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
Run Code Online (Sandbox Code Playgroud)
无论我尝试什么,我似乎都无法摆脱那些评论.
我目前正在使用: mysqldump -p -d --add-drop-table --skip-tz-utc --skip-set-charset -h 127.0.0.1 -u foo bar --result-file=dumpfile.sql
编辑:但我希望保留其他评论,例如-- MySQL dump 10.13 Distrib 5.1.41, for Win32 (ia32)
O. *_*nes 151
哇!这些并不是真正的评论,即使它们看起来那样.它们是条件执行令牌.
走这条线:
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
Run Code Online (Sandbox Code Playgroud)
如果mySQL的版本是4.00.14 或更高版本,则MySQL服务器将运行此语句.
此魔术注释语法记录在本手册的" 注释语法"部分中.
你可能不想摆脱这些东西.
Tom*_*gan 36
我知道这是一个古老的问题,但至少这是一个答案.我也找不到mysqldump中的标志来删除条件注释,或者确实是为这些注释设置最小mysql版本的更好选项.如果你只想把它们全部核对,你可以使用grep或sed(sed留空行,grep没有):
mysqldump ... | grep -v '^\/\*![0-9]\{5\}.*\/;$'
mysqldump ... | sed -e 's/^\/\*![0-9]\{5\}.*\/;$//g'
Run Code Online (Sandbox Code Playgroud)
要回答我自己希望有条件地删除依赖于mysql版本的注释,请使用其中一个(删除任何注释<mysql5):
mysqldump ... | grep -v '^\/\*![0-4][0-9]\{4\}.*\/;$'
mysqldump ... | sed -e 's/^\/\*![0-4][0-9]\{4\}.*\/;$//g'
Run Code Online (Sandbox Code Playgroud)
Mah*_*aga 30
试试--skip-comments?
谢谢
编辑:
我明白了..试试吧
--skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset
Run Code Online (Sandbox Code Playgroud)
玩游戏去除一些选项,直到你得到所需的结果,基本上这与--compact没有相同--skip-comments
--skip-comments 删除与版本和东西有关的评论..
Ike*_*ker 12
从技术上讲,你试图摆脱的线路不是评论.它们在开始时临时修改一些变量,然后在结束时将它们重置为先前的值.
在你的情况下,它们不是很有用(但它们也是无害的),因为你正在使用--no-data,但我认为值得一提的是这些行确实有用,而不仅仅是注释.