Mysqldump邏輯備份恢復與binglog日誌恢復

前言

環境:cetos7
數據庫:Mysql7.4

Mysqldump簡介

  1. mysqldump 是 MySQL 自帶的邏輯備份工具。
    它的備份原理是通過協議連接到 MySQL 數據庫,將需要備份的數據查詢出來,將查詢出的數據轉換成對應的insert 語句,當我們需要還原這些數據時,只要執行這些 insert 語句,即可將對應的數據還原。
  2. 語法:
    遠程庫: mysqldump -h 服務器 -u數據庫用戶名 -p數據庫密碼 要備份的數據庫名 > 備份文件.sql
    本地庫: mysqldump -u數據庫用戶名 -p數據庫密碼 要備份的數據庫名 > 備份文件.sql

  3. 命令參數:
-A, --all-databases #備份所有庫

-B, --databases  #備份多個數據庫

-F, --flush-logs #備份之前刷新binlog日誌

-set, --default-character #指定導出數據時採用何種字符集,如果數據表不是採用默認的latin1字符集的話,那麼導出時必須指定該選項,否則再次導入數據後將產生亂碼問題。

-d, --no-data, #不導出任何數據,只導出數據庫表結構。

-f, --force #即使在一個表導出期間得到一個SQL錯誤,繼續。

--lock-tables #備份前,鎖定所有數據庫表 #此項默認數據庫是開啓的,備份時默認鎖表。

--single-transaction # 此項解鎖 ,數據庫備份時不鎖表,保證數據的一致性和服務的可用性 


備份數據庫

1. 備份所有庫
mysqldump -u數據庫用戶名 -p'數據庫密碼' -A > /opt/$(date +%F).sql # 設置備份文件名爲當前系統時間

2. 備份指定庫
mysqldump -u數據庫用戶名 -p'數據庫密碼' -B 庫名1 庫名2 庫名3.... > /opt/$(date +%F).sql 

恢復備份庫

恢復停止binlog日誌,應爲這等於是在執行sql語句,無需記錄日誌
1. 恢復所有庫
mysql -u數據庫名稱 -p'數據庫密碼'  < /備份的庫文件.sql
2. 恢復指定庫
步驟一.
創建一個新庫,create database new; 假設創建一個new的新庫。
步驟二.
mysql -u數據庫名稱 -p'數據庫密碼' new < /備份的庫文件.sql

備份數據表

1. 備份指定表
mysqldump -u數據庫用戶名 -p'數據庫密碼'  庫名 表名 > /備份文件.sql

2. 備份多個表
mysqldump -u數據庫用戶名 -p'數據庫密碼'  庫名 表名1 表名2...  > /備份文件.sql

3. 只備份表結構
mysqldump -u數據庫用戶名 -p'數據庫密碼' -d 庫名 表名 > /備份文件.sql

4. 只導出表數據
步驟一.
 mysql> show variables like "secure_file_priv";  ----查詢導入導出的目錄,可修改。修改完要在
 /etc/my.cnf 裏[mysqld] 追加secure_file_priv=/新的路徑,然後重啓。
步驟二.
登陸數據查看數據
mysql> show databases;    #找到test庫
mysql> use test    #進入test庫
mysql> select * from t3 into outfile '/sql/test.t3.bak'; #導出t3表的數據
步驟三.
數據的導入
mysql> delete from t3;   #先將原來表裏面的數據清除掉,保證是空表,只保留表結構
mysql> load data infile '/sql/test.t3.bak' into table t3;
如果將數據導入別的表,需要創建這個表並創建相應的表結構。

恢復數據表

方法一. 
mysql -u數據庫用戶名 -p'數據庫密碼'  新建一個庫  < 備份的庫.sql

方法二.
創建一個庫
create table nwe;
進入庫
use nwe;
執行
mysql> source 備份的庫;  -------加路徑和備份的文件 

通過binlog日誌恢復

vim /etc/my.cnf                   #修改配置文件,開啓數據庫binlog日誌
log-bin=/var/log/sql-bin/mylog
server-id=1

[root@mysql-server ~]# mkdir /var/log/sql-bin    #創建日誌目錄
[root@mysql-server ~]# chown mysql.mysql /var/log/sql-bin  #給予日誌目錄mysql權限
[root@mysql-server ~]# systemctl restart mysqld     # 重啓數據庫開啓日誌
   mysql> flush logs;                          # 刷新binlog日誌會截斷產生新的日誌文件

[root@mysql-server sql-bin]# mysqlbinlog mylog.000001  #查看日誌文件 at1  log_pos 20 爲結束

恢復 日誌中at1 到log_pos 20 的操作
[root@mysql-server sql-bin]# mysqlbinlog --start-position 1 --stop-position 20 mylog.000001 | mysql -u數據庫用戶名 -p'數據庫密碼'


在數據庫中 binlog日誌的其他操作:
 1.查看所有binlog日誌列表
mysql> show master logs;

2.查看master狀態,即最後(最新)一個binlog日誌的編號名稱,及其最後一個操作事件pos結束點(Position)值
mysql> show master status;

3.刷新log日誌,自此刻開始產生一個新編號的binlog日誌文件
mysql> flush logs;
注:每當mysqld服務重啓時,會自動執行此命令,刷新binlog日誌;在mysqldump備份數據時加 -F 選項也會刷新binlog日誌;

4.重置(清空)所有binlog日誌
mysql> reset master;

5.查詢第一個(最早)的binlog日誌:
mysql> show binlog events;

6.指定查詢 mysql-bin.000002 這個文件:
mysql> show binlog events in 'mysql-bin.000002';

7.指定查詢 mysql-bin.000002 這個文件,從pos點:8224開始查起:
mysql> show binlog events in 'mysql-bin.000002' from 8224;

8.指定查詢 mysql-bin.000002 這個文件,從pos點:8224開始查起,查詢10條
mysql> show binlog events in 'mysql-bin.000002' from 8224 limit 10;

9.指定查詢 mysql-bin.000002 這個文件,從pos點:8224開始查起,偏移2行,查詢10條
mysql> show binlog events in 'mysql-bin.000002' from 8224 limit 2,10\G;

======================================================================================================================================================================================================================================================================================================
辛苦瀏覽觀看,如果對你有幫助,請順手點個贊吧 (σ゚∀゚)σ…:*☆

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章