Heim > Datenbank > MySQL-Tutorial > Hauptteil

So zeigen Sie schnell die ursprüngliche SQL-Anweisung in MySQL an

藏色散人
Freigeben: 2021-11-10 17:11:53
nach vorne
2409 Leute haben es durchsucht

Hintergrund

Bei der kürzlich durchgeführten Recherche zu einem Legacy-Projekt haben wir beschlossen, die im Binlog aufgezeichneten SQL-Anweisungen einzusehen, um festzustellen, welche Datenbanktabellen für einen bestimmten Geschäftsvorgang geändert wurden. Ich wusste immer, dass MySQL über viele Binlog-Analysetools verfügt, aber ich habe sie noch nie verwendet. Heute werde ich den Prozess aufzeichnen.

Dieses Mal haben wir zusätzlich zum offiziellen Parsing-Tool auch ein Open-Source-Tool eines Drittanbieters verwendet.

Vorbereitung

Binlog aktivieren

Stellen Sie zunächst sicher, dass auf dem MySQL-Server Binlog aktiviert ist. Dies ist in der Datei my.cnf konfiguriert.

cat /etc/my.cnf

# 取消log_bin的注释即可,这里可以提供一个具体的路径,否则就使用默认地址
log_bin
# 高版本MySQL需要server-id这个参数,提供一个集群中不重复的id值即可
server-id=1
# 重新启动服务器
service mysqld restart
Nach dem Login kopieren

Zeichnen Sie die aktuelle Protokollposition auf

Um spätere Tests zu erleichtern, zeichnen wir zunächst einige relevante Informationen des MySQL-Protokolls auf.

-- Bestätigen Sie, dass das Protokoll korrekt aktiviert wurde. Sie können hier auch den spezifischen Pfad der Protokolldatei anzeigen

mysql> show variables like '%log_bin%';
+---------------------------------+---------------------------------+
| Variable_name                   | Value                           |
+---------------------------------+---------------------------------+
| log_bin                         | ON                              |
| log_bin_basename                | /var/lib/mysql/mysqld-bin       |
| log_bin_index                   | /var/lib/mysql/mysqld-bin.index |
| log_bin_trust_function_creators | OFF                             |
| log_bin_use_v1_row_events       | OFF                             |
| sql_log_bin                     | ON                              |
+---------------------------------+---------------------------------+
Nach dem Login kopieren

-- Notieren Sie sich den Dateinamen und die Offset-Position des aktuellen Protokolls, damit Sie es währenddessen genau lokalisieren können Anschließende Protokollanzeige

mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| mysqld-bin.000001 |     2425 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
Nach dem Login kopieren

-- Sie können das Protokoll auch anzeigen, indem Sie die Startzeit angeben, also auch die aktuelle Zeit aufzeichnen

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2018-08-02 09:59:43 |
+---------------------+
Nach dem Login kopieren

DDL ausführen

Führen Sie schließlich die folgenden Anweisungen in der Testbibliothek aus Stellen Sie diesen Teil der Anweisungen wieder her, indem Sie das Binlog anzeigen.

-- 建表
create table aaa(id int, title varchar(100));
-- 插入初始化数据
insert into aaa(id, title) values (1, '测试1');
insert into aaa(id, title) values (2, '测试2');
insert into aaa(id, title) values (3, '测试3');
-- 更新/删除
update aaa set title='修改' where id=2;
delete from aaa where id=1;
Nach dem Login kopieren

Binlog anzeigen

Offizielles Tool mysqlbinlog

Das bereitgestellte offizielle Parsing-Tool ist sehr einfach zu verwenden, aber die Lesbarkeit der analysierten Ergebnisse ist nicht gut. Wir haben während des Aufrufs den Parameter no-defaults verwendet, um Fehler durch unbekannte Variablen „default-character-set=utf8“ zu vermeiden.

mysqlbinlog --no-defaults  /var/lib/mysql/mysqld-bin.000001 --start-position=2425
Nach dem Login kopieren

Die Anzeigeergebnisse von mysqlbinlog sind nicht lesbar. Hier ist ein Auszug. Sie können sehen, dass zusätzlich zu den von uns ausgeführten DDL-Anweisungen auch andere Kontextinformationen aufgezeichnet werden.

# at 2425
#180802 10:05:32 server id 1  end_log_pos 2553 CRC32 0x77e80f22 Querythread_id=70exec_time=0error_code=0
use `aaaa`/*!*/;
SET TIMESTAMP=1533175532/*!*/;
SET @@session.pseudo_thread_id=70/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1075838976/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
-- 建表
create table aaa(id int, title varchar(100))
/*!*/;
# at 2553
#180802 10:05:32 server id 1  end_log_pos 2632 CRC32 0x2bcb9bbd Querythread_id=70exec_time=0error_code=0
SET TIMESTAMP=1533175532/*!*/;
BEGIN
/*!*/;
# at 2632
#180802 10:05:32 server id 1  end_log_pos 2779 CRC32 0x8414086d Querythread_id=70exec_time=0error_code=0
SET TIMESTAMP=1533175532/*!*/;
-- 插入初始化数据
insert into aaa(id, title) values (1, '测试1')
/*!*/;
Nach dem Login kopieren

Drittanbieter-Tools binlog2sql

Es gibt viele Open-Source-Tools für binlog. Nach der Suche bei Google haben wir binlog2sql gefunden. Es bietet mehr Funktionen als das offizielle. Je nach Option können Sie Original-SQL, Rollback-SQL, INSERT-SQL mit entferntem Primärschlüssel usw. erhalten. Dieses Mal verwenden wir es nur, um die ausgeführte DDL anzuzeigen. Für eine erweiterte Verwendung lesen Sie bitte die offizielle chinesische Dokumentation.

Dieses Tool wurde auf Basis von Python (2.7+, 3.4+) entwickelt. Installieren Sie daher zuerst die relevanten Abhängigkeiten gemäß dem Handbuch. Wenn keine Standortinformationen angegeben werden, werden alle Informationen von Anfang an angezeigt.

git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
pip install -r requirements.txt
Nach dem Login kopieren

Die Anzeigeergebnisse dieses Tools sind sehr einfach, wie folgt:

# 使用偏移位置
python binlog2sql.py -h127.0.0.1 -P3306 -uroot -p'root' --start-file='mysqld-bin.000001' --start-pos=2425 -d aaaa
# 同样功能,使用时间戳
python binlog2sql.py -h127.0.0.1 -P3306 -uroot -p'root' --start-file='mysqld-bin.000001' --start-datetime='2018-08-02 10:00:00' -d aaaa
Nach dem Login kopieren

Empfehlen Sie das Lernen: „

MySQL-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo zeigen Sie schnell die ursprüngliche SQL-Anweisung in MySQL an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:juejin.im
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!