le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Il mio SQL Bin Log
(Binario Tronco d'albero, log binario) è un file di log del database MySQL che registra tutte le modifiche apportate al databaseDML
operazioni (come INSERT, UPDATE, DELETE, ecc.), maEsclude SELECTAspettareDQL
Operazione di sola lettura. Bin Log è uno strumento importante per MySQL per ottenere replica, ripristino e controllo. Per i dettagli, vedere:DDL, DML, DQL e DCL in MySQL
Le funzioni principali di Bin Log includono: replica master-slave, ripristino dei dati, backup dei dati e sottoscrizione dei dati
Scenari applicativi | concetto | Caso |
---|---|---|
replica master-slave | La libreria master invia i record dell'operazione di aggiornamento nel binlog alla libreria slave e la libreria slave legge il binlog ed esegue istruzioni SQL. | Piattaforma di e-commerce: il database principale registra le operazioni degli ordini su binlog e sincronizza i dati degli ordini dal database per mantenere la coerenza di tutti i nodi. |
Recupero dati | Utilizzare i record binlog per eseguire in modo inverso le istruzioni SQL per recuperare i dati | Sistema finanziario: gli amministratori recuperano i record delle transazioni cancellati accidentalmente analizzando binlog per garantire l'integrità dei dati ed evitare perdite finanziarie. |
backup dei dati | Binlog viene utilizzato per il backup incrementale, risparmiando tempo di backup e costi di spazio | Piattaforma di social media: esegui regolarmente il backup dei file binlog ogni giorno per ripristinare rapidamente lo stato più recente senza dover eseguire il backup completo dell'intero database. |
Abbonamento dati | Utilizza binlog per monitorare le operazioni di aggiornamento del database in tempo reale | Analisi dei dati in tempo reale delle aziende di vendita al dettaglio: Analizzando binlog, l'operazione di inserimento dei record di vendita viene catturata e trasferita alla piattaforma di analisi dei dati in tempo reale per l'analisi dell'andamento delle vendite. |
Attraverso questi casi specifici, possiamo vedere più chiaramente l'importanza e la diversità del binlog MySQL nelle applicazioni pratiche. L'uso corretto della funzione binlog può migliorare notevolmente l'affidabilità del sistema, la capacità di ripristino e la velocità di risposta aziendale.
Quando il server MySQL abilita la funzione Bin Log, tutte le operazioni di modifica al database verrannoregistrazione dell'evento nel file di registro del contenitore. Questi eventi vengono memorizzati in ordine di esecuzione, formando una sequenza di log delle operazioni continua. Questi eventi possono essere riprodotti per ricreare lo stato del database quando i dati devono essere ripristinati o copiati.
MySQL Bin Log ha tre formati di record:
Di seguito sono riportati i tre formati di record di MySQL Bin Log organizzati in forma di tabella:
formato di registrazione | descrivere | vantaggio | discordanza |
---|---|---|---|
Registrazione basata sulle istruzioni (SBL) | Registra l'istruzione SQL eseguita | Il volume del log è piccolo e adatto a semplici operazioni SQL. | In alcuni casi la coerenza dei dati potrebbe non essere garantita, come nel caso di funzioni non deterministiche (come ADESSO()) |
Registrazione basata su riga (RBL) | Registrare le modifiche specifiche di ciascuna riga di dati | Più accurato, adatto per operazioni complesse e copie | Volume di registro di grandi dimensioni, disco di grandi dimensioni e sovraccarico di rete |
Registrazione mista (ML) | Passa dalla modalità Dichiarazione a quella Riga in base a circostanze specifiche. | Tenendo conto dei vantaggi di entrambi | Relativamente complesso da implementare e gestire |
mysql> show variables like "%log_bin%";
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin | OFF |
| log_bin_basename | |
| log_bin_index | |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+-------+
6 rows in set, 1 warning (0.00 sec)
Per abilitare Bin Log, è necessario configurare il file di configurazione MySQL (solitamentemy.cnf
Omy.ini
) ed eseguire la seguente configurazione:
[mysqld]
log-bin=mysql-bin
server-id=1
Dopo aver modificato la configurazione, riavvia mysql.strumentoSHOW VARIABLES LIKE 'log_bin';
Il valore Valore è ON.
mysql> show variables like "%log_bin%";
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 2
Current database: *** NONE ***
+---------------------------------+--------------------------------------------------------------------------+
| Variable_name | Value |
+---------------------------------+--------------------------------------------------------------------------+
| log_bin | ON |
| log_bin_basename | C:UsershiszmMySQL5.7.26databinlog |
| log_bin_index | C:UsershiszmMySQL5.7.26databinlog.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+--------------------------------------------------------------------------+
6 rows in set, 1 warning (0.01 sec)
I parametri comuni di configurazione del registro collocazione includono:
log_bin
: Abilita registro raccoglitore.server_id
: identificatore univoco del server, utilizzato per la replica.binlog_format
: imposta il formato del registro contenitore (STATEMENT, ROW, MIXED).expire_logs_days
: imposta il numero di giorni per la scadenza automatica e l'eliminazione dei file di registro del contenitore.max_binlog_size
: imposta la dimensione massima di un singolo file di registro del contenitore.Comandi comuni per la gestione dei file di registro bin:
Visualizza l'elenco dei file di registro del contenitore:
SHOW BINARY LOGS;
Visualizza la dimensione del file di registro del contenitore:
SHOW MASTER STATUS;
Elimina i vecchi file di registro del contenitore:
PURGE BINARY LOGS TO 'mysql-bin.000010';
O:
PURGE BINARY LOGS BEFORE '2024-01-01 00:00:00';
-- 创建一个名为 'simple_table' 的表
CREATE TABLE `simple_table` (
`item_id` int(11) NOT NULL, -- 项目编号
`value` int(11) DEFAULT NULL, -- 值
`last_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 最后更新时间
PRIMARY KEY (`item_id`), -- 设置项目编号为主键
KEY `value_index` (`value`), -- 为值字段创建索引
KEY `update_time_index` (`last_updated`) -- 为最后更新时间字段创建索引
) ENGINE=InnoDB; -- 使用InnoDB存储引擎
-- 插入数据,将日期设置为当前日期
insert into `simple_table` values(1, 1, '2024-07-07');
insert into `simple_table` values(2, 2, '2024-07-07');
insert into `simple_table` values(3, 3, '2024-07-07');
insert into `simple_table` values(4, 4, '2024-07-07');
insert into `simple_table` values(5, 5, '2024-07-07');
Utilizza lo strumento mysqlbinlog per visualizzare il contenuto di Bin Log:
mysql> show binary logs;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 4
Current database: *** NONE ***
+---------------+-----------+
| Log_name | File_size |
+---------------+-----------+
| binlog.000001 | 2411 |
+---------------+-----------+
1 row in set (0.00 sec)
Se lo apri direttamente, sarà confuso.
mysql> show binlog events in 'binlog.000001' from 0 limit 0,4G;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 6
Current database: *** NONE ***
*************************** 1. row ***************************
Log_name: binlog.000001
Pos: 4
Event_type: Format_desc
Server_id: 1
End_log_pos: 123
Info: Server ver: 5.7.26-log, Binlog ver: 4
*************************** 2. row ***************************
Log_name: binlog.000001
Pos: 123
Event_type: Previous_gtids
Server_id: 1
End_log_pos: 154
Info:
*************************** 3. row ***************************
Log_name: binlog.000001
Pos: 154
Event_type: Anonymous_Gtid
Server_id: 1
End_log_pos: 219
Info: SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
*************************** 4. row ***************************
Log_name: binlog.000001
Pos: 219
Event_type: Query
Server_id: 1
End_log_pos: 765
Info: use `d`; -- 创建一个名为 'simple_table' 的表
CREATE TABLE `simple_table` (
`item_id` int(11) NOT NULL, -- 项目编号
`value` int(11) DEFAULT NULL, -- 值
`last_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 最后更新时间
PRIMARY KEY (`item_id`), -- 设置项目编号为主键
KEY `value_index` (`value`), -- 为值字段创建索引
KEY `update_time_index` (`last_updated`) -- 为最后更新时间字段创建索引
) ENGINE=InnoDB
4 rows in set (0.01 sec)
ERROR:
No query specified
mysqlbinlog è uno strumento da riga di comando utilizzato per analizzare i file Bin Log. Le opzioni comuni includono:
--start-datetime
: Specificare l'ora di inizio dell'analisi.--stop-datetime
: Specificare l'ora in cui termina l'analisi.--start-position
: Specificare la posizione in cui inizia l'analisi.--stop-position
: Specificare la posizione in cui termina l'analisi.Ad esempio, per visualizzare il registro collocazione per un periodo di tempo specifico:
mysqlbinlog --start-datetime="2024-07-01 00:00:00" --stop-datetime="2024-07-01 12:00:00" binlog.000001
Gli eventi Bin Log possono essere riprodotti nel server MySQL per il ripristino dei dati:
mysqlbin logbinlog.000001 | mysql -u root -p
Il principio di base della replica master-slave di MySQL è che il database master registra il Bin Log e il database slave legge e riproduce questi log per ottenere la sincronizzazione dei dati. I passaggi specifici sono i seguenti:
Configura la libreria principale:
[mysqld]
log-bin=mysql-bin
server-id=1
Configura la libreria slave:
[mysqld]
server-id=2
relay-log=relay-bin
Creare un utente di replica nel database primario:
CREATE USER 'replica'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
Configurare la replica sul database slave:
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='replica',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='binlog.000001',
MASTER_LOG_POS=0;
START SLAVE;
Controlla lo stato della replica:
SHOW SLAVE STATUSG
Lo stato della replica può essere monitorato con il seguente comando:
SHOW SLAVE STATUSG
Spiegazioni comuni dei campi di stato:
Slave_IO_Running
: stato del thread IO.Slave_SQL_Running
:stato del thread SQL.Seconds_Behind_Master
: il tempo in cui la libreria slave resta indietro rispetto alla libreria master.Backup incrementale significa eseguire il backup di tutte le modifiche dall'ultimo backup completo o dall'ultimo backup incrementale. Il backup incrementale può essere ottenuto utilizzando Bin Log.
Esegui un backup completo:
mysqldump --all-databases --master-data=2 > full_backup.sql
Registra la posizione corrente del registro del contenitore:
Cerca le seguenti righe nel file di backup completo:
-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=12345;
Registro del contenitore di backup:
mysqlbinlog --start-position=12345 binlog.000001 > incremental_backup.sql
Ripristina il backup completo:
mysql < full_backup.sql
Applicare il backup incrementale:
mysql < incremental_backup.sql
Il mio SQL Bin Log
È uno strumento potente ampiamente utilizzato in scenari come il ripristino, la replica e il controllo dei dati.Configurando e utilizzando correttamenteBin Log
, che può migliorare notevolmente l'affidabilità e la disponibilità del database MySQL. Nelle applicazioni pratiche, è fondamentale per gli amministratori e gli sviluppatori di database padroneggiare le capacità di utilizzo e i metodi di ottimizzazione di Bin Log.