如何获得“type db.sql | mysql”的进度百分比

ser*_*ail 2 mysql

我在做:

type db.sql | mysql
Run Code Online (Sandbox Code Playgroud)

控制台输出什么都没有。我看到 ibdata1 文件在增长,但我不知道它会增长到多少 GB。

我想看到某种百分比进度指示器。有任何想法吗?

Dav*_*ett 5

在像 Linux 这样的类 UNIX 系统下,有很多选项。Pipe Viewer(pv,在此处可用)是我倾向于使用的一个,它可以方便地出现在大多数发行版的标准包存储库中(aptitude install pv在 Ubuntu 下)。

但是您使用type而不意味着cat您正在使用Windows,并且我不知道该环境有任何此类工具,尽管毫无疑问pvGaius 提到的工具之一可以在cygwin下轻松编译。

请注意,这是计量发送到 mysql 的文件量,而不是 mysql 实际完成的工作量,并且发送到 mysql 的文件量可能无法准确映射到 mysql 已经完成和尚未完成的工作量做。一个巨大的多行 INSERT (而INSERT <table> VALUES(<row 1 content>), (<row 2 content>), ..., (<row X content>);不是INSERT <table> VALUES(<row 1 content>); INSERT <table> VALUES (<row 2 content>); ...)在完全接收之前不会被处理,因此如果您通过慢速网络链接运行脚本,您会在发送数据时看到一些进度,然后在实际处理时暂停(因此如果整个脚本是一个长的多行插入语句,进度表可能会直接达到 100%,或接近 100%,并在那里停留很长时间)。

作为另一个建议,您可以在脚本的每个部分添加输出语句,例如:

SELECT "About to create table some_table" AS action;
<create table code>
SELECT "Table some_table created" AS action;
Run Code Online (Sandbox Code Playgroud)

并时不时地用消息以及之前和/或之后的消息来打破位插入:

SELECT "About to add rows to some_table" AS action, COUNT(*) AS current_rowcount FROM some_table;
<some insert statements, or a multi-row insert>
SELECT "adding rows to some_table" AS action, COUNT(*) AS current_rowcount FROM some_table;
<some more insert statements, or a multi-row insert>
SELECT "Done adding rows to some_table" AS action, COUNT(*) AS current_rowcount FROM some_table;
Run Code Online (Sandbox Code Playgroud)

这些额外的 SELECT 语句的结果应该在脚本处理时写入 stdout(即您的控制台),这样您就可以知道它已经走了多远。


Rol*_*DBA 5

我有一个疯狂的问题要问你吗!!!

这将报告每个 InnoDB 表的大小。

SELECT CONCAT(db,'.',tb) table_name,CONCAT(ROUND(
tbsz/POWER(1024,IF(pw<0,0,IF(pw>4,4,pw))),3),' ',
SUBSTR(' KMGT',IF(pw<0,0,IF(pw>4,4,pw))+1,1)) table_size
FROM (SELECT data_length+index_length tbsz,table_schema db,table_name tb
FROM information_schema.tables WHERE engine='InnoDB') A,
(SELECT 3 pw) B;
Run Code Online (Sandbox Code Playgroud)
  • (SELECT 0 pw) 给字节
  • (SELECT 1 pw) 给 KB
  • (SELECT 2 pw) 给 MB
  • (SELECT 3 pw) 给 GB
  • (SELECT 4 pw) 给 TB

只需在加载 SQL 脚本期间定期运行它。如果 SQL 脚本表在加载期间锁定了该表,那么在该表完全加载之前您将看不到数字。

试一试 !!!