国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL 開啟配置binlog以及通過binlog恢復數據

這篇具有很好參考價值的文章主要介紹了MySQL 開啟配置binlog以及通過binlog恢復數據。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、binlog日志基本概念

?? binlog是MySQL sever層維護的一種二進制日志,binlog是記錄所有數據庫表結構變更(例如CREATE、ALTER TABLE、DROP等)以及表數據修改(INSERT、UPDATE、DELETE、TRUNCATE等)的二進制日志。不會記錄SELECT和SHOW這類操作,因為這類操作對數據本身并沒有修改。

作用主要有:

  • 主從復制:在MySQL的Master節(jié)點開啟binlog,Master把它的二進制日志傳遞給slaves并回放來達到master-slave數據一致的目的。
  • 數據恢復:通過mysqlbinlog工具來恢復數據

二、開啟binlog日志記錄

2.1、查看binlog日志記錄啟用狀態(tài)

MySQL安裝完成后,MySQL5.7版本binlog默認是不開啟的,MySQL8默認開啟binlog,登錄MySQL后,可以通過SHOW VARIABLES LIKE '%log_bin%';命令查看是否開啟binlog。

# 登錄 mysql
mysql -h127.0.0.1 -P3306 -uroot -p123456
# 查看是否開啟binlog
mysql> SHOW VARIABLES LIKE '%log_bin%';

mysql 開啟binlog,數據庫,mysql,數據庫,運維

log_bin 的Value如果為ON代表開啟,如果為OFF代表關閉,我這里使用的是MySQL8.0默認是開啟的,如果沒有開啟可以通過下面方式開啟:

2.2、開啟配置binlog日志

修改MySQL配置文件,linux中配置文件為my.conf,window下為my.ini,下面以centos為例演示:

  • 編輯配置文件
# 在centos中mysql的配置文件一般都在/etc/mysql目錄下,如果不在可以通過 find / -name "my.cnf" 查找
vi /etc/mysql/my.cnf
  • 添加配置
# 服務ID
server-id=1
# binlog 配置 只要配置了log_bin地址 就會開啟
log_bin = /var/lib/mysql/mysql_bin
# 日志存儲天數 默認0 永久保存
# 如果數據庫會定期歸檔,建議設置一個存儲時間不需要一直存儲binlog日志,理論上只需要存儲歸檔之后的日志
expire_logs_days = 30
# binlog最大值
max_binlog_size = 1024M
# 規(guī)定binlog的格式,binlog有三種格式statement、row、mixad,默認使用statement,建議使用row格式
binlog_format = ROW
# 在提交n次事務后,進行binlog的落盤,0為不進行強行的刷新操作,而是由文件系統(tǒng)控制刷新日志文件,如果是在線交易和賬有關的數據建議設置成1,如果是其他數據可以保持為0即可
sync_binlog = 1
  • 重啟MySQL服務使配置生效
systemctl restart mysqld
  • 登錄MySQL查看配置是否生效
mysql> SHOW VARIABLES LIKE '%log_bin%';

mysql 開啟binlog,數據庫,mysql,數據庫,運維
log_bin為ON代表MySQL已經開啟binlog日志記錄
log_bin_basename配置了binlog的文件路徑及文件前綴名
log_bin_index配置了binlog索引文件的路徑

  • 查看日志列表
mysql> SHOW MASTER LOGS;

mysql 開啟binlog,數據庫,mysql,數據庫,運維

  • 根據log_bin_basename的路徑查看binlog具體文件
ls -l /var/lib/mysql/mysql_bin.*

mysql 開啟binlog,數據庫,mysql,數據庫,運維

三、制作測試數據(可以先不執(zhí)行,這里是為后續(xù)數據恢復做準備,先看數據恢復流程)

登錄MySQL后創(chuàng)建庫、創(chuàng)建表、在插入一些數據

  • 登錄數據庫
mysql -h127.0.0.1 -P3306 -uroot -p123456
  • 創(chuàng)建庫
CREATE DATABASE binlog_test_db;
  • 切換到自己創(chuàng)建的數據庫
USE binlog_test_db;
  • 創(chuàng)建表
DROP TABLE IF EXISTS `binlog_test_table`;
CREATE TABLE `binlog_test_table`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `nick_name` varchar(255) DEFAULT NULL,
  `create_time` datetime(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB ;
  • 插入數據
INSERT INTO `binlog_test_table` VALUES (1, 'Alia', NOW());
INSERT INTO `binlog_test_table` VALUES (2, 'Kerwin', NOW());
INSERT INTO `binlog_test_table` VALUES (3, 'Hilaria', NOW());
INSERT INTO `binlog_test_table` VALUES (4, 'Coco', NOW());
  • 查看創(chuàng)建的庫
mysql> SHOW DATABASES;

mysql 開啟binlog,數據庫,mysql,數據庫,運維

  • 查看創(chuàng)建的表和數據
# 切換到binlog_test_db庫
mysql> USE binlog_test_db;
# 查看庫中所有的表
mysql> SHOW TABLES;
# 查看表中的數據
mysql> SELECT * FROM binlog_test_table;

mysql 開啟binlog,數據庫,mysql,數據庫,運維

四、使用binlog日志恢復數據

當數據庫發(fā)生變化時,binlog會記錄數據庫中的所有變化,需要恢復的時候可以通過mysqlbinlog工具,根據binlog中的開始位置和結束位置或者開始時間和結束時間還原本部分操作,結束位置或者結束時間一般是數據被破壞或刪除之前的位置。

4.1、前置準備

自己測試的話先要確保有一個干凈的環(huán)境,避免出現一些奇怪問題導致浪費時間,這里先做一些前置準備,也就是說自己的binlog文件中最好只有當前測試的數據記錄,避免出現干擾。

  • 1、登錄MySQL執(zhí)行下面命令刷新log日志,自此刻開始產生一個新編號的binlog日志文件

    # 注:每當mysqld服務重啟時,會自動執(zhí)行此命令,刷新binlog日志;在mysqldump備份數據時加 -F 選項也會刷新binlog日志
    mysql> FLUSH LOGS;
    
  • 2、查看當前的binlog文件

    ls -l /var/lib/mysql/mysql_bin.*
    

    mysql 開啟binlog,數據庫,mysql,數據庫,運維
    我這里在刷新binlog之前是mysql_bin.000003,刷新后新生成了一個mysql_bin.000004,后續(xù)日志都會記錄在這個新的文件中。

4.2、恢復全部數據

在恢復數據前首先要制作好測試數據,恢復全部數據就是將一個完整的binlog都執(zhí)行,比如我們在制作測試數據時創(chuàng)建庫、創(chuàng)建表、插入數據等操作都會記錄在binlog中,使用這個binlog恢復數據等于將我們上面的操作又執(zhí)行了一次。

數據恢復演示流程:

  • 1、執(zhí)行4.1前置準備中的操作,生成一個新的binlog文件,假設我這里生成新的文件叫做mysql_bin.000004,后續(xù)數據的操作日志都會記錄在這個日志文件中。

  • 2、準備數據,直接執(zhí)行本文第三點制作測試數據中的SQL即可。

  • 3、將mysql_bin.000004這個binlog日志歸檔,因為我們需要通過mysql_bin.000004這個日志恢復全部數據,所以要在刪除數據庫之前歸檔,如果刪除數據庫語句也被記錄在mysql_bin.000004中,那么執(zhí)行完mysql_bin.000004庫又會被刪除了。

    # 登錄數據庫執(zhí)行刷新log日志,自此刻開始產生一個新編號的binlog日志文件
    mysql> FLUSH LOGS;
    

    mysql 開啟binlog,數據庫,mysql,數據庫,運維

  • 4、刪除數據庫

    mysql> DROP DATABASE binlog_test_db;
    

    mysql 開啟binlog,數據庫,mysql,數據庫,運維
    這里可以看到binlog_test_db庫已經被刪除了。

  • 5、通過mysqlbinlog執(zhí)行恢復全部

    # mysqlbinlog是MySQL自帶的一個工具,一般在安裝MySQL時mysqlbinlog也會被放入可執(zhí)行目錄下,可以直接執(zhí)行
    # 如果不能直接使用mysqlbinlog命令,可以通過 find / -name "mysqlbinlog" 查找一下這個工具在什么位置
    # 然后指定全路徑執(zhí)行即可:如 /usr/bin/mysqlbinlog --no-defaults ...
    mysqlbinlog --no-defaults /var/lib/mysql/mysql_bin.000004 | mysql -h127.0.0.1 -P3306 -uroot -p123456
    
  • 6、查看數據恢復情況

    # 查看全部庫
    mysql> SHOW DATABASES;
    # 切換到binlog_test_db庫
    mysql> USE binlog_test_db;
    # 查看庫中所有的表
    mysql> SHOW TABLES;
    # 查看表中的數據
    mysql> SELECT * FROM binlog_test_table;
    

    mysql 開啟binlog,數據庫,mysql,數據庫,運維

到這里可以看到數據已經全部恢復,但是還存在幾個問題:

  • 1、如果存在多個binlog文件如何恢復全部數據
    • 存在多個binlog文件依次恢復即可,必須按照日志序號來恢復,假設有三個日志文件序號是000001、000002、000003,那么第一個恢復的一定是000001,第二個恢復000002,最后恢復000003。
  • 2、如果我們在同一個日志文件中也進行了刪庫操作怎么恢復
    • 全部恢復原理就是將之前做過的操作全做一次,有刪庫操作自然也會在操作一次,這樣肯定是違背我們的需求的,解決方法其實就是不去執(zhí)行某個節(jié)點后的操作就行,比如刪庫操作是在節(jié)點5執(zhí)行,那么我們只恢復到節(jié)點4即可,在后續(xù)會詳細說明。

4.3、通過指定位置區(qū)間恢復

和恢復全部數據不同的是可以指定一個位置區(qū)間恢復數據,這樣如果刪除庫操作和數據插入操作都在同一個日志文件中也可以進行數據恢復,而且很靈活。

數據恢復演示流程:

  • 1、執(zhí)行4.1前置準備中的操作,生成一個新的binlog文件,假設我這里生成新的文件叫做mysql_bin.000006,后續(xù)數據的操作日志都會記錄在這個日志文件中。

  • 2、準備數據,直接執(zhí)行本文第三點制作測試數據中的SQL即可。

  • 3、刪除數據庫

    mysql> DROP DATABASE binlog_test_db;
    

    mysql 開啟binlog,數據庫,mysql,數據庫,運維
    這里可以看到binlog_test_db庫已經被刪除了。

  • 4、將mysql_bin.000006這個binlog日志歸檔,為了防止恢復數據后影響最新業(yè)務,需要執(zhí)行flush logs,產生一個新的binlog文件,此時舊的binlog文件不會再有寫入。

    # 登錄數據庫執(zhí)行刷新log日志,自此刻開始產生一個新編號的binlog日志文件
    mysql> FLUSH LOGS;
    

    mysql 開啟binlog,數據庫,mysql,數據庫,運維

  • 5、通過mysqlbinlog將binlog轉為sql,以方便查詢具體位置

    mysqlbinlog --set-charset=utf-8 /var/lib/mysql/mysql_bin.000006>binlog_000006.sql
    
  • 6、查看生成的binlog_000006.sql,確定需要恢復的起始位置結束位置還有起始時間和結束時間

    # 打開 binlog_000006.sql 文件,搜索自己的創(chuàng)建庫語句確認起始位置和時間,在搜索刪除庫語句確認結束位置和時間
    vi binlog_000006.sql
    

    確認開始位置為232,開始時間為 23年9月27日 17:17:23
    mysql 開啟binlog,數據庫,mysql,數據庫,運維
    確認結束位置為2220,結束時間為 23年9月27日 17:18:36
    mysql 開啟binlog,數據庫,mysql,數據庫,運維

  • 7、通過mysqlbinlog執(zhí)行恢復操作

    # 通過位置區(qū)間恢復 
    mysqlbinlog --no-defaults /var/lib/mysql/mysql_bin.000006 --start-position=232 --stop-position=2220 | mysql -h127.0.0.1 -P3306 -uroot -p123456
    

    /var/lib/mysql/mysql_bin.000006 : 要操作binlog文件
    –start-position=232 :數據恢復的起始位置
    –stop-position=2220 :數據恢復的結束位置
    mysql -h127.0.0.1 -P3306 -uroot -p123456 : 數據恢復需要登錄數據庫

    mysql 開啟binlog,數據庫,mysql,數據庫,運維文章來源地址http://www.zghlxwxcb.cn/news/detail-768953.html

到了這里,關于MySQL 開啟配置binlog以及通過binlog恢復數據的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • windows下mysql中binlog日志分析和數據恢復

    windows下mysql中binlog日志分析和數據恢復

    看到了是沒有開啟的。 不能通過命令的方式去打開,因為會提示說這個參數是 只讀 的。如下圖: 所以,打開mysql的配置文件,找到mysql的配置文件(和Linux下的文件名是不一樣的,Linux是my.cnf),windows默認的在 C:ProgramDataMySQLMySQL Server 5.7my.ini 配置好之后,要 進行重啟mysql服務

    2024年02月15日
    瀏覽(24)
  • MySQL如何恢復不小心誤刪的數據記錄(binlog)

    MySQL如何恢復不小心誤刪的數據記錄(binlog)

    題主于今天(2022年11月27日) 在線上環(huán)境誤操作刪除了記錄,且沒有備份數據,通宵排查事故原因,終于沒有釀成生產事故。謹以此文記錄。 https://blog.csdn.net/qq_23543983/article/details/127298578 本文是對上文操作的實際補充說明。 首先確保你binlog日志是打開的。一般線上環(huán)境都會

    2024年02月07日
    瀏覽(23)
  • mysql誤刪數據后,從binlog中進行恢復刪除數據(拯救手殘,不跑路)

    mysql誤刪數據后,從binlog中進行恢復刪除數據(拯救手殘,不跑路)

    在一次數據維護過程中,對數據刪除時沒有提前備份數據,導致數據被刪除后無法通過備份文件直接恢復。 數據如果在刪除前提前備份好,那么直接從備份文件中恢復。 如果沒有備份文件,則需要查看mysql數據庫是否打開logbin日志。如果沒有打開直接GG。如果恰好打開了的,

    2024年02月16日
    瀏覽(21)
  • MySQL 和 Redis 如何保證數據一致性,通過MySQL的binlog實現

    MySQL 和 Redis 如何保證數據一致性,通過MySQL的binlog實現

    1、簡介 ? ? ? ? MySQL 和 Redis 如何保證數據一致性,目前大多討論的是先更新Redis后更新MySQL,還是先更新MySQL 后更新Redis,這兩種方式在實際的應用場景中都不能確保數據的完全一致性,在某些情況下會出現問題,本文介紹使用 Canal 工具,通過將自己偽裝成MySQL的從節(jié)點,讀

    2024年02月02日
    瀏覽(18)
  • 開啟MySQL的binlog日志

    開啟MySQL的binlog日志

    查看MySQL的binlog模式 ? 幾個關于binlog常用的命令 ? binlog 就是binary log,二進制日志文件,這個文件記錄了mysql所有的dml操作。通過binlog日志我們可以做數據恢復,做主住復制和主從復制等等。對于開發(fā)者可能對binlog并不怎么關注,但是對于運維或者架構人員來講是非常重要的

    2024年01月21日
    瀏覽(305)
  • mysql binlog 日志詳解及恢復

    一、binlog概述 binlog是Mysql sever層維護的一種二進制日志,與innodb引擎中的redo/undolog是完全不同的日志; 其主要是用來記錄對mysql數據更新或潛在發(fā)生更新的SQL語句,并以\\\"事務\\\"的形式保存在磁盤中; 作用主要有: 復制:MySQL Replication在Master端開啟binlog,Master把它的二進制日志傳

    2024年02月12日
    瀏覽(87)
  • 開啟MySQL二進制日志(binlog)

    前言 binlog即二進制日志 Binary Log,它記錄了所有的DDL和DML(除了數據查詢語句)語句,以事件形式記錄,還包含語句所執(zhí)行的消耗的時間,MySQL的二進制日志是事務安全型的。一般來說開啟二進制日志大概會有一定的性能損耗。 二進制日志有兩個最重要的使用場景: Mysql主從復制

    2023年04月09日
    瀏覽(88)
  • Linux mysql5.7開啟 binlog

    Linux mysql5.7開啟 binlog

    查看?mysql是否開啟 binlog。 查看命令: ?log_bin?? ?OFF 是關閉的狀態(tài)。 編輯my.cnf配置文件 默認的配置文件內容: ?增加下面內容 重啟mysql:? 重啟命令: 執(zhí)行結果: 再次查看 mysql是否開啟 binlog。 結束,大功告成 。

    2024年02月13日
    瀏覽(21)
  • Mac 上如何安裝Mysql? 如何配置 Mysql?以及如何開啟并使用MySQL

    Mac 上如何安裝Mysql? 如何配置 Mysql?以及如何開啟并使用MySQL

    有許多開發(fā)的小伙伴,使用的是mac,那么在mac上如何安裝,配置Mysql,以及使用Mysql了,今天來一個系統(tǒng)的教程。 使用mysql前,我們需要先下載mysql,并按照以下幾個步驟,便可以順利下載安裝mysql了。 ?1:下載mysql 首先,在瀏覽器當中輸入地址https://www.mysql.com/downloads/,或者登

    2024年02月08日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包