日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL二进制日志文件的用法_数据恢复

發(fā)布時間:2023/12/3 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL二进制日志文件的用法_数据恢复 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 開啟二進(jìn)制日志功能
  • 關(guān)閉/打開二進(jìn)制日志記錄
  • 刷新二進(jìn)制日志文件
  • 查看二進(jìn)制日志文件的存儲位置
  • 利用二進(jìn)制日志文件恢復(fù)數(shù)據(jù)的本質(zhì)
  • 二進(jìn)制日志提取/導(dǎo)出到腳本文件中
  • 查看當(dāng)前二進(jìn)制日志的最后一個位置
  • 查看二進(jìn)制日志文件的內(nèi)容
  • 執(zhí)行 SQL 腳本文件以恢復(fù)數(shù)據(jù)
  • 二進(jìn)制日志分析
  • 指定恢復(fù)時間
  • 指定恢復(fù)位置
  • 數(shù)據(jù)恢復(fù)演示案例
    • 備份數(shù)據(jù)庫
    • 操作數(shù)據(jù)
    • 恢復(fù)數(shù)據(jù)

開啟二進(jìn)制日志功能

在配置文件 /etc/my.cnf 中設(shè)置二進(jìn)制日志文件的保存目錄及文件名前綴:

log-bin=/var/lib/mysql/mybinlog/mysql-bin server-id=1

啟用獨(dú)占表空間:

innodb_file_per_table=1

說明:

1.如上的配置,數(shù)據(jù)庫服務(wù)重啟后,就自動生成一個二進(jìn)制日志文件保存在 /var/lib/mysql/mybinlog 目錄下,而且二進(jìn)制日志文件的名稱會以 mysql-bin 為前綴,在后面從序號 000001 開始命名。

第一次生成日志文件的名稱為:mysql-bin.000001;如果你刷新了日志,則會生成一個新的日志文件,名稱為:mysql-bin.000002;繼續(xù)書刷新日志,則會生成名為:mysql-bin.000003 的日志文件,以此類推。

2.在配置變量 log-bin 的同時必須要配置變量 server-id,否則數(shù)據(jù)庫服務(wù)根本無法重啟。

3.啟用獨(dú)占表空間,則每個表都有自己獨(dú)立的表空間文件;默認(rèn)是共享表空間,即所有數(shù)據(jù)庫使用一個表空間。至于這項(xiàng)功能是否必須開啟,暫時不清楚

關(guān)閉/打開二進(jìn)制日志記錄

mysql> set global sql_log_bin=0; mysql> set global sql_log_bin=1;

刷新二進(jìn)制日志文件

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

注:
1.會生成新的二進(jìn)制日志文件
2.舊日志文件中的數(shù)據(jù)庫操作日志并不會復(fù)制到新日志文件中

查看二進(jìn)制日志文件的存儲位置

mysql> show variables like '%log_bin%'; +---------------------------------+-----------------------------------------+ | Variable_name | Value | +---------------------------------+-----------------------------------------+ | log_bin | ON | | log_bin_basename | /var/lib/mysql/mybinlog/mysql-bin | | log_bin_index | /var/lib/mysql/mybinlog/mysql-bin.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | sql_log_bin | ON | +---------------------------------+-----------------------------------------+ 6 rows in set (0.01 sec)

看變量 log_bin_basename 的值,得知二進(jìn)制日志文件存放在目錄 /var/lib/mysql/mybinlog/ 下

利用二進(jìn)制日志文件恢復(fù)數(shù)據(jù)的本質(zhì)

二進(jìn)制日志機(jī)制其實(shí)就是把一些 DDL、DML 操作語句記錄到二進(jìn)制日志文件中,而你想利用該文件恢復(fù)數(shù)據(jù),就必須找到相關(guān)數(shù)據(jù)的命令語句,然后去執(zhí)行這些命令語句。所以你需要看得懂日志文件的內(nèi)容,能夠把相關(guān)命令語句提取出來。關(guān)于提取你想要的命令語句的命令請看下面。

二進(jìn)制日志提取/導(dǎo)出到腳本文件中

--start-position:指定從哪個位置開始導(dǎo)出日志
--stop-position:指定導(dǎo)出日志的結(jié)束位置
--start-datetime:指定從哪個時間開始導(dǎo)出日志,時間格式為:2005-12-25 11:25:56
--stop-datetime:指定導(dǎo)出日志的結(jié)束時間

[root@htlwk0001host ~]# mysqlbinlog --no-defaults --start-position=1125 --stop-position=1344 /var/lib/mysql/mybinlog/mysql-bin.000004 > /root/test/001.sql

查看當(dāng)前二進(jìn)制日志的最后一個位置

mysql> show master status;

查看日志文件的最后一個位置其實(shí)沒有什么意義。

查看二進(jìn)制日志文件的內(nèi)容

[root@htlwk0001host ~]# mysqlbinlog --no-defaults /var/lib/mysql/mybinlog/mysql-bin.000004

執(zhí)行 SQL 腳本文件以恢復(fù)數(shù)據(jù)

[root@htlwk0001host ~]# mysql -uroot -p123456 -D test < /root/test/004.sql;

二進(jìn)制日志分析

指定恢復(fù)時間

對于 MySQL 4.1.4,可以在 mysqlbinlog 語句中通過 --start-date 和 --stop-date 選項(xiàng)指定恢復(fù)數(shù)據(jù)的起止時間。

