It's worth mentioning that some queries require additional casting in order to work across the link otherwise you get hexadecimal gobbledegook.
CAST(NAME AS VARCHAR(64)) AS TableName,
CAST(COALESCE(Engine,'') AS VARCHAR(64)) AS Engine,
COALESCE(ROWS,0) AS RowsInTable,
COALESCE(Avg_row_length,0) AS AverageRowLength,
coalesce(Data_Length,0) AS Data_Length,
COALESCE(Max_Data_Length,0) AS MaximumDataLength,
coalesce(Index_Length,0) AS IndexLength,
COALESCE(Auto_Increment ,'') AS AutoIncrement
FROM OPENQUERY(MYSQLSRV,'SHOW TABLE STATUS;')
CAST(variable_name AS VARCHAR(100)) AS [variable_name] ,
CAST([value] AS VARCHAR(100)) AS [value]
FROM OPENQUERY(MYSQLSRV,'show variables;')
If you do use MySQL it is also worth bearing in mind the storage engine used by the product.
For example, if the engine is MyISAM then performance for a sequential extraction is very high. InnoDB is good for OLTP style queries.