Brakuje tylko jednej rzeczy. Zwłaszcza jeśli używasz InnoDB, chcesz jawnie dodać klauzulę ORDER BY w instrukcji SELECT, aby upewnić się, że wstawiasz wiersze w kolejności klucza podstawowego (indeks klastrowy):
INSERT INTO product_backup SELECT * FROM product ORDER BY product_id
Rozważ usunięcie indeksów pomocniczych z tabeli kopii zapasowej, jeśli nie są one potrzebne. Oszczędzi to również trochę obciążenia serwera.
Wreszcie, jeśli używasz InnoDB, zmniejsz liczbę wymaganych blokad wierszy i po prostu zablokuj obie tabele:
LOCK TABLES product_backup WRITE;
LOCK TABLES product READ;
INSERT INTO product_backup SELECT * FROM product ORDER BY product_id;
UNLOCK TABLES;
Blokowanie prawdopodobnie nie zrobi wielkiej różnicy, ponieważ blokowanie wierszy jest bardzo szybkie (choć nie tak szybkie jak blokowanie tabel), ale skoro o to prosiłeś.