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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL-日志、完全备份恢复和增量备份恢复

發布時間:2024/2/28 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL-日志、完全备份恢复和增量备份恢复 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL-日志、完全備份恢復和增量備份恢復

  • 一、MySQL日志管理
    • 1、MySQL日志文件
      • 錯誤日志
      • 二進制日志
      • 中繼日志
      • 慢查詢日志
  • 二、查看日志狀態命令
  • 三、備份的重要性
    • 1、造成數據丟失的原因有如下幾種
  • 四、備份類型
    • 1、從物理與邏輯的角度分類
    • 2、從數據庫的備份策略角度分類
    • 3、備份方法
  • 五、數據庫冷備份與恢復及完全備份與恢復的基本命令
    • 1、物理冷備份與恢復
    • 2、mysqldump 備份與恢復
      • 完全備份一個或多個完整的庫(包括其中所有的表)
      • 完全備份 MySQL 服務器中所有的庫
      • 完全備份指定庫中的部分表
    • 3、查看備份文件
    • 4、MySQL 完全恢復
      • 恢復數據庫
      • 恢復數據表
  • 六、MySQL增量備份與恢復
    • 1、二進制日志(binlog)有三種不同的記錄格式
      • STATEMENT(基于SQL語句)
      • ROW(基于行)
      • MIXED(混合模式)
    • 2、MySQL增量備份
      • 開啟二進制日志文件
      • 可每周對數據庫或表進行完全備份(增量備份是基于完全備份,所以這里我們直接備份數據庫)
      • 可每天進行增量備份操作,生成新的二進制日志文件(例如 mysql-bin.000002)
      • 插入新數據,以模擬數據的增加或變更
      • 再次生成新的二進制日志文件(例如 mysql-bin.000003)
      • 查看二進制日志文件的內容
    • 3、MySQL 增量恢復
      • 一般恢復
      • 斷點恢復
  • 總結:斷點恢復

一、MySQL日志管理

1、MySQL日志文件

  • 常用的日志文件(在/etc/my.cnf中[mysqld]客戶端配置中修改)
  • MySQL的默認日志保存位置為/usr/local/mysql/data

錯誤日志

用于記錄MySQL啟動、停止或運行時發生的錯誤信息,默認已開啟

指定日志的保存位置和文件名 log-error=/usr/local/mysql/data/mysql_error.log

二進制日志

用來記錄所有更新了數據或者已經潛在更新了數據的語句,記錄了數據的更改,可用于數據恢復

log-bin=mysql-bin 或 log_bin=mysql-bin

中繼日志

一般情況下它在MySQL主從同步、讀寫分離集群的從節點才開啟,主節點一般不需要這個日志。

慢查詢日志

用來記錄所有執行時間超過long_query_time秒的語句,可以找到哪些查詢語句執行時間長,以便于優化,默認是關閉的

slow_query_log=ON slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log #指定文件路徑和名稱 long_query_time=5 #設置執行超過5秒的語句會被記錄,缺省時間為10秒systemctl restart mysqld

二、查看日志狀態命令

1、查看通用查詢日志是否開啟

mysql -u root -p show variables like 'general%';

2、查看二進制日志是否開啟

show variables like 'log_bin%';

3、查看慢查詢日功能是否開啟

show variables like '%slow%';

查看慢查詢時間設置

show variables like 'long_query_time';

在數據庫中設置開啟慢查詢的方法(臨時)

set global slow_query_log=ON; 該方法重啟服務失效

三、備份的重要性

  • 在企業中數據的價值至關重要,數據保障了企業業務的正常運行。因此,數據的安全性及數據的可靠性是運維的重中之重,任何數據的丟失都可能對企業產生嚴重的后果。

1、造成數據丟失的原因有如下幾種

  • 程序錯誤
  • 人為操作錯誤
  • 運算錯誤
  • 磁盤故障
  • 災難(如火災、地震)和盜竊

四、備份類型

1、從物理與邏輯的角度分類

