It seems MaterializeMySQL doesn't support Decimal data type when doing replication.
const mysqlxx::PoolWithFailover::Entry & entry_, const std::string & query_str, const Block & sample_block, const UInt64 max_block_size_, const bool auto_close_)
    : entry{entry_}, query{this->entry->query(query_str)}, result{query.use()}, max_block_size{max_block_size_}, auto_close{auto_close_}
{
    if (sample_block.columns() != result.getNumFields())
        throw Exception{"mysqlxx::UseQueryResult contains " + toString(result.getNumFields()) + " columns while "
                            + toString(sample_block.columns()) + " expected",
                        ErrorCodes::NUMBER_OF_COLUMNS_DOESNT_MATCH};
    description.init(sample_block);
}
namespace
{
    using ValueType = ExternalResultDescription::ValueType;
    void insertValue(const IDataType & data_type, IColumn & column, const ValueType type, const mysqlxx::Value & value)