Rumah >pangkalan data >tutorial mysql >Cara menggunakan mysql binlog untuk memulihkan data
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 ('1','website', 'https://www.liuhaolin.com'); EOT
Pada masa ini, kami secara tidak sengaja memadamkan pangkalan data test_liuhaolin_com
rreeeSekarang 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
kedudukan permulaan data yang perlu dipulihkan
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
binlog
Anda boleh melihat bahawa kedudukan permulaan ialah 233
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.
rreeeeAtas ialah kandungan terperinci Cara menggunakan mysql binlog untuk memulihkan data. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!