AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 41645
Accepted
Jeremy Wadhams
Jeremy Wadhams
Asked: 2013-05-07 16:54:52 +0800 CST2013-05-07 16:54:52 +0800 CST 2013-05-07 16:54:52 +0800 CST

mysqlslap 在包含“;”的字符串上阻塞 分隔符?

  • 772

我在将包含 SQL 语句的预先存在的文件传递到 mysqlslap 时遇到问题。

例如,我有一个名为的文件create.sql,其中包含我的表结构(由 转储mysqldump),正常;划界。

我还有一个名为slap.sql(实际上是一个稍微修改过的general-log-file,但这是一个重现错误的小例子)的文件,其中包含

INSERT INTO comments VALUES ("I like winks ;) and frowns :(");

我跑:

mysqlslap --delimiter=";" --create create.sql --query thing.sql

我得到错误:

mysqlslap: Cannot run query INSERT INTO comments VALUES ("I like winks  
ERROR : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"I like winks' at line 1

这与 MySQL 在 ; 处终止语句是一致的。那是在一个字符串的中间。

我该怎么做才能让 mysqlslap--create从 mysqldump 中获取数据,而不是对嵌入在--query数据中的字符串中的分号产生影响?当您将文件传递给 --query 参数时,mysqlslap 是否可能不遵循正常的解析规则?

mysql mysqlslap
  • 2 2 个回答
  • 1645 Views

2 个回答

  • Voted
  1. Michael - sqlbot
    2013-05-08T12:18:46+08:002013-05-08T12:18:46+08:00

    简要看一下源代码,看起来 mysqlslap 没有对分隔符进行任何复杂的解析......它只是分割字符串。

    如果您将每个查询写在一行上,则不必终止它们——默认语句分隔符是换行符。

    const char *delimiter= "\n";
    

    每行一个查询,它拆分行并执行每个语句。

    在;每个查询结束时实际上并不需要分隔符来使--query文件有效,并且服务器在执行您提供的删除分号的示例查询时没有问题。

    您可以修改输出文件 frommysqldump以使用不同的分隔符,例如$$使用sedor perl,然后在查询文件中也使用该分隔符。

    mysqldump [args] | perl -pe 's/;$/\n\$\$\n/g' > create.sql
    

    编辑:哎呀,是的,这真的很原始......甚至不支持多字符字节分隔符。

    if (user_supplied_query)
        actual_queries= parse_delimiter(tmp_string, &query_statements, delimiter[0]);
    
    • 3
  2. Best Answer
    Jeremy Wadhams
    2013-05-10T18:40:47+08:002013-05-10T18:40:47+08:00

    放弃。因为(正如迈克尔指出的那样)mysqlslap 使用的是简单的字符串查找而不是分隔符的解析器,如果您选择的分隔符在您的 --query 或 --create 数据集中的任何位置,那么您将被淹没。

    相反,打开 mysqldump 文件,将任何多行语句合并为一行,让 mysqlslap 继续期望每行一个语句。

    如果您使用 Vim,这很容易,只需搜索已知的多行模式(在我这里它只是 CREATE TABLE,我猜它可能包括存储过程或触发器),然后用于J连接每个语句中的所有行。

    • 1

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    授予用户对所有表的访问权限

    • 5 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve