如何在MySQL转储中删除这些注释?

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服务器将运行此语句.

此魔术注释语法记录在本手册的" 注释语法"部分中.

你可能不想摆脱这些东西.

  • 另一个问题是专门询问MySQL被视为可执行SQL的评论(刚刚发布):http://stackoverflow.com/questions/25614919/where-is-it-documented-that-some-comments-in-a -SQL脚本执行的按mysql的-USI (2认同)

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)

  • @rubo77你也可以使用这个mysql转储参数:`--skip-dump-date` (2认同)

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 删除与版本和东西有关的评论..

  • 不幸的是,这删除了我想要的所有评论,留下了所有我不完整的评论. (4认同)

Cor*_*lou 16

你试过快捷方式了--compact吗?

这里的信息.

  • 我做了,但它禁用了我想要的其他评论,例如` - MySQL dump 10.13 Distrib 5.1.41,for Win32(ia32)`. (2认同)

Ike*_*ker 12

从技术上讲,你试图摆脱的线路不是评论.它们在开始时临时修改一些变量,然后在结束时将它们重置为先前的值.

在你的情况下,它们不是很有用(但它们也是无害的),因为你正在使用--no-data,但我认为值得一提的是这些行确实有用,而不仅仅是注释.