數據庫備份可以分為物理備份和邏輯備份。物理備份是對數據庫操作系統的物理文件
(如數據文件、日志文件等)的備份。這種類型的備份適用于在出現問題時需要快速恢復的大型重要數據庫。物理備份又可以分為
冷備份(脫機備份)、熱備份(聯機備份)和溫備份。

  • 冷備份:在數據庫關閉狀態下進行備份操作。(tar)

  • 熱備份:在數據庫處于運行狀態時進行備份操作,該備份方法依賴數據庫的日志文件。(mysqldump)

  • 溫備份:數據庫鎖定表格(不可寫入但可讀)的狀態下進行備份操作。

  • 邏輯備份是對數據庫邏輯組件(如表等數據庫對象)的備份,表示為邏輯數據庫結構(CREATE DATABASB,CREATBTABLE語句)和內容(INSERT語句或分隔文本文件)的信息。這種類型的備份適用于可以編輯數據值或表結構較小的數據量,或者在不同的機器體系結構上重新創建數據

2、從數據庫的備份策略角度分類

從數據庫的備份策略角度,數據庫的備份可分為完全備份、差異備份和增量備份(面試點)

  • 完全備份:每次對數據進行完整的備份,即對整個數據庫、數據庫結構和文件結構的備份,保存的是備份完成時刻的數據庫,是差異備份與增量備份的基礎。完全備份的備份與恢復操作都非常簡單方便,但是數據存在大量的重復,并且會占用大量的磁盤空間,備份的時間也很長。
  • 差異備份:備份那些自從上次完全備份之后被修改過的所有文件,備份的時間節點是從上次完整備份起,備份數據量會越來越大?;謴蛿祿r,只需恢復上次的完全備份與最近的一次差異備份。
  • 增量備份:只有那些在上次完全備份或者增量備份后被修改的文件才會被備份。以上次完整備份或上次增量備份的時間為時間點,僅備份這之間的數據變化,因而備份的數據量小,占用空間小,備份速度快。但恢復時,需要從上一次的完整備份開始到最后一次增量備份之的所有增量依次恢復,如中間某次的備份數據損壞,將導致數據的丟失。

3、備份方法

數據庫的備份可以采用很多種方式,如直接打包數據庫文件(物理冷備份)、專用備份工具(mysqldump)、二進制日志增量備份、第三方工具備份等。

  • 物理冷備份
    物理冷備份時需要在數據庫處于關閉狀態下,能夠較好地保證數據庫的完整性。物理冷備份一般用于非核心業務,這類業務一般都允許中斷,物理冷備份的特點就是速度快,恢復時也是最為簡單的。通常通過直接打包數據庫文件夾(/usr/local/mysql/data)來實現備份
  • 專用備份工具mysqldump或mysqlhotcopy
    mysqldump程序和mysqlhotcopy都可以做備份。
    mysqldump是客戶端常用邏輯備份程序,能夠產生一組被執行以后再現原始數據庫對象定義和表數據的sgr語句。它可以轉儲一個到多個MysQI數據庫,對其進行備份或傳輸到遠程sQI服務器。mysqldump更為通用,
    因為它可以備份各種表。
    mysqlhotcopy 僅適用于某些存儲引擎。
  • 通過啟用二進制日志進行增量備份MySQL
    支持增量備份,進行增量備份時必須啟用二進制日志。二進制日志文件為用戶提供復制,對執行備份點后進行的數據庫更改所需的信息進行恢復。如果進行增量備份(包含自上次完全備份或增量備份以來發生的數據修改),需要刷新二進制日志。
    通過第三方工具備份 Percona XtraBackup是一個免費的 MySgL熱備份軟件,支持在線熱備份Innodb 和xtraDB,也可以支持MySQL表備份,不過 MyISAM表的備份要在表鎖的情況下進行。

五、數據庫冷備份與恢復及完全備份與恢復的基本命令

1、物理冷備份與恢復

systemctl stop mysqld yum -y install xz (一種壓縮工具,詳單與gzip,bz2)壓縮備份 tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/解壓恢復 tar Jxvf /opt/mysql_all_2021-04-14.tar.xz -C /usr/local/mysql/datasystemctl restart mysql




2、mysqldump 備份與恢復

完全備份一個或多個完整的庫(包括其中所有的表)

mysqldump -u root -p[密碼] --databases 庫名1 [庫名2]> /備份路徑/備份文件名.sql #導出的就是數據庫腳本文件例: mysqldump -uroot -p35123512 --databases school > /opt/school.sql

完全備份 MySQL 服務器中所有的庫

mysqldump -u root -p[密碼] --all-databases > /備份路徑/備份文件名.sql例: mysqldump -u root -p35123512 --all-databases > /opt/all_database.sql

完全備份指定庫中的部分表

