Rumah  >  Artikel  >  pangkalan data  >  Cara menggunakan mysql binlog untuk memulihkan data

Cara menggunakan mysql binlog untuk memulihkan data

PHPz
PHPzke hadapan
2023-05-31 08:40:304845semak imbas

Sebelum menggunakan mysql binlog untuk pemulihan data, binlog mesti didayakan terlebih dahulu. Sediakan persekitaran ujian di sini untuk mengetahui cara menggunakan mysql binlog untuk memulihkan pangkalan data. Prinsipnya agak mudah. ​​Binlog akan menyimpan data yang diubah dalam mysql Contohnya, jika anda mencipta pangkalan data dan menulis beberapa data, ini akan disimpan dalam binlog mysql.

Apabila anda perlu pulih, cari dua kedudukan: kedudukan permulaan dan kedudukan penamat. Separuh daripada kedudukan akhir ialah kedudukan sebelum data dimusnahkan atau dipadamkan. Mysql 8 telah didayakan secara lalai

mysql> show variables like '%log_bin%';
+---------------------------------+--------------------------+
| Variable_name                   | Value                    |
+---------------------------------+--------------------------+
| log_bin                         | ON                       |
| log_bin_basename                | /data/mysql/binlog       |
| log_bin_index                   | /data/mysql/binlog.index |
| log_bin_trust_function_creators | OFF                      |
| log_bin_use_v1_row_events       | OFF                      |
| sql_log_bin                     | ON                       |
+---------------------------------+--------------------------+

Anda boleh melihat bahawa log_bin telah didayakan Pada masa yang sama, anda boleh melihat bahawa lokasi storan berada dalam direktori /daba/mysql binlog

ls /data/mysql/binlog.*
/data/mysql/binlog.000143  /data/mysql/binlog.000144  /data/mysql/binlog.000145  /data/mysql/binlog.000146  /data/mysql/binlog.index

Anda dapat melihat bahawa terdapat beberapa fail log A binlog, kerana ini adalah pangkalan data ujian (ada maklumat sejarah, data sebelumnya tidak berguna), untuk memudahkan ujian, operasi set semula dilakukan. secara langsung. Berhati-hati apabila memadam semua fail binlog Jika ia adalah persekitaran pengeluaran, nilai data tidak boleh diukur.

show master logs;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000143 |       156 | No        |
| binlog.000144 |       200 | No        |
| binlog.000145 |       156 | No        |
| binlog.000146 |       156 | No        |
+---------------+-----------+-----------+
4 rows in set (0.01 sec)

mysql> reset master;
Query OK, 0 rows affected (0.02 sec)

mysql> show master logs;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000001 |       156 | No        |
+---------------+-----------+-----------+
1 row in set (0.00 sec)


ls /data/mysql/binlog.*
/data/mysql/binlog.000001  /data/mysql/binlog.index

Selepas melakukan penetapan semula (induk semula), anda boleh melihat bahawa fail binlog sebelumnya telah dipadamkan dan fail binlog baharu dijana.

Anda boleh menyemak kandungan fail ini

$mysqlbinlog binlog.000001
# The proper term is pseudo_replica_mode, but we use this compatibility alias
# to make the statement usable on server versions 8.0.24 and older.
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
...

Pada masa ini, kami menambah beberapa data

mysql <<EOT
create database test_liuhaolin_com;
select now();
EOT

mysql <<EOT
use test_liuhaolin_com;

create table if not exists test(
	\`id\` int unsigned not null auto_increment primary key,
	\`key\` varchar(100),
	\`val\` varchar(255)
) engine=myisam charset=utf8mb4;
EOT

mysql <<EOT
use test_liuhaolin_com;
insert into test  values (&#39;1&#39;,&#39;website&#39;, &#39;https://www.liuhaolin.com&#39;);
EOT

Pada masa ini, kami secara tidak sengaja memadamkan pangkalan data test_liuhaolin_com

rreee

Sekarang kita perlu menyelesaikan masalah praktikal, bagaimana untuk memulihkan pangkalan data ini

Pertama sekali, untuk mengelakkan gangguan, laksanakan log siram untuk menjana fail binlog baharu.

mysql> drop database test_liuhaolin_com;
Query OK, 1 row affected (0.09 sec)

Untuk memulihkan data, anda mesti mencari tempat data telah dipadamkan dahulu.

mysql> show master logs;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000001 |      1594 | No        |
+---------------+-----------+-----------+
1 row in set (0.00 sec)

mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 |     1594 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> flush logs;
Query OK, 0 rows affected (0.08 sec)

mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000002 |      156 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

Anda boleh melihat bahawa terdapat kenyataan padam pada baris 113. Akhir sekali, anda boleh mencari dua tempat

  1. kedudukan permulaan data yang perlu dipulihkan

  2. kedudukan akhir data yang memerlukan untuk dipulihkan

Kedudukan permulaan di sini ialah tempat pangkalan data dicipta, dan kedudukan penamat ialah tempat pangkalan data dipadamkan.

mysqlbinlog binlog.000001 | grep -n  "drop database"
113:drop database test_liuhaolin_com

Anda boleh mengetahui kedudukan permulaan dan penamat dalam fail tmp.sql

Cara menggunakan mysql binlog untuk memulihkan data

binlog

Anda boleh melihat bahawa kedudukan permulaan ialah 233

Cara menggunakan mysql binlog untuk memulihkan data

binlog

Anda boleh melihat bahawa kedudukan akhir ialah 1371, jadi lakukan pemulihan data.

mysqlbinlog --set-charset=utf8  binlog.000001 > tmp.sql

Sebagai pengesahan, anda boleh menyemak sama ada pangkalan data wujud sebelum pelaksanaan.

rreeee

Atas ialah kandungan terperinci Cara menggunakan mysql binlog untuk memulihkan data. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam