¿Cómo puedo bloquear una tabla InnoDB para evitar actualizaciones mientras se copia esa tabla?

Me gustaría bloquear temporalmente una tabla para evitar que otros procesos concurrentes le hagan cambios. La razón de esto es que esta tabla se copiará en una tabla temporal, se modificará y luego se volverá a copiar (el original se ha eliminado y la tabla se renombra). Luego, después de completar todo esto, quiero desbloquear la tabla y, con suerte, tener algo que se haya intentado durante el reinicio de bloqueo.

También necesito poder leer de la tabla que se ha bloqueado para construir la nueva tabla.

Aquí está lo que intenté, pero no parece funcionar.

$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT);

$mysqli->autocommit(false)

// create a table to hold parts to keep
$q1 = "CREATE TABLE new_table LIKE my_table;";
$res1 = $mysqli ->query($q1);       

// Lock table to avoid concurrent update issues
$q2 = "LOCK TABLE my_table WRITE;";
$res2 = $mysqli ->query($q2);           

// Insert data to keep into new table   
$q3 = "INSERT INTO new_table SELECT * FROM my_table WHERE some_id IN (SELECT ID FROM table2)";
$res3 = $mysqli ->query($q3);

// drop original table
$q4 = "DROP TABLE my_table;";
$res4 = $mysqli ->query($q4);

// rename new table
$q5 = "RENAME TABLE new_table TO my_table;";
$res5 = $mysqli ->query($q5);

$mysqli ->commit(); // commit changes and re-enable autocommit

$q = "UNLOCK TABLES;";
$res = $mysqli ->query($q); 

Para probar, usando PHPmyadmin, emití el "SET AUTOCOMMIT = 0; LOCK TABLE my_table WRITE;" Consulte y luego intente eliminar algo de my_table y pude hacerlo. Quiero bloquear esto. Además, después de emitir la sentencia de bloqueo, el resto del procedimiento falla y nada se altera.

Respuestas a la pregunta(1)

Su respuesta a la pregunta