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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql ---- innodb-4-备份和恢复

發布時間:2024/9/15 数据库 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql ---- innodb-4-备份和恢复 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

8 備份和恢復

8.1 概述

分類:(根據備份方法、備份后的文件、備份數據庫的內容分類)

備份的方法:

  • Hot Backup:熱備(online backup 在線備份)
  • Cold Backup:冷備(offline backup 離線備份)
  • Warm Backup:溫備(同樣是在線備份,只不過是通過加全局鎖來保證數據的一致性)
  • 備份后的文件分類:

  • 邏輯備份

    指備份后的文件內容是可讀的,通常是文本文件,內容一般是 sql 語句,或者是表內實際的數據

    如:mysqldump 和SELECT * INTO OUTFILE的方法

  • 裸文件備份

    指拷貝數據庫的物理文件(數據庫可以在運行狀態(需要工具),也可以停止)

  • 備份數據庫的內容分類:

  • 完全備份
  • 增量備份
  • 日志備份
  • 8.2 冷備

    冷備非常簡單,只需要備份mysql數據庫的 frm 文件、共享表空間文件、獨立表空間文件(*.ibd)、重做日志文件(也可以加上 my.cnf 文件)

    優點:

  • 備份簡單,只需要拷貝文件
  • 備份文件易于在不同的操作系統、不同 mysql 版本上進行恢復
  • 恢復簡單,只需要拷貝到指定的位置
  • 速度快,不需要執行任何 sql 和重建索引
  • 缺點:

  • 冷備文件比邏輯備份的文件大很多
  • 不總是輕易的跨平臺。(mysql 版本、文件大小寫敏感、浮點數格式等問題)
  • 8.3 邏輯備份

    8.3.1 mysqldump

    語法:

    mysqldump [arguments] > file_name;# 備份所有數據庫 mysqldump --all-databases > dump.sql;# 備份指定數據庫 mysqldump --databases db1 db2 > dump.sql;# 對 test 這個架構備份 (--single-transaction 用來保證數據的一致性,用于引擎為 Innodb 的) mysqldump --single-transaction test > test_backup.sql;

    一些重要的參數:

  • --single-transaction: 在備份開始前,先執行START TRANSACTION命令,以此來保證數據一致性,該參數只對 InnoDB 引擎有效。
  • --lock-tables(-l):依次鎖住每個架構下的所有表,一般用于 MyISAM 引擎,備份時只能進行讀取操作。
  • --add-drop-databases:在 CREATE DATABASES 前先執行 DROP DATABASES(該參數一般和--all-databases或者--databases一起使用)
  • 8.3.2 SELECT ... INTO OUTFILE

    該語句也是邏輯備份的方法,將一張表中的數據導出。

    SELECT [column 1],[column 2] ... INTO OUTFILE 'file_name' [{fields|columns} --- 列[TERMINATED BY 'string'] ---每個列的分隔符[[OPTIONALLY] ENCLOSED BY 'char'] ---對于字符串的包含符[ESCAPED BY 'char'] --- 轉義符 ] [LINES --- 行[STARTING BY 'string'] --- 每行開始符號[TERMINATED BY 'string'] --- 每行的結束符號 ] FROM TABLE WEHRE ....;-- 如果上述參數沒有指定,則默認以下參數: -- FIELDS TERMINATED BY '\\t' ENCLOSED BY '' ESCAPED BY '\\' -- LINES TERMINATED BY '\n' STARTING BY ''-- select * into outfile '/root/a.txt' from a; -- 默認分隔符

    8.3.3 邏輯備份的恢復

    mysqldump 恢復操作比較簡單,因為都是 sql 語句,因此直接執行這個文件就可以了

    # mysql -uroot -p < test_backup.sql

    或者

    -- 通過 source 命令恢復 > mysql source /home/test_backup.sql

    mysqldump 可以恢復數據庫,可以導出存儲過程、觸發器、時間、數據,但是不能導出視圖,因此對于存在視圖的,需要單獨處理(1.導出視圖定義;2。保存視圖定義的 frm 文件)

    8.3.4 LOAD DATA INFILE

    若是通過 mysqldump 或者 SELECT ... INTO OUTFILE 導出的數據需要恢復時,可以通過 LOAD DATA INFILE命令進行導入

    load data infile '/home/a.sql' into table a; --通常為了加快導入,忽略外鍵的檢查set @@foreign_key_checks=0; load data infile '/home/a.sql' into table a; set @@foreign_key_checks=1;

    8.3.5 mysqlimport

    mysqlimport 是 MysqL 數據庫提供的一個命令程序,本質上還是 LOAD DATA INFILE命令。

    -- 使用兩個線程,導入兩個文件 mysqlimport --use-threads=2 test /home/t.txt /home/a.txt

    8.4 二進制日志備份和恢復

    二進制日志非常關鍵,可以用它來完成 point-in-time(時間點)恢復工作。mysql 數據庫的復制也需要二進制日志。默認情況下不會開啟二進制日志,通常設置如下:

    [mysqld] log-bin sync-binlog=1 innodb_support_xa=1

    備份二進制日志文件前,可以通過 FLUSH LOGS 命令來生成一個新的二進制日志文件,然后備份之前的二進制日志文件

    使用方法:

    mysqlbinlog [options] log_file ... # 還原 mysqlbinlog binlog.000001 | mysql -uroot -p test # 恢復多個二進制日志文件 mysqlbinlog binglog.[0-10]* | mysql -uroot -p test# 也可以先通過 mysqlbinlog 導出一個文件,然后在通過 source 導入(好處:能夠對文件進行修改) mysqlbinlog binlog.00001 > /tmp/statements.sql mysqlbinlog binlog.00002 >> /tmp/statements.sql mysql -uroot -p -e "source /tmp/statements.sql" # -e execute 執行 sql

    8.5 熱備

    8.5.1 ibbackup

    收費

    8.5.2 XtraBackup

    # 完備 ./xtrabackup --backup

    8.5.3 XtraBackup增量備份

    原理:

  • 先完成一個完備,并記錄下此時的檢查點的 LSN
  • 再進行增量備份時,比較表空間中每個頁的 LSN 是否大于上次備份時的 LSN,如果是,則備份該頁,同時記錄此時的檢查點的 LSN
  • # 完備 ./xtrabackup --backup --target-dir=/backup/base # 增量 ./xtrabackup --backup --target-dir=/backup/delta --incremental-basedir=/backup/base # prepare ./xtrabackup --prepare --target-dir=/backup/base # apply incremental backup ./xtrabackup --prepare --target-dir=/backup/base --incremental-dir=/backup/delta

    8.7 復制

    8.7.1 原理

    復制步驟:

  • 主服務器把數據更新記錄到二進制日志中
  • 從服務器把主服務器的二進制日志拷貝到自己的中繼日志(RelayLog)中
  • 從服務器重做中繼日志中的時間,把更新應用到自己的數據庫中
  • 從服務器有兩個線程:一個是 IO 線程,負責讀取主服務器的二進制日志,并將其保存為中繼日志;另一個是 sql 線程,復制執行中繼日志。

    查看主從服務器的狀態:SHOW SLAVE STATUS 、SHOW MASTER STATUS。

    總結

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

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