1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wwbjqcom-binlogAL

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

binlogAL (binlog analysis)

Используя время, потраченное на изучение Rust, были переработаны некоторые инструменты, ранее написанные на Python.

Функции:

  1. Можно напрямую выполнять SQL-команды из командной строки.
  2. Можно анализировать, фильтровать и статистически обрабатывать binlog.
  3. Можно инвертировать binlog для создания журнала отката.
  4. Можно извлекать данные из binlog в виде SQL-команд.

Использование: Можно использовать ключ --help для просмотра всех параметров. В релизной версии можно получить исполняемый файл для Linux или скачать исходный код для самостоятельной компиляции.

Обязательные параметры:

  • user: имя пользователя MySQL;
  • password: пароль MySQL;
  • host: адрес и порт MySQL;
  • runtype: настройка режима работы инструмента. Все виды анализа данных используют структуру таблицы, поэтому необходимо подключиться к соответствующей базе данных для запуска.

Режим репликации (--runtype=repl):

  • gtid: использование gtid для регистрации и извлечения binlog, приоритет gtid выше, чем у position;
  • binlogfile: файл binlog, используемый для синхронизации с помощью postion;
  • position: информация о позиции;
  • threadid: используется для извлечения данных, созданных определённым thread_id;
  • greptbl: извлекает данные из одной или нескольких таблиц, формат см. в --help;
  • getsql: извлекает данные в виде SQL;
  • statiac: статистика размера каждой транзакции. Прямое извлечение binlog из MySQL поддерживает только информацию о таблицах и соединениях, ниже приведён пример использования gtid для регистрации:
mm:debug xxxxx$ ./mytest -uroot -proot -h 127.0.0.1:3306 --runtype repl --gtid '1886928a-ce21-11e9-bee2-50edb3ba887e:1-11' RotateLog { binlog_file: "bin.000001" }  
GtidEvent     gtid:1886928a-ce21-11e9-bee2-50edb3ba887e, gno_id:12, last_committed:2818, sequence_number:3072  
QueryEvent    thread_id:1511, database:xz_test, command:BEGIN  
TableMap      database_name:xz_test, table_name:t8  
ROW_VALUE  
 id: 1, id1: 3, a: b, b: 2, c: 0x36333633,XidEvent      xid:3089  
GtidEvent     gtid:1886928a-ce21-11e9-bee2-50edb3ba887e, gno_id:13, last_committed:3074, sequence_number:3328  
QueryEvent    thread_id:1519, database:xz_test, command:BEGIN  
TableMap      database_name:xz_test, table_name:t8  
ROW_VALUE  
 id: 1, id1: 4, a: bb, b: 2, c: 0x36333634,
XidEvent      xid:3114  
GtidEvent     gtid:1886928a-ce21-11e9-bee2-50edb3ba887e, gno_id:14, last_committed:3330, sequence_number:3584  
QueryEvent    thread_id:1511, database:xz_test, command:BEGIN  
TableMap      database_name:xz_test, table_name:t6  
ROW_VALUE  
 id: 1, a: a, b: 2, c: 1, d: 0x3742,e: abc, 
XidEvent      xid:3116

Пример использования режима репликации с указанием thread_id и greptbl для получения SQL:

mm:debug xxxxx$ ./mytest -uroot -proot -h 127.0.0.1:3306 --runtype repl --gtid '1886928a-ce21-11e9-bee2-50edb3ba887e:1-11' --threadid 1511 --greptbl '{"xz_test":["t8"]}' --getsql  
-- GTID: 1886928a-ce21-11e9-bee2-50edb3ba887e:12  
use xz_test;  
BEGIN;  
-- Insert Row Value  
INSERT INTO xz_test.t8(id,id1,a,b,c) VALUES(1,3,'b',2,0x36333633);  
COMMIT;

Чтение binlog-файла (--runtype=file):

  • file: указывает на файл binlog;
  • startposition: позиция, с которой начинается чтение;
  • stopposition: позиция остановки чтения;
  • startdatetime: диапазон времени для извлечения binlog, начало;
  • stopdatetime: конец диапазона времени;
  • getsql: извлекает данные в виде SQL;
  • threadid: извлекает данные, созданные определённым thread_id;
  • greptbl: извлекает данные определённых таблиц;
  • gtid: если этот режим включён, то извлекаются данные, связанные с gtid;
  • statiac: подсчитывает размер каждой транзакции. Конфигурацию параметров можно комбинировать различными способами, например, чтобы подсчитать информацию об определённой позиции, thread_id и таблице:
mm:debug xxxxx$ ./mytest -uroot -proot -h 127.0.0.1:3306 --runtype file --file 'bin.000001' --startposition 3636 --threadid 1511 --greptbl '{"xz_test":"all"}'  
从binlog文件提取数据  
GtidEvent     gtid:1886928a-ce21-11e9-bee2-50edb3ba887e, gno_id:12, last_committed:2818, sequence_number:3072  
QueryEvent    thread_id:1511, database:xz_test, command:BEGIN  
TableMap      database_name:xz_test, table_name:t8  
ROW_VALUE  
 id: 1, id1: 3, a: b, b: 2, c: 0x36333633,
XidEvent      xid:3089  
GtidEvent     gtid:1886928a-ce21-11e9-bee2-50edb3ba887e, gno_id:14, last_committed:3330, sequence_number:3584  
QueryEvent    thread_id:1511, database:xz_test, command:BEGIN  
TableMap      database_name:xz_test, table_name:t6  
ROW_VALUE  
 id: 1, a: a, b: 2, c: 1, d: 0x3742,e: abc, 
XidEvent      xid:3116

Откат:

  • Можно извлечь данные только из файлов binlog.
  • По умолчанию максимальный размер одного файла составляет 1 ГБ, но его можно настроить.
  • Создаёт транзакции в обратном порядке.
  • Данные можно восстановить с помощью MySQLbinlog или инструмента для извлечения SQL.
  • Все параметры конфигурации применимы.
  • Поддерживает версии 8.0 и ниже.

Как выполнить откат: Параметры можно комбинировать так же, как и при чтении из файла, например, для выполнения отката данных из предыдущего примера:

mm:debug xxxxx$ ./mytest -uroot -proot -h 127.0.0.1:3306 --runtype file --file 'bin.000001' --startposition 3636 --threadid 1511 --greptbl '{"xz_test":"all"}' --rollback  
从binlog文件提取数据  
failed to fill whole buffer  
mm:debug xxxxx$ ./mytest -uroot -proot -h 127.0.0.1:3306 --runtype file --file 'rollback-1.log' --getsql 
从binlog文件提取数据  
-- GTID:
``` 1886928a-ce21-11e9-bee2-50edb3ba887e:14  
    use xz_test;  
    BEGIN;  
    — Insert Row Value  
    INSERT INTO xz_test.t6(id, a, b, c, d, e) VALUES (1, 'a', 2, 1, 0x3742, 'abc');  
    COMMIT;  
    — GTID: 1886928a-ce21-11e9-bee2-50edb3ba887e:12  
    use xz_test;  
    BEGIN;  
    — Delete Row Value  
    DELETE FROM xz_test.t8 WHERE id=1 AND id1=3;  
    COMMIT;

Можно увидеть, что данные были преобразованы в соответствующие откатные операторы. Можно напрямую использовать mysqlbinlog для выполнения операций или напрямую выполнить извлечённый SQL. Если используется метод операции mysqlbinlog, то:

    bin/mysqlbinlog rollback-1.log --skip-gtids | bin/mysql -uroot -proot -h 127.0.0.1
## Выполнение оператора (--runtype=command):

Соединение с MySQL не использует открытый исходный код, а реализуется непосредственно через сокетное соединение для реализации протокола MySQL. Поэтому здесь был разработан режим выполнения оператора для проверки. Через параметр -c можно напрямую указать оператор SQL. Можно использовать -D для указания библиотеки по умолчанию. Если не указано, необходимо указать в SQL:

    ./mytest -uroot -proot -h 127.0.0.1:3306 --runtype command -D information_schema -c 'select * from tables'

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
GPL-2.0
Отмена

Обновления (2)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/wwbjqcom-binlogAL.git
git@api.gitlife.ru:oschina-mirror/wwbjqcom-binlogAL.git
oschina-mirror
wwbjqcom-binlogAL
wwbjqcom-binlogAL
master