Fastest way to update column value
Changing 1.7M rows in a table requires making copies of all the rows that are changed.  (This is in case there is a crash or ROLLBACK.)  The system is not designed to handle huge changes like that.
It may be faster to do the UPDATE in chunks, COMMITting after each chunk.  This way the undo stuff is not huge.
I discuss techniques for walking through a table via the PRIMARY KEY in http://mysql.rjweb.org/doc.php/deletebig#deleting_in_chunks .  That blog is worded in terms of DELETEs, but UPDATEs can use the same techniques.
Side notes.  Some of these may lead to other solutions.
Do not even think of touching the .ibd file.
You do have a PRIMARY KEY, don't you?  If not, that is bad.  And it makes the &quot;walking&quot; that I describe less efficient.
Please provide SHOW CREATE TABLE and the actual UPDATE if you want to discuss things further.
In general, it is &quot;bad schema design&quot; to need to change every row of a large table.  There are much more efficient techniques.  One that comes to mind is to have a second table that contains only one row -- with the current value of foo.  However, it may or may not work for your use case.
What is your use case?  Do you change all the rows?  Or does that UPDATE usually change only a few rows?  How many different values?  Is it a flag, a date, or what?  Etc.
You have VARCHAR(2000); is the contents typically large?  How big is the typical record?  These questions lead into discussing &quot;off-record&quot; storage of large columns.
How much RAM do you have?  What is the value of innodb_buffer_pool_size?  What is the table size (SHOW TABLE STATUS LIKE 'mytable';)