mysqldump -u root -p[密碼] 庫名 [表名1] [表名2]> /備份路徑/備份文件名.sql例: mysqldump -uroot -p35123512 school test > /opt/school_test.sql #使用“-d”選項,說明只保存數據庫的表結構 #不使用“-d”選項,說明表數據也進行備份

3、查看備份文件

cat /opt/備份的文件 |grep -v "^--" | grep -v "^/" | grep -v "^$"grep -v "^--" /opt/school_test.sql | grep -v "^/" | grep -v "^$"

4、MySQL 完全恢復

恢復數據庫

#“-e”選項,用于指定連接 MySQL 后執行的命令,命令執行完后自動退出 mysql -u root -p -e 'drop database school;' mysql -u root -p -e 'show databases;'mysql -u root -p < /opt/school.sql mysql -u root -p -e 'show databases;'

恢復數據表

當備份文件中只包含表的備份,而不包含創建的庫的語句時,執行導入操作時必須指定庫名,且目標庫必須存在。

mysql -uroot -p35123512 -e 'drop table school.test;' mysql -uroot -p35123512 -e 'show tables from school;'mysql -uroot -p35123512 school < /opt/school_test.sql mysql -u root -p -e 'show tables from school;'在表中操作恢復 source /opt/school_test.sql

六、MySQL增量備份與恢復

1、二進制日志(binlog)有三種不同的記錄格式

STATEMENT(基于SQL語句)

binlog format=STATEMENT默認
每一條涉及到被修改的sql都會記錄在binlog中。
缺點:日志量過大,如sleep()函數, last_insert_id()>,以及user-definedfunctions(udf)、主從復制等架構記錄日志時會出問題會出現問題

ROW(基于行)

shell binlog format=ROw
只記錄變動的記錄,不記錄sql的上下文環境。
缺點:如果遇到updata … set … where true那么就binlog的數據量就變大

MIXED(混合模式)

binlog format=M工XED推薦使用
一般的語句使用statement,函數使用ROW方式存取。

2、MySQL增量備份

開啟二進制日志文件

vim /etc/my.cnf [mysqld] log-bin=mysql-bin server-id = 1 binlog_format = MIXED #指定二進制日志(binlog)的記錄格式為 MIXED#二進制日志(binlog)3種不同的記錄格式:STATEMENT(基于SQL語句)ROW(基于行)MIXED(混合模式),默認格式是STATEMENTsystemctl restart mysqld.service ls -l /usr/local/mysql/data/mysql-bin.*

可每周對數據庫或表進行完全備份(增量備份是基于完全備份,所以這里我們直接備份數據庫)

#完全備份

mysqldump -u root -p school test > /opt/school_test_$(date +%F).sql mysqldump -u root -p school > /opt/school_$(date +%F).sql#使用crontab -e 計劃性任務來執行;每周1凌晨2點對表test和school庫進行完全備份 0 2 * * 1 mysqldump -u root -p school test > /opt/school_test_$(date +%F).sql 0 2 * * 1 mysqldump -u root -p school > /opt/school_$(date +%F).sql


可每天進行增量備份操作,生成新的二進制日志文件(例如 mysql-bin.000002)

mysqladmin -u root -p flush-logs

插入新數據,以模擬數據的增加或變更

mysql -u root -p use school; insert into test values (3,'李四','廣州'); insert into test values (4,'五一','南京');

再次生成新的二進制日志文件(例如 mysql-bin.000003)

mysqladmin -u root -p flush-logs #上面我們往test表中插入數據的操作會保存到mysql-bin.000002文件中,之后數據庫數據再發生變化則保存在mysql-bin.000003文件中

查看二進制日志文件的內容

cp /usr/local/mysql/data/mysql-bin.000002 /opt/ mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002 #--base64-output=decode-rows:使用64位編碼機制去解碼并按行讀取 #-v:顯示詳細內容

3、MySQL 增量恢復

一般恢復

模擬丟失更改的數據的恢復步驟

mysql -u root -p use school; delete from test where id=3; delete from test where id=4; select * from test; quitmysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -u root -p mysql -u root -p -e "select * from school.test;"


模擬丟失所有數據的恢復步驟

mysql -u root -p use school; drop table test; show tables; quitmysql -uroot -p school < /opt/school_test_2021-04-15.sql mysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -uroot -p mysql -u root -p -e "select * from school.test;"


斷點恢復


