- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 mysqldump 在 MySQL 中转储表的子集。我有我想从表中选择的行的 id 值,存储在一个文件中。当我将这些值用作变量时,如下所示:
ids=`cat ids.csv`
mysqldump -u root -p db Table --where="id in ($ids)" >> dump.sql
我得到:
x.bash: line x: /usr/bin/mysqldump: Argument list too long
我可能会尝试将单行变量 $ids (1,2,3,4,..) 分成较短的列表并在循环中调用 mysqldump 但我目前不太擅长 bash 脚本中的循环。或者可能有更好的方法来解决这个问题。
在此先感谢您的帮助。
编辑
考虑@ajreal 的建议,如果我这样做
mysql -u root -p -e "select * into outfile ./dump.sql from db.Table where id in ($ids)"
我再次收到“参数列表太长”。
我从另一个环境中获取 id 值。我运行此脚本所针对的数据库和我获取要在 where 子句中使用的 id 值的数据库位于不同的环境中。此外,在此步骤之前,我使用 --ignore-table 选项创建转储文件,忽略我在下一步中使用的“表”表。因此,我也更愿意在该步骤中使用 mysqldump。
最佳答案
试一试:
xargs -a ids.csv -d '\n' -n 20 sh -c 'mysqldump -u root -p db Table --where="id in ($@)" >> dump.sql' x
x
只是一个用来填充 $0
的虚拟值。或者:
xargs -a ids.csv -d '\n' -n 20 sh -c 'mysqldump -u root -p db Table --where="id in ($0 $@)" >> dump.sql'
这会将输入文件分成 20 行一组,并为每组运行一次 mysqldump
。您可能可以安全地增加该数字,并可以使用 --max-chars
应用字符上限。您可以使用 xargs -a/dev/null --show-limits
查看系统的限制。
xargs -a ids.csv -d '\n' -n 1000 --max-chars=100000 sh -c 'mysqldump -u root -p db Table --where="id in ($@)" >> dump.sql' x
编辑:
试试这个 Bash 脚本。将 num
设置为任何合理的值。
#!/bin/bash
ids=$(< ids.csv)
saveIFS=$IFS
IFS=','
array=($ids) # split into an array using commas as the delimiter
IFS=$saveIFS
array=(${array[@]/%/,}) # add commas back to each element
num=100 # number of elements to process at a time
for ((i=0; i<${#array[@]}; i+=$num))
do
list=${array[@]:$i:$num}
# an excess trailing comma is stripped off in the next line
mysqldump -u root -p db Table --where="id in ("${list%,}")" >> dump.sql
done
关于mysql - 在 bash 脚本中使用带有 where 选项和长参数列表的 mysqldump,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4348065/
我定期针对 Drupal 数据库运行 mysqldump,伙计,那些缓存表可能会变得很大。考虑到我在重新加载数据后做的第一件事就是清除缓存,如果我可以完全跳过转储所有这些行,我会很高兴。我不想跳过表创
我知道 exit code = 0 的意思是 No error。 我得到 退出代码 = 2。这是什么意思 ? 在哪里可以看到 mysqldump 退出代码的完整列表? 最佳答案 取自 MySQL 5.
我正在清理这个庞大而困惑的数据库。它包含 500 多个表,这是将 Magento Enterprise 与 Joomla 结合到一个数据库中的结果。 更糟糕的是,有一组 70 多个 Joomla 表根
我正在尝试将大型数据库中的一小部分记录加载到测试数据库中。 你如何告诉 mysqldump 只给你 800 万条记录中的 n 条记录? 谢谢 最佳答案 正如 skaffman 所说,使用 --wher
我的 mysqldump 有问题.. 我知道如何从我的电脑启动 mysqldump 命令到远程服务器并自动将 mysqldump 文件保存在我的电脑中...... mysqldump --user=
这是我的完整 bash 脚本: #!/bin/bash logs="$HOME/sitedb_backups/log" mysql_user="user" mysql_password="pass"
在这个问题上工作了一整天..当我请求该表时,它为我提供了整个数据库.. #!/bin/bash # mysqldump --user root --password=mypw sellnjho_rea
我想知道通过phpmyadmin导出大型数据库和通过mysqldump通过终端导出信息的方式是否有区别。 mysqldump 的运行时间更好? 我想知道优点和缺点。 谢谢。 最佳答案 如果你从 mys
我收到以下错误: mysqldump: [ERROR] unknown variable 'database=myDB1' 当我运行这个命令时: mysqldump -u root -p myDB
我最近将服务器升级到 Debian 9,并将 MySQL 升级到最新版本。我有一个简单的备份脚本,在生产站点上执行任何工作之前运行该脚本,但这一次,在运行脚本时,我遇到以下情况: mysqldump:
解决方法见底 我正在运行 mysqldump 作为通过 cron 作业调用的 php 脚本的一部分。 是否可以从 mysqldump 命令返回 stderr,或者将其分配给可以直接读取的变量?或者是否
尝试通过 MySQL Workbench 转储简单数据库,方法是单击...服务器>数据导出>mydb>开始导出 获取消息:mysqldump 版本不匹配...消息显示这些版本mysqldump.exe
我尝试了其他答案中提到的其他解决方案,例如权限、授予问题、端口号、密码/用户名等。这些都不是问题;它们可能是您的问题,因此需要检查。 配置:在 Win10 上运行 Wordpress,安装了 Mari
我必须从服务器转储数据库,将 .sql 传输到另一台服务器,然后运行以下脚本以使用此语法删除某些行: DELETE wp_posts FROM wp_posts INNER JOIN wp_postm
正在尝试从 MAMP 服务器导出数据库。我试过命令: # mysql_dump -u root -proot db_name > db_name.sql # Applications/MAMP/Lib
我只想转储最新的行。但是当我通过 --where 选项时,它不会转储行。但是当我使用相同的 where 子句执行选择查询时,它返回行。这是我的选择查询: SELECT * FROM abc.`xyz
我用它来将所有数据从 my_database 导出到分隔文本到一个文件夹中 mysqldump -u root -p -t -T /path/to/export my_database --field
我经常使用以下命令通过 ssh 在 AWS RDS 上导出 mySql 数据库: mysqldump -u myUserName -h myDBname.randomcharacters.us-reg
我需要包含数据的 mysqldump,但在数据库中还有几个带有 FEDERATED 引擎的表。 mysqldump 也包括 FEDERATED 表的 INSERT,这是导致“重复条目”错误的原因(因为
mysqldump 在生成转储文件时会转义哪些字符?不幸的是,我找不到任何相关文档,所以我尝试了一下,发现只有双引号、单引号和反斜杠 (',",\) 会被反斜杠转义。 但是还有更多吗,或者有任何可用的
我是一名优秀的程序员,十分优秀!