在我的公司,我们偶尔会导入大型客户MySQL数据库(40GB +),这可能需要一天时间才能加载到我们的开发人员计算机上。虽然我们接受这个加载时间,因为它是在后台完成的,但我们缺乏任何可靠的估算进口何时完成的能力。这阻止我们安排适当的时间来对其采取行动。这就像等待有线电视的人出现一样。
现在我的最佳策略是快速show tables
命令,以查看已加载的表的百分比。但是,由于桌子尺寸彼此之间以及与每个顾客的差异很大,这甚至都不可靠。
有没有人有一个好的技术或工具可以用来获得MySQL导入的可靠百分比?
答案 0 :(得分:15)
您可以通过将转储管道传输到pv
来使用mysql
命令执行此操作。
pv -i 1 -p -t -e /path/to/sql/dump | mysql -u USERNAME -p DATABASE_NAME
它将根据IO吞吐量在导入过程中显示进度条。 (见here。)
答案 1 :(得分:1)
HeidiSql会告诉你到目前为止已经加载了多少GB,这在试图找出仍然需要加载的数量时非常有用。
答案 2 :(得分:1)
您还可以在源数据库上执行show processlist
,以查看导出所在的特定表的距离(通过自动递增ID)。 Eric提出了一个很好的观点,即您可以监视数据库数据目录的大小,而不是源的大小。
我发现在加速转储/导入方面很有用的东西是通过表来执行,然后同时运行多个mysqldump,基本上是多线程化你的进程。我通常一次做大约4次单独的转储/恢复。最佳数量取决于您的硬件和磁盘功能。
一个非常简单的例子,可以给你一个想法:
mysqldump dbname table1 table2 table3 | mysql -h host &
mysqldump dbname table4 table5 table6 | mysql -h host &
mysqldump dbname table7 table8 table9 | mysql -h host &