mysqladmin -uroot -p35123512 flush-logs 進行日志刷新 查看我們剛才操作保存的日志000007二進制日志文件 mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql-bin.000007 # at 219 #210415 17:09:24 server id 1 end_log_pos 354 CRC32 0x00c7f80d Query thread_id=38 exec_time=0 error_code=0 use `school`/*!*/; SET TIMESTAMP=1618477764/*!*/; SET @@session.pseudo_thread_id=38/*!*/; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; SET @@session.sql_mode=1437073414/*!*/; SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; /*!\C utf8 *//*!*/; SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/; SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; create table test (id int(5),name varchar(10),age int(5)) /*!*/; # at 354 #210415 17:11:10 server id 1 end_log_pos 419 CRC32 0x6ed07c34 Anonymous_GTID last_committed=1 sequence_number=2 rbr_only=no SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/; # at 419 #210415 17:11:10 server id 1 end_log_pos 502 CRC32 0xba0129d4 Query thread_id=38 exec_time=0 error_code=0 SET TIMESTAMP=1618477870/*!*/; BEGIN /*!*/; # at 502 #210415 17:11:10 server id 1 end_log_pos 639 CRC32 0x463df0b3 Query thread_id=38 exec_time=0 error_code=0 SET TIMESTAMP=1618477870/*!*/; insert into test values (1,'張三','10'),(2,'李四','20') /*!*/; # at 639 #210415 17:11:10 server id 1 end_log_pos 670 CRC32 0xda19363b Xid = 499 COMMIT/*!*/; # at 670 #210415 17:11:32 server id 1 end_log_pos 735 CRC32 0x99150b17 Anonymous_GTID last_committed=2 sequence_number=3 rbr_only=no SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/; # at 735 #210415 17:11:32 server id 1 end_log_pos 818 CRC32 0x34f81d52 Query thread_id=38 exec_time=0 error_code=0 SET TIMESTAMP=1618477892/*!*/; BEGIN /*!*/; # at 818 #210415 17:11:32 server id 1 end_log_pos 937 CRC32 0x80433f9d Query thread_id=38 exec_time=0 error_code=0 SET TIMESTAMP=1618477892/*!*/; insert into test values (3,'王五','25') /*!*/; # at 937 #210415 17:11:32 server id 1 end_log_pos 968 CRC32 0xd3537b3b Xid = 500 COMMIT/*!*/; # at 968 #210415 17:12:40 server id 1 end_log_pos 1033 CRC32 0x91cc3262 Anonymous_GTID last_committed=3sequence_number=4 rbr_only=no SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/; # at 1033 #210415 17:12:40 server id 1 end_log_pos 1116 CRC32 0x17bd5f4a Query thread_id=38 exec_time=0 error_code=0 SET TIMESTAMP=1618477960/*!*/; BEGIN /*!*/; # at 1116 1116位置是模擬我們誤刪除文件的操作 #210415 17:12:40 server id 1 end_log_pos 1221 CRC32 0x35e5f3c9 Query thread_id=38 exec_time=0 error_code=0 SET TIMESTAMP=1618477960/*!*/; delete from test where id=1 /*!*/; # at 1221 #210415 17:12:40 server id 1 end_log_pos 1252 CRC32 0x5868d5c4 Xid = 503 COMMIT/*!*/; # at 1252 #210415 17:13:06 server id 1 end_log_pos 1317 CRC32 0xc864fc14 Anonymous_GTID last_committed=4sequence_number=5 rbr_only=no SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/; # at 1317 #210415 17:13:06 server id 1 end_log_pos 1400 CRC32 0x8c31a8b8 Query thread_id=38 exec_time=0 error_code=0 SET TIMESTAMP=1618477986/*!*/; BEGIN /*!*/; # at 1400 #210415 17:13:06 server id 1 end_log_pos 1519 CRC32 0xaef20ea3 Query thread_id=38 exec_time=0 error_code=0 SET TIMESTAMP=1618477986/*!*/; insert into test values (4,'田一','30') /*!*/;

基于位置恢復
這邊我們模擬刪除id=1的操作為誤刪除 我們進行恢復

恢復到操作ID為‘1116’之前的數據,就是不執行刪除id=1的操作 mysqlbinlog --no-defaults --stop-position='1116' /usr/local/mysql/data/mysql-bin.000007 | mysql -uroot -p35123512 意思就是跳過我們刪除的操作其余的都恢復 mysqlbinlog --no-defaults --start-position='1400' /usr/local/mysql/data/mysql-bin.000007 | mysql -uroot -p35123512操作前首先要刪除需要備份的表




