long2ice / meilisync

Realtime sync data from MySQL/PostgreSQL/MongoDB to Meilisearch
https://github.com/long2ice/meilisync
Apache License 2.0
285 stars 43 forks source link

Strange behavior during the sync #9

Closed brunoocasali closed 1 year ago

brunoocasali commented 1 year ago

I created a MySQL database with some fake data, and I ran the sync without dates because of the #8. After that, I inserted a new row in the table from the MySQL CLI.

The received error mentions the support of utf8mb3 encoding.

meilisync-meilisync-1    | 2023-04-21 15:10:27.964 | DEBUG    | meilisync.main:_:33 - plugins=['meilisync.plugin.Plugin'] progress=Progress(type=<ProgressType.file: 'file'>, path='./progress.json') debug=True source=Source(type=<SourceType.mysql: 'mysql'>, database='blog', port=3306, host='mysql', charset='utf8', password='meilisync', user='root') meilisearch=MeiliSearch(api_url='http://meilisearch:7700', api_key='7TL351wVlGaszDQjfXGe7J6_15ZIARF0wa_zpwXaAOU', insert_size=1000, insert_interval=10) sync=[Sync(plugins=None, table='authors', pk='id', full=True, index=None, fields={'id': None, 'first_name': None, 'last_name': None, 'email': None})] sentry=None
meilisync-meilisync-1    | 2023-04-21 15:10:28.070 | INFO     | meilisync.main:_:90 - Start increment sync data from "mysql" to MeiliSearch...
meilisync-meilisync-1    | 2023-04-21 15:10:28.108 | DEBUG    | meilisync.main:_:93 - progress={'master_log_file': 'binlog.000016', 'master_log_position': 157}
meilisync-meilisync-1    | ╭───────────────────── Traceback (most recent call last) ──────────────────────╮
meilisync-meilisync-1    | │ /meilisync/meilisync/main.py:129 in start                                    │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │   126 │   │   lock = asyncio.Lock()                                          │
meilisync-meilisync-1    | │   127 │   │   await asyncio.gather(_(), interval())                          │
meilisync-meilisync-1    | │   128 │                                                                      │
meilisync-meilisync-1    | │ ❱ 129 │   asyncio.run(run())                                                 │
meilisync-meilisync-1    | │   130                                                                        │
meilisync-meilisync-1    | │   131                                                                        │
meilisync-meilisync-1    | │   132 @app.command(help="Delete all data in MeiliSearch and full sync")      │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
meilisync-meilisync-1    | │ │                _ = <function start.<locals>._ at 0x400674dca0>           │ │
meilisync-meilisync-1    | │ │       collection = <meilisync.event.EventCollection object at            │ │
meilisync-meilisync-1    | │ │                    0x400675e6d0>                                         │ │
meilisync-meilisync-1    | │ │          context = <click.core.Context object at 0x4006744e80>           │ │
meilisync-meilisync-1    | │ │ current_progress = {                                                     │ │
meilisync-meilisync-1    | │ │                    │   'master_log_file': 'binlog.000016',               │ │
meilisync-meilisync-1    | │ │                    │   'master_log_position': 157                        │ │
meilisync-meilisync-1    | │ │                    }                                                     │ │
meilisync-meilisync-1    | │ │         interval = <function start.<locals>.interval at 0x400674db80>    │ │
meilisync-meilisync-1    | │ │             lock = <asyncio.locks.Lock object at 0x400675e3a0            │ │
meilisync-meilisync-1    | │ │                    [unlocked]>                                           │ │
meilisync-meilisync-1    | │ │            meili = <meilisync.meili.Meili object at 0x400675e100>        │ │
meilisync-meilisync-1    | │ │   meili_settings = MeiliSearch(                                          │ │
meilisync-meilisync-1    | │ │                    │   api_url='http://meilisearch:7700',                │ │
meilisync-meilisync-1    | │ │                    │                                                     │ │
meilisync-meilisync-1    | │ │                    api_key='7TL351wVlGaszDQjfXGe7J6_15ZIARF0wa_zpwXaAOU… │ │
meilisync-meilisync-1    | │ │                    │   insert_size=1000,                                 │ │
meilisync-meilisync-1    | │ │                    │   insert_interval=10                                │ │
meilisync-meilisync-1    | │ │                    )                                                     │ │
meilisync-meilisync-1    | │ │         progress = <meilisync.progress.file.File object at 0x400675e490> │ │
meilisync-meilisync-1    | │ │              run = <function start.<locals>.run at 0x400674dc10>         │ │
meilisync-meilisync-1    | │ │         settings = Settings(                                             │ │
meilisync-meilisync-1    | │ │                    │   plugins=['meilisync.plugin.Plugin'],              │ │
meilisync-meilisync-1    | │ │                    │   progress=Progress(                                │ │
meilisync-meilisync-1    | │ │                    │   │   type=<ProgressType.file: 'file'>,             │ │
meilisync-meilisync-1    | │ │                    │   │   path='./progress.json'                        │ │
meilisync-meilisync-1    | │ │                    │   ),                                                │ │
meilisync-meilisync-1    | │ │                    │   debug=True,                                       │ │
meilisync-meilisync-1    | │ │                    │   source=Source(                                    │ │
meilisync-meilisync-1    | │ │                    │   │   type=<SourceType.mysql: 'mysql'>,             │ │
meilisync-meilisync-1    | │ │                    │   │   database='blog',                              │ │
meilisync-meilisync-1    | │ │                    │   │   port=3306,                                    │ │
meilisync-meilisync-1    | │ │                    │   │   host='mysql',                                 │ │
meilisync-meilisync-1    | │ │                    │   │   charset='utf8',                               │ │
meilisync-meilisync-1    | │ │                    │   │   password='meilisync',                         │ │
meilisync-meilisync-1    | │ │                    │   │   user='root'                                   │ │
meilisync-meilisync-1    | │ │                    │   ),                                                │ │
meilisync-meilisync-1    | │ │                    │   meilisearch=MeiliSearch(                          │ │
meilisync-meilisync-1    | │ │                    │   │   api_url='http://meilisearch:7700',            │ │
meilisync-meilisync-1    | │ │                    │   │                                                 │ │
meilisync-meilisync-1    | │ │                    api_key='7TL351wVlGaszDQjfXGe7J6_15ZIARF0wa_zpwXaAOU… │ │
meilisync-meilisync-1    | │ │                    │   │   insert_size=1000,                             │ │
meilisync-meilisync-1    | │ │                    │   │   insert_interval=10                            │ │
meilisync-meilisync-1    | │ │                    │   ),                                                │ │
meilisync-meilisync-1    | │ │                    │   sync=[                                            │ │
meilisync-meilisync-1    | │ │                    │   │   Sync(                                         │ │
meilisync-meilisync-1    | │ │                    │   │   │   plugins=None,                             │ │
meilisync-meilisync-1    | │ │                    │   │   │   table='authors',                          │ │
meilisync-meilisync-1    | │ │                    │   │   │   pk='id',                                  │ │
meilisync-meilisync-1    | │ │                    │   │   │   full=True,                                │ │
meilisync-meilisync-1    | │ │                    │   │   │   index=None,                               │ │
meilisync-meilisync-1    | │ │                    │   │   │   fields={                                  │ │
meilisync-meilisync-1    | │ │                    │   │   │   │   'id': None,                           │ │
meilisync-meilisync-1    | │ │                    │   │   │   │   'first_name': None,                   │ │
meilisync-meilisync-1    | │ │                    │   │   │   │   'last_name': None,                    │ │
meilisync-meilisync-1    | │ │                    │   │   │   │   'email': None                         │ │
meilisync-meilisync-1    | │ │                    │   │   │   }                                         │ │
meilisync-meilisync-1    | │ │                    │   │   )                                             │ │
meilisync-meilisync-1    | │ │                    │   ],                                                │ │
meilisync-meilisync-1    | │ │                    │   sentry=None                                       │ │
meilisync-meilisync-1    | │ │                    )                                                     │ │
meilisync-meilisync-1    | │ │           source = <meilisync.source.mysql.MySQL object at 0x400675e8e0> │ │
meilisync-meilisync-1    | │ ╰──────────────────────────────────────────────────────────────────────────╯ │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ /usr/local/lib/python3.9/asyncio/runners.py:44 in run                        │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │   41 │   │   events.set_event_loop(loop)                                     │
meilisync-meilisync-1    | │   42 │   │   if debug is not None:                                           │
meilisync-meilisync-1    | │   43 │   │   │   loop.set_debug(debug)                                       │
meilisync-meilisync-1    | │ ❱ 44 │   │   return loop.run_until_complete(main)                            │
meilisync-meilisync-1    | │   45 │   finally:                                                            │
meilisync-meilisync-1    | │   46 │   │   try:                                                            │
meilisync-meilisync-1    | │   47 │   │   │   _cancel_all_tasks(loop)                                     │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ ╭──────────────────────────────── locals ────────────────────────────────╮   │
meilisync-meilisync-1    | │ │ debug = None                                                           │   │
meilisync-meilisync-1    | │ │  loop = <_UnixSelectorEventLoop running=False closed=True debug=False> │   │
meilisync-meilisync-1    | │ │  main = <coroutine object start.<locals>.run at 0x4006705a40>          │   │
meilisync-meilisync-1    | │ ╰────────────────────────────────────────────────────────────────────────╯   │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ /usr/local/lib/python3.9/asyncio/base_events.py:647 in run_until_complete    │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │    644 │   │   if not future.done():                                         │
meilisync-meilisync-1    | │    645 │   │   │   raise RuntimeError('Event loop stopped before Future comp │
meilisync-meilisync-1    | │    646 │   │                                                                 │
meilisync-meilisync-1    | │ ❱  647 │   │   return future.result()                                        │
meilisync-meilisync-1    | │    648 │                                                                     │
meilisync-meilisync-1    | │    649 │   def stop(self):                                                   │
meilisync-meilisync-1    | │    650 │   │   """Stop running the event loop.                               │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
meilisync-meilisync-1    | │ │   future = <Task finished name='Task-4' coro=<start.<locals>.run() done, │ │
meilisync-meilisync-1    | │ │            defined at /meilisync/meilisync/main.py:124>                  │ │
meilisync-meilisync-1    | │ │            exception=LookupError('unknown encoding: utf8mb3')>           │ │
meilisync-meilisync-1    | │ │ new_task = True                                                          │ │
meilisync-meilisync-1    | │ │     self = <_UnixSelectorEventLoop running=False closed=True             │ │
meilisync-meilisync-1    | │ │            debug=False>                                                  │ │
meilisync-meilisync-1    | │ ╰──────────────────────────────────────────────────────────────────────────╯ │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ /meilisync/meilisync/main.py:127 in run                                      │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │   124 │   async def run():                                                   │
meilisync-meilisync-1    | │   125 │   │   nonlocal lock                                                  │
meilisync-meilisync-1    | │   126 │   │   lock = asyncio.Lock()                                          │
meilisync-meilisync-1    | │ ❱ 127 │   │   await asyncio.gather(_(), interval())                          │
meilisync-meilisync-1    | │   128 │                                                                      │
meilisync-meilisync-1    | │   129 │   asyncio.run(run())                                                 │
meilisync-meilisync-1    | │   130                                                                        │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ ╭───────────────────────────── locals ──────────────────────────────╮        │
meilisync-meilisync-1    | │ │        _ = <function start.<locals>._ at 0x400674dca0>            │        │
meilisync-meilisync-1    | │ │ interval = <function start.<locals>.interval at 0x400674db80>     │        │
meilisync-meilisync-1    | │ │     lock = <asyncio.locks.Lock object at 0x400675e3a0 [unlocked]> │        │
meilisync-meilisync-1    | │ ╰───────────────────────────────────────────────────────────────────╯        │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ /meilisync/meilisync/main.py:91 in _                                         │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │    88 │   │   │   │   │   │   │   f'No data found for table "{settings.sourc │
meilisync-meilisync-1    | │    89 │   │   │   │   │   │   )                                              │
meilisync-meilisync-1    | │    90 │   │   logger.info(f'Start increment sync data from "{settings.source │
meilisync-meilisync-1    | │ ❱  91 │   │   async for event in source:                                     │
meilisync-meilisync-1    | │    92 │   │   │   if settings.debug:                                         │
meilisync-meilisync-1    | │    93 │   │   │   │   logger.debug(event)                                    │
meilisync-meilisync-1    | │    94 │   │   │   current_progress = event.progress                          │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
meilisync-meilisync-1    | │ │       collection = <meilisync.event.EventCollection object at            │ │
meilisync-meilisync-1    | │ │                    0x400675e6d0>                                         │ │
meilisync-meilisync-1    | │ │ current_progress = {                                                     │ │
meilisync-meilisync-1    | │ │                    │   'master_log_file': 'binlog.000016',               │ │
meilisync-meilisync-1    | │ │                    │   'master_log_position': 157                        │ │
meilisync-meilisync-1    | │ │                    }                                                     │ │
meilisync-meilisync-1    | │ │            event = ProgressEvent(                                        │ │
meilisync-meilisync-1    | │ │                    │   progress={                                        │ │
meilisync-meilisync-1    | │ │                    │   │   'master_log_file': 'binlog.000016',           │ │
meilisync-meilisync-1    | │ │                    │   │   'master_log_position': 157                    │ │
meilisync-meilisync-1    | │ │                    │   }                                                 │ │
meilisync-meilisync-1    | │ │                    )                                                     │ │
meilisync-meilisync-1    | │ │             lock = <asyncio.locks.Lock object at 0x400675e3a0            │ │
meilisync-meilisync-1    | │ │                    [unlocked]>                                           │ │
meilisync-meilisync-1    | │ │            meili = <meilisync.meili.Meili object at 0x400675e100>        │ │
meilisync-meilisync-1    | │ │   meili_settings = MeiliSearch(                                          │ │
meilisync-meilisync-1    | │ │                    │   api_url='http://meilisearch:7700',                │ │
meilisync-meilisync-1    | │ │                    │                                                     │ │
meilisync-meilisync-1    | │ │                    api_key='7TL351wVlGaszDQjfXGe7J6_15ZIARF0wa_zpwXaAOU… │ │
meilisync-meilisync-1    | │ │                    │   insert_size=1000,                                 │ │
meilisync-meilisync-1    | │ │                    │   insert_interval=10                                │ │
meilisync-meilisync-1    | │ │                    )                                                     │ │
meilisync-meilisync-1    | │ │         progress = <meilisync.progress.file.File object at 0x400675e490> │ │
meilisync-meilisync-1    | │ │         settings = Settings(                                             │ │
meilisync-meilisync-1    | │ │                    │   plugins=['meilisync.plugin.Plugin'],              │ │
meilisync-meilisync-1    | │ │                    │   progress=Progress(                                │ │
meilisync-meilisync-1    | │ │                    │   │   type=<ProgressType.file: 'file'>,             │ │
meilisync-meilisync-1    | │ │                    │   │   path='./progress.json'                        │ │
meilisync-meilisync-1    | │ │                    │   ),                                                │ │
meilisync-meilisync-1    | │ │                    │   debug=True,                                       │ │
meilisync-meilisync-1    | │ │                    │   source=Source(                                    │ │
meilisync-meilisync-1    | │ │                    │   │   type=<SourceType.mysql: 'mysql'>,             │ │
meilisync-meilisync-1    | │ │                    │   │   database='blog',                              │ │
meilisync-meilisync-1    | │ │                    │   │   port=3306,                                    │ │
meilisync-meilisync-1    | │ │                    │   │   host='mysql',                                 │ │
meilisync-meilisync-1    | │ │                    │   │   charset='utf8',                               │ │
meilisync-meilisync-1    | │ │                    │   │   password='meilisync',                         │ │
meilisync-meilisync-1    | │ │                    │   │   user='root'                                   │ │
meilisync-meilisync-1    | │ │                    │   ),                                                │ │
meilisync-meilisync-1    | │ │                    │   meilisearch=MeiliSearch(                          │ │
meilisync-meilisync-1    | │ │                    │   │   api_url='http://meilisearch:7700',            │ │
meilisync-meilisync-1    | │ │                    │   │                                                 │ │
meilisync-meilisync-1    | │ │                    api_key='7TL351wVlGaszDQjfXGe7J6_15ZIARF0wa_zpwXaAOU… │ │
meilisync-meilisync-1    | │ │                    │   │   insert_size=1000,                             │ │
meilisync-meilisync-1    | │ │                    │   │   insert_interval=10                            │ │
meilisync-meilisync-1    | │ │                    │   ),                                                │ │
meilisync-meilisync-1    | │ │                    │   sync=[                                            │ │
meilisync-meilisync-1    | │ │                    │   │   Sync(                                         │ │
meilisync-meilisync-1    | │ │                    │   │   │   plugins=None,                             │ │
meilisync-meilisync-1    | │ │                    │   │   │   table='authors',                          │ │
meilisync-meilisync-1    | │ │                    │   │   │   pk='id',                                  │ │
meilisync-meilisync-1    | │ │                    │   │   │   full=True,                                │ │
meilisync-meilisync-1    | │ │                    │   │   │   index=None,                               │ │
meilisync-meilisync-1    | │ │                    │   │   │   fields={                                  │ │
meilisync-meilisync-1    | │ │                    │   │   │   │   'id': None,                           │ │
meilisync-meilisync-1    | │ │                    │   │   │   │   'first_name': None,                   │ │
meilisync-meilisync-1    | │ │                    │   │   │   │   'last_name': None,                    │ │
meilisync-meilisync-1    | │ │                    │   │   │   │   'email': None                         │ │
meilisync-meilisync-1    | │ │                    │   │   │   }                                         │ │
meilisync-meilisync-1    | │ │                    │   │   )                                             │ │
meilisync-meilisync-1    | │ │                    │   ],                                                │ │
meilisync-meilisync-1    | │ │                    │   sentry=None                                       │ │
meilisync-meilisync-1    | │ │                    )                                                     │ │
meilisync-meilisync-1    | │ │           source = <meilisync.source.mysql.MySQL object at 0x400675e8e0> │ │
meilisync-meilisync-1    | │ ╰──────────────────────────────────────────────────────────────────────────╯ │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ /meilisync/meilisync/source/mysql.py:89 in __aiter__                         │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │    86 │   │   async for event in stream:                                     │
meilisync-meilisync-1    | │    87 │   │   │   if isinstance(event, WriteRowsEvent):                      │
meilisync-meilisync-1    | │    88 │   │   │   │   event_type = EventType.create                          │
meilisync-meilisync-1    | │ ❱  89 │   │   │   │   data = event.rows[0]["values"]                         │
meilisync-meilisync-1    | │    90 │   │   │   elif isinstance(event, UpdateRowsEvent):                   │
meilisync-meilisync-1    | │    91 │   │   │   │   event_type = EventType.update                          │
meilisync-meilisync-1    | │    92 │   │   │   │   data = event.rows[0]["after_values"]                   │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
meilisync-meilisync-1    | │ │               event = <asyncmy.replication.row_events.WriteRowsEvent     │ │
meilisync-meilisync-1    | │ │                       object at 0x40177a5070>                            │ │
meilisync-meilisync-1    | │ │          event_type = <EventType.create: 'create'>                       │ │
meilisync-meilisync-1    | │ │     master_log_file = 'binlog.000016'                                    │ │
meilisync-meilisync-1    | │ │ master_log_position = 157                                                │ │
meilisync-meilisync-1    | │ │                self = <meilisync.source.mysql.MySQL object at            │ │
meilisync-meilisync-1    | │ │                       0x400675e8e0>                                      │ │
meilisync-meilisync-1    | │ │              stream = <asyncmy.replication.binlogstream.BinLogStream     │ │
meilisync-meilisync-1    | │ │                       object at 0x400676fa90>                            │ │
meilisync-meilisync-1    | │ ╰──────────────────────────────────────────────────────────────────────────╯ │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ /usr/local/lib/python3.9/site-packages/asyncmy/replication/row_events.py:453 │
meilisync-meilisync-1    | │ in rows                                                                      │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │   450 │   @property                                                          │
meilisync-meilisync-1    | │   451 │   def rows(self):                                                    │
meilisync-meilisync-1    | │   452 │   │   if self._rows is None:                                         │
meilisync-meilisync-1    | │ ❱ 453 │   │   │   self._fetch_rows()                                         │
meilisync-meilisync-1    | │   454 │   │   return self._rows                                              │
meilisync-meilisync-1    | │   455                                                                        │
meilisync-meilisync-1    | │   456                                                                        │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
meilisync-meilisync-1    | │ │ self = <asyncmy.replication.row_events.WriteRowsEvent object at          │ │
meilisync-meilisync-1    | │ │        0x40177a5070>                                                     │ │
meilisync-meilisync-1    | │ ╰──────────────────────────────────────────────────────────────────────────╯ │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ /usr/local/lib/python3.9/site-packages/asyncmy/replication/row_events.py:448 │
meilisync-meilisync-1    | │ in _fetch_rows                                                               │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │   445 │   │   │   return                                                     │
meilisync-meilisync-1    | │   446 │   │                                                                  │
meilisync-meilisync-1    | │   447 │   │   while self.packet.read_bytes < self.event_size:                │
meilisync-meilisync-1    | │ ❱ 448 │   │   │   self._rows.append(self._fetch_one_row())                   │
meilisync-meilisync-1    | │   449 │                                                                      │
meilisync-meilisync-1    | │   450 │   @property                                                          │
meilisync-meilisync-1    | │   451 │   def rows(self):                                                    │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
meilisync-meilisync-1    | │ │ self = <asyncmy.replication.row_events.WriteRowsEvent object at          │ │
meilisync-meilisync-1    | │ │        0x40177a5070>                                                     │ │
meilisync-meilisync-1    | │ ╰──────────────────────────────────────────────────────────────────────────╯ │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ /usr/local/lib/python3.9/site-packages/asyncmy/replication/row_events.py:489 │
meilisync-meilisync-1    | │ in _fetch_one_row                                                            │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │   486 │   │   │   self.columns_present_bitmap = self.packet.read((self.numbe │
meilisync-meilisync-1    | │   487 │                                                                      │
meilisync-meilisync-1    | │   488 │   def _fetch_one_row(self):                                          │
meilisync-meilisync-1    | │ ❱ 489 │   │   return {"values": self._read_column_data(self.columns_present_ │
meilisync-meilisync-1    | │   490                                                                        │
meilisync-meilisync-1    | │   491                                                                        │
meilisync-meilisync-1    | │   492 class UpdateRowsEvent(RowsEvent):                                      │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
meilisync-meilisync-1    | │ │ self = <asyncmy.replication.row_events.WriteRowsEvent object at          │ │
meilisync-meilisync-1    | │ │        0x40177a5070>                                                     │ │
meilisync-meilisync-1    | │ ╰──────────────────────────────────────────────────────────────────────────╯ │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ /usr/local/lib/python3.9/site-packages/asyncmy/replication/row_events.py:162 │
meilisync-meilisync-1    | │ in _read_column_data                                                         │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │   159 │   │   │   │   if column.max_length > 255:                            │
meilisync-meilisync-1    | │   160 │   │   │   │   │   values[name] = self.__read_string(2, column)       │
meilisync-meilisync-1    | │   161 │   │   │   │   else:                                                  │
meilisync-meilisync-1    | │ ❱ 162 │   │   │   │   │   values[name] = self.__read_string(1, column)       │
meilisync-meilisync-1    | │   163 │   │   │   elif column.type == NEWDECIMAL:                            │
meilisync-meilisync-1    | │   164 │   │   │   │   values[name] = self.__read_new_decimal(column)         │
meilisync-meilisync-1    | │   165 │   │   │   elif column.type == BLOB:                                  │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
meilisync-meilisync-1    | │ │       cols_bitmap = b'\xff'                                              │ │
meilisync-meilisync-1    | │ │            column = <asyncmy.replication.column.Column object at         │ │
meilisync-meilisync-1    | │ │                     0x400676ffa0>                                        │ │
meilisync-meilisync-1    | │ │                 i = 1                                                    │ │
meilisync-meilisync-1    | │ │              name = 'first_name'                                         │ │
meilisync-meilisync-1    | │ │        nb_columns = 6                                                    │ │
meilisync-meilisync-1    | │ │       null_bitmap = b'\x00'                                              │ │
meilisync-meilisync-1    | │ │ null_bitmap_index = 1                                                    │ │
meilisync-meilisync-1    | │ │              self = <asyncmy.replication.row_events.WriteRowsEvent       │ │
meilisync-meilisync-1    | │ │                     object at 0x40177a5070>                              │ │
meilisync-meilisync-1    | │ │          unsigned = False                                                │ │
meilisync-meilisync-1    | │ │            values = {'id': 101}                                          │ │
meilisync-meilisync-1    | │ ╰──────────────────────────────────────────────────────────────────────────╯ │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ /usr/local/lib/python3.9/site-packages/asyncmy/replication/row_events.py:251 │
meilisync-meilisync-1    | │ in __read_string                                                             │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │   248 │   │   string = self.packet.read_length_coded_pascal_string(size)     │
meilisync-meilisync-1    | │   249 │   │   if column.character_set_name is not None:                      │
meilisync-meilisync-1    | │   250 │   │   │   encoding = self.charset_to_encoding(column.character_set_n │
meilisync-meilisync-1    | │ ❱ 251 │   │   │   string = string.decode(encoding)                           │
meilisync-meilisync-1    | │   252 │   │   return string                                                  │
meilisync-meilisync-1    | │   253 │                                                                      │
meilisync-meilisync-1    | │   254 │   def __read_bit(self, column):                                      │
meilisync-meilisync-1    | │                                                                              │
meilisync-meilisync-1    | │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
meilisync-meilisync-1    | │ │   column = <asyncmy.replication.column.Column object at 0x400676ffa0>    │ │
meilisync-meilisync-1    | │ │ encoding = 'utf8mb3'                                                     │ │
meilisync-meilisync-1    | │ │     self = <asyncmy.replication.row_events.WriteRowsEvent object at      │ │
meilisync-meilisync-1    | │ │            0x40177a5070>                                                 │ │
meilisync-meilisync-1    | │ │     size = 1                                                             │ │
meilisync-meilisync-1    | │ │   string = b'Bruno'                                                      │ │
meilisync-meilisync-1    | │ ╰──────────────────────────────────────────────────────────────────────────╯ │
meilisync-meilisync-1    | ╰──────────────────────────────────────────────────────────────────────────────╯
meilisync-meilisync-1    | LookupError: unknown encoding: utf8mb3
meilisync-meilisync-1 exited with code 1
brunoocasali commented 1 year ago

After receiving this issue, I've configured my database, tables, and columns to utf8mb4_unicode_ci. Since this database was just for testing, I wonder if this issue is real.

I'll close the issue now.