最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql數據如何通過data文件恢復

 更新時間:2022年12月13日 09:28:26   作者:屁仙  
這篇文章主要介紹了mysql數據如何通過data文件恢復問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mysql數據通過data文件恢復

mysql磁盤文件被損壞,無法啟動,能看到data文件,在沒有備份的話如何復原?

情景1:知道數據庫中的表結構

1、先執(zhí)行表結構語句

2、解除綁定

alter table `表1` ?discard ?tablespace;
alter table `表2` ?discard ?tablespace;
......

此時當前數據庫下所有的.idb文件都會被刪除,也就是只剩下表結構,原表數據被刪除

3、導入 .idb文件現有數據庫

也就是添加表數據,不過,目前還沒有綁定

alter table `表1` ?import ? tablespace;
alter table `表2` ?import ? tablespace;
......

mysql數據恢復方法個人總結

mysql具有binlog功能,可以記錄對表進行過的操作、執(zhí)行過的sql語句;

以下主要是總結下binlog的開啟方法、使用方法等;

如果誤刪數據庫表中的某些數據、或者誤刪整個表、誤修改表結構等,就可以使用這個方法進行恢復。

步驟

1.如果想使用MySql數據恢復功能,首先需要修改Mysql配置文件,開啟binlog功能。(有些版本binlog默認是不開啟的,因此需要手動修改配置文件開啟)

(1)windows環(huán)境

配置文件名稱為my.ini,可以安裝軟件everything搜索這個文件。路徑樣例如下:

C:ProgramDataMySQLMySQL Server 5.7my.ini

(2)linux環(huán)境

配置文件名稱為my.cnf,可以使用find命令搜索文件所在位置:

sudo find / -name my.cnf

位置樣例如下:

/etc/my.cnf

2.找到配置文件后(my.ini/my.cnf),新增以下配置即可(當然先看看配置文件是否已配置了這行,不要重復了):

log-bin=mysqlbinlog
binlog-format=ROW

或者也可以指定binlog的位置(下方是linux下的路徑):

log-bin=/data/mysql/log/mysqlbinlog
binlog-format=ROW

注意,指定binlog在某個文件夾下時,必須自己創(chuàng)建文件夾,否則重啟mysql會報錯。

3.配置完成后,重啟mysql。

4.現在,對mysql的數據庫、表、數據等操作、執(zhí)行增刪改sql,都會記錄到binlog中。(搜索mysqlbinlog就可以找到這個日志文件)

5.進行測試,新建一個表binlog_test,列隨意,然后寫幾行數據,然后清空表數據。(準備使用binlog還原數據)

6.查看binlog的命令如下:

mysql> show binlog events; ? #只查看第一個binlog文件的內容
mysql> show binlog events in 'mysqlbinlog.000002';#查看指定binlog文件的內容
mysql> show binary logs; ?#獲取binlog文件列表
mysql> show master status; #查看當前正在寫入的binlog文件

7.首先看當前使用的是哪個binlog:

show master status;

本人執(zhí)行后,發(fā)現當前使用的binlog是:mysqlbinlog.000004

8.然后查看這個binlog的內容:

show binlog events in 'mysqlbinlog.000004';

執(zhí)行后,可以從查詢結果的Info列中,找到剛才創(chuàng)建binlog_test表的sql(對應的Event_type是Query);

可以看到剛才清空表數據的記錄行,Event_type是Delete_rows;

在上一些,可以看到創(chuàng)建表后、新增數據的Event_type是Write_rows;

9.分析這個binlog,我們的目標是還原剛才被刪除的數據,因此找到create table語句后的第一個Event_type是Query的行,它的Pos為460;

再找到Event_type是Delete_rows上面最接近的、Info中是COMMIT的行,它的Event_type是Xid,End_log_pos是1199。

(每一行的End_log_pos對應下一行的Pos)

10.現在找到了一個范圍,從460到1199之間的執(zhí)行日志,就是給表binlog_test增加數據的日志,因此只要重復執(zhí)行這之間的操作,就可以還原數據了。

11-1.windows下,找到mysqlbinlog.exe的位置;

linux下,找到mysqlbinlog的位置(這個是mysql的bin目錄下的一個可執(zhí)行文件);

然后執(zhí)行以下命令,即可還原數據:

mysqlbinlog --no-defaults --start-position=460 --stop-position=1199 "C:ProgramDataMySQLMySQL Sever 5.7Datamysqlbinlog.000004" -d test | mysql -uroot -proot test

其中,指定了開始位置為460,結束位置為1199,命令執(zhí)行后就會讀取日志中指定范圍內的命令并重新執(zhí)行。

其它命令的含義為:

  • "-d test"的意思是,指定數據庫為test(binlog_test表在test數據庫中)
  • "|"是管道符
  • "mysql -uroot -proot test"是mysql的賬號密碼、登陸目標數據庫
  • "-uroot":賬號是root
  • "-proot":密碼是root
  • "test":數據庫是test 

11-2.也可以把binlog日志中,指定范圍內的日志導出,然后自己執(zhí)行source命令還原數據,如下:

mysqlbinlog "C:ProgramDataMySQLMySQL Sever 5.7Datamysqlbinlog.000004" -d test  --skip-gtids  --start-position=460 --stop-position=1199 > test.sql

執(zhí)行這個命令后,指定范圍內的日志被導出到test.sql中;

然后登陸mysql,執(zhí)行命令:

mysql> use test;?
mysql> source test.sql;

這樣就可以還原數據了。

其它筆記

1.如果使用truncate刪除表的數據,binlog中也會新增幾行記錄,記錄truncate操作,樣例如下:

mysqlbinlog.000004 | 3122 | Query | 1 | 3211 | use 'test'; TRUNCATE 'binlog_test'

如果想恢復數據,就需要找到最開始插入數據的Pos、到truncate之前的End_log_pos,然后重新執(zhí)行這期間的命令。

2.增刪改操作會記錄到binlog中,慢查詢sql也可以記錄到慢查詢log中,不過也需要自己修改配置文件開啟慢查詢日志。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • MySQL修改默認字符集編碼的方法

    MySQL修改默認字符集編碼的方法

    這篇文章主要介紹了MySQL修改默認字符集編碼的方法的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • Mysql的timestamp時間戳詳解及2038問題

    Mysql的timestamp時間戳詳解及2038問題

    本文主要介紹了Mysql的timestamp時間戳詳解及2038問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • MySQL中NULL對索引的影響深入講解

    MySQL中NULL對索引的影響深入講解

    這篇文章主要給大家介紹了關于MySQL中NULL對索引的影響的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用MySQL具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-07-07
  • mysql5.7.17壓縮包安裝配置方法圖文教程

    mysql5.7.17壓縮包安裝配置方法圖文教程

    這篇文章主要為大家詳細介紹了mysql 5.7.17壓縮包安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • MYSQL ON UPDATE CURRENT_TIMESTAMP當字段值發(fā)生改變時才會更新記錄的時間

    MYSQL ON UPDATE CURRENT_TIMESTAMP當字段值發(fā)生改變時才會更

    本文主要介紹了MYSQL ON UPDATE CURRENT_TIMESTAMP當字段值發(fā)生改變時才會更新記錄的時間,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • MySQL 5.7及8.0版本數據庫的root密碼遺忘的解決方法

    MySQL 5.7及8.0版本數據庫的root密碼遺忘的解決方法

    這篇文章主要介紹了MySQL 5.7及8.0版本數據庫的root密碼遺忘的解決辦法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧
    2019-12-12
  • mysql 5.7.17 安裝配置方法圖文教程

    mysql 5.7.17 安裝配置方法圖文教程

    這篇文章主要為大家詳細介紹了mysql 5.7.17 安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Mysql及Navicat中設置字段自動填充當前時間及修改時間實現

    Mysql及Navicat中設置字段自動填充當前時間及修改時間實現

    這篇文章主要給大家介紹了關于Mysql及Navicat中設置字段自動填充當前時間及修改時間實現的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2023-07-07
  • MySQL存儲路徑遷移的詳細步驟

    MySQL存儲路徑遷移的詳細步驟

    在構建Web應用程序時,MySQL是存儲數據的核心工具,在云服務器上,正確設置MySQL的存儲路徑對應用性能至關重要,通過遷移,我們不僅解決了空間不足的問題,還能讓數據庫運行得更快,所以本文將給大家介紹MySQL存儲路徑遷移的詳細步驟,需要的朋友可以參考下
    2024-06-06
  • MySql 快速插入千萬級大數據的方法示例

    MySql 快速插入千萬級大數據的方法示例

    這篇文章主要介紹了MySql 快速插入千萬級大數據的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08

最新評論

鄂托克前旗| 伊吾县| 黎平县| 鸡泽县| 弥勒县| 大丰市| 浏阳市| 泸西县| 平谷区| 宜宾县| 铜梁县| 德保县| 高密市| 衡阳县| 桐柏县| 横峰县| 温州市| 天台县| 阿坝| 西盟| 澄城县| 延川县| 万安县| 嫩江县| 临夏县| 四会市| 富裕县| 陇西县| 南丹县| 阜阳市| 晴隆县| 乌拉特中旗| 怀集县| 雷山县| 札达县| 梨树县| 孝感市| 正宁县| 临城县| 太保市| 平利县|