Updating a row through Linked Server to MySQL DB
You can use 

EXEC('UPDATE product set [index]=''test_value'' where id=12345;') AT b2b


as an alternative syntax, which executes the query in pass-through mode. 

The reason why you're getting the optimistic locking error is probably because the query can't be run in pass-through, so SQL Server downloads the whole table, locates the row to update and then pushes the row back to the linked server. Between the moment the row is read and the moment the row is written, the value has changed in the linked server, so you have an optimistic locking violation.