基于時間點恢復
刪除school庫中的test表,先基于完整備份的恢復,在基于時間點恢復

#僅恢復到17:12:40之前的數據,就是不執行刪除id=1的操作直接跳過 mysqlbinlog --no-defaults --stop-datetime='2021-04-15 17:12:40' /usr/local/mysql/data/mysql-bin.000007 | mysql -uroot -p35123512 #跳過17:12:40的數據恢復之后的數據 mysqlbinlog --no-defaults --start-datetime='2021-04-15 17:13:06' /usr/local/mysql/data/mysql-bin.000007 | mysql -uroot -p35123512



總結:斷點恢復

如果恢復某條SQL語句之前的所有數據,就stop在這個語句的位置節點或者時間點
如果恢復某條SQ語句以及之后的所有數據,就從這個語句的位置節點或者時間點start

總結

以上是生活随笔為你收集整理的MySQL-日志、完全备份恢复和增量备份恢复的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品久久网站 | 精品丰满人妻无套内射 | 欧美日韩精品在线观看视频 | 久久久久免费 | 久久99精品国产麻豆婷婷 | 那个网站可以看毛片 | 中文字幕av在线免费观看 | 国产91精品一区二区绿帽 | 久久av综合网 | 国产精品丝袜黑色高跟鞋 | 青青草97国产精品免费观看 | 三级网站 | 按摩害羞主妇中文字幕 | 国产伦精品一区二区三区在线观看 | 亚洲美女视频 | 影音先锋中文字幕在线视频 | 九九九在线视频 | 希岛婚前侵犯中文字幕在线 | 男人在线视频 | 亚洲美女久久 | 色哟哟欧美精品 | 欧美丰满熟妇xxxxx | 激情综合网五月激情 | 国精产品乱码一区一区三区四区 | mm131亚洲精品| 狂野欧美性猛交xxⅹ李丽珍 | 中文字幕午夜 | 福利二区三区 | 农村一级毛片 | 亚洲精品日产精品乱码不卡 | 嘿咻视频在线观看 | 一级香蕉视频在线观看 | 亚洲av无码国产精品色午夜 | 最新中文字幕在线观看视频 | 灌满闺乖女h高h调教尿h | 日本不卡网 | 风间ゆみ大战黑人 | 亚洲第一免费播放区 | 素人一区 | 伊人一区二区三区四区 | 欧美日韩欧美日韩在线观看视频 | 日韩高清影院 | 日本视频网站在线观看 | 日韩区在线 | 精品国产乱码久久久久久久软件 | 欧美一区二区在线观看视频 | 黄av资源| 手机在线一区二区 | 久久精品国产亚洲AV熟女 | 色就色欧美 | 国产在线观看免费网站 | 免费精品无码AV片在线观看黄 | 欧美xxxxxxxxx | 骚黄网站| 国产白浆视频 | 久久精品视频偷拍 | 综合国产一区 | 麻豆成人精品国产免费 | 91精品国产成人观看 | 日本欧美一级片 | 香蕉毛片 | 国产操比视频 | 国产无套视频 | 中文字幕日韩在线视频 | 午夜在线影院 | 最新国产露脸在线观看 | 亚洲论理 | 亚洲一区二区在线 | 免费在线看黄视频 | 99蜜桃臀久久久欧美精品网站 | 88国产精品视频一区二区三区 | 色乱码一区二区三区熟女 | 久久亚洲网站 | 爱情岛论坛成人 | 爆乳2把你榨干哦ova在线观看 | 五月天国产在线 | 国产精久久一区二区三区 | 天堂网a | 欧美亚洲网站 | 久草热线 | 亚洲毛片在线播放 | 少妇裸体挤奶汁奶水视频 | 国产毛片久久 | 黑丝av在线 | 国产精品三级在线观看无码 | 日本泡妞视频 | 午夜精品美女久久久久av福利 | 天天射综合 | 免费无码一区二区三区 | 成年人在线观看网站 | 少妇久久久久久 | 欧美绿帽交换xxx | 欧美黑吊大战白妞欧美大片 | 粉嫩av国产一区二区三区 | 国模少妇一区二区 | 西西人体做爰大胆gogo直播 | 天天爽天天搞 | 亚洲乱码电影 | 樱桃成人精品视频在线播放 |