It seems MaterializeMySQL doesn't support Decimal data type when doing replication.
Buffers buffers(database_name);
            while (!isCancelled())
            {
                
                UInt64 max_flush_time = settings->max_flush_data_time;
                BinlogEventPtr binlog_event = client.readOneBinlogEvent(std::max(UInt64(1), max_flush_time - watch.elapsedMilliseconds()));
                {
                    if (binlog_event)
                        onEvent(buffers, binlog_event, *metadata);
                    if (watch.elapsedMilliseconds() > max_flush_time || buffers.checkThresholds(
                            settings->max_rows_in_buffer, settings->max_bytes_in_buffer,
                            settings->max_rows_in_buffers, settings->max_bytes_in_buffers)
                        )
                    {
                        watch.restart();
                        if (!buffers.data.empty())
                            flushBuffersData(buffers, *metadata);
                    }
                }
            }
        }
    }
    catch (...)
    {
        client.disconnect();
        tryLogCurrentException(log);
        getDatabase(database_name).setException(std::current_exception());
    }
}
void MaterializeMySQLSyncThread::stopSynchronization()