舉例說明,假設(shè)在今天上午10:00(今天是2005年4月20日),不小心刪除一個表。要想恢復(fù)表和數(shù)據(jù),你可以先恢復(fù)前晚上的備份(假設(shè)你有定時每天凌晨對數(shù)據(jù)庫進(jìn)行備份,備份后自動生成一個新的二進(jìn)制日志文件 mysql-bin.00004),然后執(zhí)行下面的語句:

[root@htlwk0001host ~]# mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/mysql-bin.000004 | mysql -uroot -p123456

這條命令可能有問題,因?yàn)?2005-04-20 9:59:59 之前有很多數(shù)據(jù)庫操作語句,這些操作語句不僅僅是前晚備份時間開始到 2005-04-20 9:59:59 之間的操作語句,前晚備份時間之前也有無數(shù)的操作語句,這些操作語句也包括在內(nèi)吧,難道都執(zhí)行嗎?都執(zhí)行肯定會報錯,所以感覺有問題。

接著你可能要恢復(fù) 2005-04-20 10:01:00 之后產(chǎn)生的數(shù)據(jù),你可以用起使日期和時間再次運(yùn)行 mysqlbinlog:

[root@htlwk0001host ~]# mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456 | mysql -uroot -p123456

指定恢復(fù)位置

也可以不指定日期和時間,而使用 mysqlbinlog 的選項(xiàng) --start-position 和 --stop-position 來指定日志位置。它們的作用與起止日期選項(xiàng)相同,不同的是給出日志內(nèi)容中的位置號。使用日志位置是更準(zhǔn)確的恢復(fù)方法,特別是執(zhí)行破壞性SQL語句的同時發(fā)生許多事務(wù)的時候。要想確定位置號,你必須查看日志文件的內(nèi)容以尋找執(zhí)行了不期望的事務(wù)的時間范圍,建議你將這個時間范圍的日志數(shù)據(jù)導(dǎo)出到文本文件中以便進(jìn)行檢查,你可以執(zhí)行下面的語句:

[root@htlwk0001host ~]# mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" /var/log/mysql/mysql-bin.000004 > /tmp/mysql_restore.sql

執(zhí)行到停止位置為止的所有事務(wù),即將數(shù)據(jù)恢復(fù)到指定的停止位置:

[root@htlwk0001host ~]# mysqlbinlog --stop-position="368312" /var/log/mysql/mysql-bin.000004 | mysql -u root -pmypwd

將恢復(fù)從給定的起始位置直到二進(jìn)制日志結(jié)束的所有事務(wù):

[root@htlwk0001host ~]# mysqlbinlog --start-position="368315" /var/log/mysql/mysql-bin.000004 | mysql -u root -pmypwd

數(shù)據(jù)恢復(fù)演示案例

備份數(shù)據(jù)庫

先對某個數(shù)據(jù)庫進(jìn)行完整的備份:

[root@htlwk0001host ~]# mysqldump -h10.6.208.183 -uroot -p123456 -P3306 --single-transaction --master-data=2 test > test.sql

執(zhí)行上述的命令語句后,會在當(dāng)前工作目錄下產(chǎn)生一個備份腳本文件 test.sql。

在 test.sql 文件中我們會看到:

-- CHANGE MASTER TO MASTER_LOG_FILE='bin-log.000002', MASTER_LOG_POS=107;

指備份后所有的更改將會保存到 bin-log.000002 二進(jìn)制文件中,備份數(shù)據(jù)在日志文件中對應(yīng)的位置是 107。

操作數(shù)據(jù)

接著往 test 數(shù)據(jù)庫下的 student 表中插入兩條記錄,然后執(zhí)行 flush logs 命令產(chǎn)生一個新的二進(jìn)制日志文件 bin-log.000003。在 flush logs 之前,數(shù)據(jù)庫的更改操作日志是保存在文件 bin-log.000002 中,既往表 student 增加記錄的操作日志是保存在文件 bin-log.00002 中。

接著再往 test 數(shù)據(jù)庫下 teacher 表中增加兩條記錄,然后刪除 student 表和 teacher 表。執(zhí)行命令 flush logs 之后,增加記錄和刪除表的操作日志都記錄在新的二進(jìn)制日志文件 bin-log.000003 中。

恢復(fù)數(shù)據(jù)

接著我們來恢復(fù)數(shù)據(jù),首先導(dǎo)入全備數(shù)據(jù):

[root@htlwk0001host ~]# mysql -h10.6.208.183 -uroot -p123456 -P3306 < test.sql

恢復(fù) bin-log.000002:

[root@htlwk0001host ~]# mysqlbinlog /var/lib/mysql/binlog/bin-log.000002 | mysql -h10.6.208.183 -uroot -p123456 -P3306

恢復(fù)部分 bin-log.000003:

需要查看文件 bin-log.000003 中的內(nèi)容,找到開始刪除數(shù)據(jù)的位置,然后將這個位置之前的日志數(shù)據(jù)導(dǎo)出到 SQL 腳本文件中,然后執(zhí)行該腳本文件以恢復(fù)被刪除的數(shù)據(jù);當(dāng)然你找到恢復(fù)數(shù)據(jù)的位置點(diǎn)之后,也可以直接指定這個位置點(diǎn),通過下面的語句來恢復(fù)數(shù)據(jù):

[root@htlwk0001host ~]# mysqlbinlog /var/lib/mysql/binlog/mysql-bin.000003 --stop-position=208 | mysql -h10.6.208.183 -uroot -p123456 -P3306

總結(jié)

以上是生活随笔為你收集整理的MySQL二进制日志文件的用法_数据恢复的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。