Centos7實(shí)現(xiàn)MySQL基于日志還原數(shù)據(jù)的示例代碼
簡(jiǎn)介
Binlog日志,即二進(jìn)制日志文件,用于記錄用戶對(duì)數(shù)據(jù)庫(kù)操作的SQL語(yǔ)句信息,當(dāng)發(fā)生數(shù)據(jù)誤刪除的時(shí)候我們可以通過(guò)binlog日志來(lái)還原已經(jīng)刪除的數(shù)據(jù),還原數(shù)據(jù)的方法分為傳統(tǒng)二進(jìn)制文件還原數(shù)據(jù)和基于GTID的二進(jìn)制文件還原數(shù)據(jù)
前期準(zhǔn)備
準(zhǔn)備一臺(tái)Centos7虛擬機(jī),關(guān)閉防火墻和selinux,配置IP地址,同步系統(tǒng)時(shí)間,安裝MySQL數(shù)據(jù)庫(kù)
傳統(tǒng)二進(jìn)制日志還原數(shù)據(jù)
修改配置文件
[root@localhost ~]# vi /etc/my.cnf server-id=1 log-bin=binlog #重啟數(shù)據(jù)庫(kù)服務(wù) [root@localhost ~]# systemctl restart mysqld
操作數(shù)據(jù)庫(kù)
mysql> create database mydb charset utf8mb4; mysql> use mydb; mysql> create table test(id int)engine=innodb charset=utf8mb4; mysql> insert into test values(1); mysql> insert into test values(2); mysql> insert into test values(3); mysql> insert into test values(4); mysql> commit; mysql> update test set id=10 where id=4; mysql> commit; mysql> select * from test; +------+ | id | +------+ | 1 | | 2 | | 3 | | 10 | +------+ 4 rows in set (0.00 sec) mysql> drop database mydb;
查看二進(jìn)制日志信息
mysql> show master status\G;
*************************** 1. row ***************************
File: binlog.000001
Position: 1960
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
#查找創(chuàng)庫(kù)和刪庫(kù)的點(diǎn),為219和1868
mysql> show binlog events in 'binlog.000001';
+---------------+------+----------------+-----------+-------------+--------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------+------+----------------+-----------+-------------+--------------------------------------------------------------------+
| binlog.000001 | 219 | Query | 1 | 329 | create database mydb charset utf8mb4 |
| binlog.000001 | 1868 | Query | 1 | 1960 | drop database mydb |
+---------------+------+----------------+-----------+-------------+--------------------------------------------------------------------+
另存為二進(jìn)制日志信息
[root@localhost ~]# mysqlbinlog --start-position=219 --stop-position=1868 /var/lib/mysql/binlog.000001 > /tmp/binlog.sql
恢復(fù)數(shù)據(jù)
#臨時(shí)關(guān)閉二進(jìn)制日志記錄以免重復(fù)記錄 mysql> set sql_log_bin=0; #恢復(fù)數(shù)據(jù) mysql> source /tmp/binlog.sql #重啟二進(jìn)制日志記錄 mysql> set sql_log_bin=1;
查看數(shù)據(jù)恢復(fù)情況
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mydb | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec) mysql> use mydb; Database changed mysql> select * from test; +------+ | id | +------+ | 1 | | 2 | | 3 | | 10 | +------+ 4 rows in set (0.00 sec)、
基于GTID二進(jìn)制日志還原數(shù)據(jù)
修改配置文件
[root@localhost ~]# vi /etc/my.cnf server-id=1 log-bin=binlog gtid_mode=ON enforce_gtid_consistency=true log_slave_updates=1 #重啟數(shù)據(jù)庫(kù)服務(wù) [root@localhost ~]# systemctl restart mysqld
操作數(shù)據(jù)庫(kù)
mysql> create database mydb1; mysql> use mydb1; Database changed mysql> create table t1(id int)engine=innodb charset=utf8mb4; mysql> insert into t1 values(1); mysql> insert into t1 values(2); mysql> insert into t1 values(3); mysql> insert into t1 values(11); mysql> insert into t1 values(12); mysql> commit; mysql> select * from t1; +------+ | id | +------+ | 1 | | 2 | | 3 | | 11 | | 12 | +------+ 5 rows in set (0.00 sec) mysql> drop database mydb1;
查看二進(jìn)制日志信息
mysql> show master status\G;
*************************** 1. row ***************************
File: binlog.000003
Position: 1944
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set: 51d3db57-bf69-11ea-976c-000c2911a022:1-8
1 row in set (0.00 sec)
mysql> show binlog events in 'binlog.000003';
+---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+
| binlog.000003 | 154 | Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= '51d3db57-bf69-11ea-976c-000c2911a022:1' |
| binlog.000003 | 219 | Query | 1 | 316 | create database mydb1 |
| binlog.000003 | 1784 | Gtid | 1 | 1849 | SET @@SESSION.GTID_NEXT= '51d3db57-bf69-11ea-976c-000c2911a022:8' |
| binlog.000003 | 1849 | Query | 1 | 1944 | drop database mydb1 |
+---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+
另存為二進(jìn)制日志信息
#8號(hào)事務(wù)記錄為刪除數(shù)據(jù)庫(kù),因此只需恢復(fù)1-7號(hào)事務(wù)記錄即可 [root@localhost ~]# mysqlbinlog --skip-gtids --include-gtids='51d3db57-bf69-11ea-976c-000c2911a022:1-7' /var/lib/mysql/binlog.000003 > /tmp/gtid.sql
參數(shù)說(shuō)明:
--include-gtids:包含事務(wù)
--exclude-gtids:排除事務(wù)
--skip-gtids:跳過(guò)事務(wù)
恢復(fù)數(shù)據(jù)
mysql> set sql_log_bin=0; mysql> source /tmp/gtid.sql mysql> set sql_log_bin=1;
查看數(shù)據(jù)恢復(fù)情況
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mydb | | mydb1 | | mysql | | performance_schema | | sys | +--------------------+ 6 rows in set (0.00 sec) mysql> use mydb1; Database changed mysql> select * from t1; +------+ | id | +------+ | 1 | | 2 | | 3 | | 11 | | 12 | +------+ 5 rows in set (0.00 sec)
到此這篇關(guān)于Centos7實(shí)現(xiàn)MySQL基于日志還原數(shù)據(jù)的示例代碼的文章就介紹到這了,更多相關(guān)Centos7 MySQL日志還原數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Apache環(huán)境下配置多個(gè)ssl證書搭建多個(gè)站點(diǎn)的方法
這篇文章主要介紹了Apache環(huán)境下配置多個(gè)ssl證書搭建多個(gè)站點(diǎn)的方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07
Linux系統(tǒng)中sudo命令的十個(gè)技巧總結(jié)
Linux 下使用Sudo 命令,可以讓普通用戶也能執(zhí)行一些或者全部的root命令,下面這篇文章主要給大家介紹了關(guān)于Linux系統(tǒng)中sudo命令的十個(gè)技巧,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2018-04-04
在 Ubuntu Linux 上安裝 Oracle Java 14的方法
最近,Oracle 宣布 Java 14(或 Oracle JDK 14)公開可用。如果你想進(jìn)行最新的實(shí)驗(yàn)或者開發(fā)的話,那么你可以試試在 Linux 系統(tǒng)上安裝 Java 14,感興趣的朋友可以參考下本文2020-04-04
Linux設(shè)置Service服務(wù)開機(jī)自啟的教程指南
在 Linux 系統(tǒng)中,確保關(guān)鍵服務(wù)能夠在系統(tǒng)啟動(dòng)時(shí)自動(dòng)運(yùn)行是一項(xiàng)非常重要的任務(wù),尤其是在服務(wù)器環(huán)境中,我們希望一些服務(wù)能夠在系統(tǒng)每次啟動(dòng)后自動(dòng)啟動(dòng),從而確保業(yè)務(wù)的持續(xù)運(yùn)行,本指南將詳細(xì)介紹如何在Linux系統(tǒng)中設(shè)置Service服務(wù)開機(jī)自啟,需要的朋友可以參考下2024-10-10
linux使用scp實(shí)現(xiàn)服務(wù)器A向服務(wù)器B傳輸文件
這篇文章主要介紹了linux使用scp實(shí)現(xiàn)服務(wù)器A向服務(wù)器B傳輸文件的相關(guān)資料,需要的朋友可以參考下2016-04-04
Linux下查看binlog文件創(chuàng)建時(shí)間的命令
這篇文章主要介紹了Linux下查看binlog文件創(chuàng)建時(shí)間的命令,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05
Apache+Weblogic實(shí)現(xiàn)URL轉(zhuǎn)發(fā)
由于項(xiàng)目部署在Weblogic應(yīng)用服務(wù)器上,用戶訪問(wèn)的時(shí)候需要加端口號(hào),這就非常的不友好了,所以又架設(shè)了Apache,使用URL轉(zhuǎn)發(fā)方式來(lái)處理這個(gè)問(wèn)題,本文是記錄一下方法,給需要的小伙伴參考下2014-11-11

