qaz*_*wsx 256 mysql mysqldump import mysql-5.0
我正在导入 7 GBfoobar.sql
以恢复本地数据库中的表。
$ mysql -h localhost -u root 'my_data' < foobar.sql
$ mysql --version
/usr/local/mysql/bin/mysql Ver 14.12 Distrib 5.0.96, for apple-darwin9.8.0 (i386) using readline 5.1
Run Code Online (Sandbox Code Playgroud)
我如何监控它的进度?
小智 339
如果您只是从 *nix 上的 CLI 的转储文件中导入,例如
mysql -uxxx -pxxx dbname < /sqlfile.sql
Run Code Online (Sandbox Code Playgroud)
然后首先在您的操作系统上安装管道查看器,然后尝试如下操作:
pv sqlfile.sql | mysql -uxxx -pxxxx dbname
Run Code Online (Sandbox Code Playgroud)
它会在程序运行时显示一个进度条。
它非常有用,您还可以使用它来估计 mysqldump 进度。
pv 转储sqlfile.sql
并将它们传递给 mysql(因为管道操作符)。在倾倒时,它显示了进度。很酷的事情是 mysql 只在数据可以处理的情况下尽可能快地获取数据,因此 pv 可以显示导入的进度。我没有任何证据。但似乎是这样。我想使用了一些缓冲区,但在某些时候我认为mysql
当它仍然忙于处理时不会再读取任何数据。
小智 38
如果您已经开始导入,则可以在另一个窗口中执行此命令以查看数据库的当前大小。如果您知道要导入的 .sql 文件的总大小,这会很有帮助。
SELECT table_schema "Data Base Name", sum( data_length + index_length ) / 1024 / 1024 "Data Base Size in MiB"
FROM information_schema.TABLES GROUP BY table_schema;
Run Code Online (Sandbox Code Playgroud)
归功于:http : //forums.mysql.com/read.php?108,201578,201578
在MySQL的8.0参考指出有关的准确度以下内容:
DATA_LENGTH
对于 MyISAM,DATA_LENGTH 是数据文件的长度,以字节为单位。
对于 InnoDB,DATA_LENGTH 是为聚集索引分配的近似内存量,以字节为单位。具体来说,它是聚集索引大小(以页为单位)乘以 InnoDB 页大小。
INDEX_LENGTH
对于 MyISAM,INDEX_LENGTH 是索引文件的长度,以字节为单位。
对于 InnoDB,INDEX_LENGTH 是为非聚集索引分配的近似内存量,以字节为单位。具体来说,它是非聚集索引大小的总和,以页为单位,乘以 InnoDB 页大小。
Rol*_*DBA 18
当您执行单个数据库的 mysqldump 时,所有表都按字母顺序转储。
自然地,将 mysqldump 重新加载到数据库中也将按字母顺序排列。
你可以做一个节目主持人;并找出运行 mysqldump 的数据库连接。重新加载转储时,数据库连接将消失。
如果您想知道转储文件中有哪些表,请针对 foobar.sql 运行此命令
cat foobar.sql | grep "^CREATE TABLE" | awk '{print $3}'
Run Code Online (Sandbox Code Playgroud)
很抱歉没有注意到只有一张桌子。
如果表是 MyISAM,则唯一的监视方法是从 OS 的角度。原因?该表在整个重新加载过程中都处于写锁定状态。你在找什么?.MYD
和.MYI
文件的大小。当然,您需要将其与之前导入的其他数据库服务器上的表大小进行比较。
如果表是 InnoDB 并且您启用了innodb_file_per_table,则监视的唯一方法是从 OS 的角度。原因?该表在整个重新加载过程中都处于写锁定状态。你在找什么?.ibd
文件的大小。当然,您需要将其与之前导入的其他数据库服务器上的表大小进行比较。
如果表是 InnoDB 并且您禁用了innodb_file_per_table,那么即使是操作系统的观点也无济于事。
去年我解决了类似的问题:如何获得“type db.sql | mysql”的进度百分比
由于标准的 mysqldump 像这样写锁定表:
LOCK TABLES `a` WRITE;
/*!40000 ALTER TABLE `a` DISABLE KEYS */;
INSERT INTO `a` VALUES (123),(451),(199),(0),(23);
/*!40000 ALTER TABLE `a` ENABLE KEYS */;
UNLOCK TABLES;
Run Code Online (Sandbox Code Playgroud)
然后,在表锁被释放之前,没有办法从 mysql 获得进展。
如果您可以从转储文件中获取LOCK TABLES
并UNLOCK TABLES
注释掉...
小智 14
每 2 秒您将看到进程正在运行。
watch 'echo "show processlist;" | mysql -uuser -ppassword';
Run Code Online (Sandbox Code Playgroud)
如果您希望它不那么频繁,请添加-n x
其中x是秒数。5 秒将是:
watch -n 5 'echo "show processlist;" | mysql -uuser -ppassword';
Run Code Online (Sandbox Code Playgroud)
小智 5
作为无法让 pv 工作或 pv 为其撒谎的人的解决方案。您可以在包含数据的 /var/lib/mysql 中监视 ibdata1 文件的大小。这将最终与源服务器中的文件大小相同(或大约)。
如果有很多表,你也可以在/var/lib/mysql/<数据库名>中观察它们一一出现。
最近,当一个长期数据库在三四年的时间里建立了一个大约 20G 的日志文件时,我碰巧使用了这个事实。我注意到转移需要很长时间,并使用这种技术来监控进度。
我认为,当数据库不涉及某处或其他地方的文件时,这一天是极不可能的。同时,您可以监控文件以查看传输的进展情况。自从编写第一个 sql 数据库以来,我建议的方法一直是您可以以一种或另一种形式执行的操作。我从未打算暗示这是手动骑师可以依靠的任何“官方”技术。它假定一般的计算机熟练程度,特别是 Unix。
归档时间: |
|
查看次数: |
227908 次 |
最近记录: |