блок в binLogStreamReader при использовании цикла for-in - PullRequest
0 голосов
/ 24 мая 2019

когда я использую онлайн-сервер mysql, запустите этот код

 for binlogevent in self.stream:
                binlogevent.dump()

Он заблокирует цикл for. Когда я сделаю Ctrl + C, он покажет эту ошибку, вы можете увидеть, где он блокирует

  File "test_binlog.py", line 126, in main
    for binlogevent in self.stream:
  File "/usr/lib/python2.7/site-packages/pymysqlreplication/binlogstream.py", line 413, in fetchone
    pkt = self._stream_connection._read_packet()
  File "/usr/lib64/python2.7/site-packages/pymysql/connections.py", line 657, in _read_packet
    packet_header = self._read_bytes(4)
  File "/usr/lib64/python2.7/site-packages/pymysql/connections.py", line 691, in _read_bytes
    data = self._rfile.read(num_bytes)
  File "/usr/lib64/python2.7/site-packages/pymysql/_socketio.py", line 59, in readinto
    return self._sock.recv_into(b)

вот настройка BinLogStreamReader

self.stream=BinLogStreamReader(connection_settings=mysql_settings, server_id=187, blocking=True,
                                         only_schemas=[MSYQL_DB_MAGIC], only_tables=self.play_tables,
                                         only_events=[DeleteRowsEvent, WriteRowsEvent, UpdateRowsEvent])

Я знаю, что это может быть неправильно в настройке mysql, потому что я запускаю этот код в тестовом env с другим mysql, все в порядке.

Но в онлайн-MySQL обязательно откройте binlog.И таблица и схема, безусловно, существуют.и запустите некоторый код show mysql binlog setting, он покажет такое сообщение

('exec ', 'show binary logs;')
================data============================
{u'Log_name': u'mysql-bin.000350', u'File_size': 20707324}
================data============================
{u'Log_name': u'mysql-bin.000351', u'File_size': 9753176}
================data============================
{u'Log_name': u'mysql-bin.000352', u'File_size': 5874922}
================data============================
{u'Log_name': u'mysql-bin.000353', u'File_size': 10822235}

('exec ', "show variables like 'binlog_format'")
================data============================
{u'Value': u'ROW', u'Variable_name': u'binlog_format'}

('exec ', "show variables like '%log_bin%'")
================data============================
{u'Value': u'ON', u'Variable_name': u'log_bin'}
================data============================
{u'Value': u'', u'Variable_name': u'log_bin_basename'}
================data============================
{u'Value': u'', u'Variable_name': u'log_bin_index'}
================data============================
{u'Value': u'ON', u'Variable_name': u'log_bin_trust_function_creators'}
================data============================
{u'Value': u'ON', u'Variable_name': u'log_bin_use_v1_row_events'}
================data============================
{u'Value': u'OFF', u'Variable_name': u'rocksdb_enable_log_binlog_info'}
================data============================
{u'Value': u'ON', u'Variable_name': u'sql_log_bin'}

Я понятия не имею, что делает это возможным. Поэтому я пишу это для справки.

Спасибо.

...