Bash - mysql简单选择不起作用,返回null

时间:2014-10-08 08:31:30

标签: mysql sql bash

我写了一个简单的bash脚本,我需要从数据库中获取' fake'数据,只想使用REPEAT命令模拟流量。我写了这一行:

mysql -u root -p'password' -h x.x.x.x -D mysql -se "SELECT REPEAT('A', 26214400);"

密码和登录都很好。我尝试连接到远程sql server(它的sucessfull),但不能真正执行REPEAT选择。什么可能是错的,如何解决这个问题?

我得到的输出:

REPEAT('A', 26214400)
NULL

我在PostgreSQL中做了同样的事情:

"$(psql -h x.x.x.x -d test -U postgres -c $'SELECT REPEAT(\'A\', 26214400);')"

效果很好,但我也需要mysql解决方案。

2 个答案:

答案 0 :(得分:4)

我尝试了对MySQL的查询并收到此错误消息:

  

repeat()的结果大于max_allowed_pa​​cket(1048576) - 截断

所以你必须change max_allowed_packet或使用较小的重复计数:

SELECT REPEAT('A', 1048576);

修改

如果您需要增加max_allowed_packet值,则必须在服务器和客户端进行:

  • 更改服务器运行(或在 my.cnf 中永久更改):

    SET GLOBAL max_allowed_packet=26214400;
    
  • 更改客户端添加选项--max_allowed_packet=26M mysql 命令行:

    mysql --max_allowed_packet=26M -u root -p'password' -h x.x.x.x -D mysql -se "SELECT REPEAT('A', 26214400);"
    

指定比SELECT输出大小稍大的max_allowed_packet

更多信息:Server System Variables - max_allowed_packet

答案 1 :(得分:1)

我不确定你的shell命令是否正确。 -p参数将提示输入密码,而--password ='your_password'将向mysql发送密码。

下一个命令在我的shell中运行:

mysql -u root -h 127.0.0.1 --password='password' -D mysql -se "SELECT REPEAT('A', 26214400);"