1. 程式人生 > >MySQL完全備份與恢復

MySQL完全備份與恢復

In 差異 ble orm 掌握 查看 pool 需要 服務器

MySQL完全備份與恢復

技能目標

  • 掌握使用nysqldump進行備份方法
  • 掌握mysql數據恢復的方法

MySQL完全備份

1、數據庫備份的重要性

(1)提高系統的高可用性和災難可恢復性,在數據庫崩潰時沒有備份就無法找回以前的數據
(2)使用數據庫備份還原數據庫,是數據庫崩潰時提供數據恢復的最小代價
(3)備份數據庫是一種防範災難的重要手段

2:數據庫奔潰錯誤的幾種原因

(1)程序錯誤:指對數據庫操作程序出現錯誤造成數據丟失
(2)人為錯誤:指有人為原因造成的數據丟失和破壞
(3)計算機失敗:指運行數據庫服務器操作或軟件損壞
(4)磁盤失敗:指硬盤等存儲數據的硬件設備,因長時間運行後造成的損壞而造成的數據丟失
(5)災難(入火災,地震)和偷竊:指發生自然災害後造成的大量數據丟失

2、數據庫備份的分類

(1)物理備份:指對數據庫操作系統的物理文件(入數據文件、日誌文件)的備份
冷備份:在數據庫關閉狀態下進行操作
熱備份:在數據庫運行狀態下進行備份
(2)邏輯備份:指對數據邏輯組件(如表、數據庫等對象)的備份

從備份角度可分為完全備份,差異備份,增量備份

(1)完全備份:每次對數據進行完整的備份
(2)差異備份:在完全備份後下面進行的操作進行備份但這個可能會造成重復備份
(3)增量備份:在完全備份後操作一次備份一次不會出現重復備份

mysql備份演練

物理備份

用tar打包的文件夾備份
#數據庫文件都在/usr/local/mysql/data文件夾裏
[root@localhost ~]# cd /usr/local/mysql/data/
[root@localhost data] ls #整個data文件夾進行備份
@94f6@884c@5ba2@6237@8868  ib_buffer_pool  ib_logfile0  ibtmp1  performance_schema  sys
auto.cnf                   ibdata1         ib_logfile1  mysql   shcool
[root@localhost ~] tar Jcvf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data/
[root@localhost ~] cd /opt/
[root@localhost opt] ls #會壓縮成tar.xz格式的壓縮包
mysql-2018-07-02.tar.xz
[root@localhost opt] du -sh /usr/local/mysql/data/
134M    /usr/local/mysql/data/
[root@localhost opt] du -sh  #用du -sh查看包的大小節省了很多空間現在把data的文件夾刪除都沒事 /opt/mysql-2018-07-02.tar.xz 
704K    /opt/mysql-2018-07-02.tar.xz
#解壓縮恢復數據文件
[root@localhost opt] tar Jxvf /opt/mysql-2018-07-02.tar.xz /usr/local/mysql/data/

邏輯備份

用mysqldump工具備份
格式
mysqldump -u 用戶 -p [數據庫名或表名] > /備份路徑/備份文件名.sql #以.sql結尾
演示實例
mysql> show databases;  #對shcool數據庫進行完全備份
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ×××表         |
| mysql              |
| performance_schema |
| shcool             |
| sys                |
+--------------------+
6 rows in set (0.00 sec)
[root@localhost opt]# mysqldump -u root -p shcool > /opt/shcool.sql #-p後面跟密碼可以免交互
Enter password: 
[root@localhost opt]# ls
shcool.sql
對shcool數據庫中info表進行備份
mysql> show tables;
+------------------+
| Tables_in_shcool |
+------------------+
| info             |
+------------------+
1 row in set (0.00 sec)
[root@localhost opt] mysqldump -u root -p shcool info > /opt/info.sql
對多個數據庫進行備份
格式
mysqldump -u root -p --databases [數據庫] [數據庫] > /備份路徑/備份名
mysql> show databases;  #對shcool數據庫和mysql數據庫進行備份
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ×××表         |
| mysql              |
| performance_schema |
| shcool             |
| sys                |
+--------------------+
[root@localhost ~] mysqldump -u root -p --databases shcool mysql > /opt/shcool-mysql.sql
[root@localhost ~] cd /opt/
[root@localhost opt] ls
shcool-mysql.sql
對所有數據庫進行備份
格式
mysqldump -u root -p --all-databases > /備份路徑/備份名
[root@localhost opt] mysqldump -u root -p --all-databases > /opt/all.sql
Enter password:
[root@localhost opt] ls
all.sql        
備份表結構(因為有時候我們不需要表裏面的數據只想要表的結構如果用create tables 創建表的話會很麻煩)下面就有一個只針對表結構進行備份
格式
mysqldump -u root -p -d [數據庫名] [表名] > /備份路徑/備份名
[root@localhost opt] mysqldump -u root -p -d mysql usr > /opt/usr.sql
Enter password: 
[root@localhost opt] ls
usr.sql

有備份就有恢復,恢復兩種方法

1:source 在mysql數據庫裏進行操作
格式:mysql>source /備份的路徑
2:mysql 不登陸數據庫在Linux模式下操作
格式:[root@localhost ~] mysql -u root -p [恢復的數據庫名] < /備份路徑/備份的名

實例

source應用
#把備份的shcool數據庫恢復(註數據庫是由表構成的所以要恢復數據要先創建chcool的數據庫進入數據庫用source恢復)
mysql> show databases;  #這邊沒有shcool數據庫先創建
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ×××表         |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
mysql> create database shcool;  #創建數據庫
Query OK, 1 row affected (0.00 sec)

mysql> show databases;         #已經有這個數據庫了
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ×××表         |
| mysql              |
| performance_schema |
| shcool             |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

mysql> use shcool;  #進入數據庫看有沒有表
Database changed
mysql> show tables;  #裏面沒有任何表
Empty set (0.00 sec)
mysql> source /opt/shcool.sql
Query OK, 0 rows affected (0.00 sec)  #執行成功

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
mysql> show tables;    #數據庫恢復成功
+------------------+
| Tables_in_shcool |
+------------------+
| info             |
+------------------+
1 row in set (0.00 sec)

用mysql在linux模式下恢復數據庫

#同樣先創建同名數據庫
[root@localhost opt] mysql -u root -p shcool < /opt/shcool.sql 
Enter password: 
[root@localhost opt] mysql -u root -p 
Enter password: 
mysql> show tables;   #恢復完成
+------------------+
| Tables_in_shcool |
+------------------+
| info             |
+------------------+
1 row in set (0.00 sec)
總結一下:
恢復數據庫,恢復數據庫必須要有一個同名數據庫才能恢復數據庫裏面的表不管用mysql命令還是source命令都是一樣的

MySQL完全備份與恢復