您好,登錄后才能下訂單哦!
在MySQl中我們備份數據一般有幾種方式
熱備份 溫備份 冷備份
熱備份指的是當數據庫進行備份時, 數據庫的讀寫操作均不是受影響
溫備份指的是當數據庫進行備份時, 數據庫的讀操作可以執行, 但是不能執行寫操作
冷備份指的是當數據庫進行備份時, 數據庫不能進行讀寫操作, 即數據庫要下線
這里我們說個MYSQL數據庫的備份與恢復的企業案例
條件:
1.具備全量備份(mysqldump)。
2.除全量備份以外,還有全量備份之后產生的的所有binlog增量日志。
首先創建環境
#創建個名為oldboy的數據庫
CREATE DATABASE oldboy;
#切到oldboy庫中
use `oldboy`;
#鍵表
CREATE TABLE `oldboy` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
INSERT INTO `oldboy` VALUES (1,'oldboy'),(2,'oldgirl'),(3,'inca'),(4,'zuma'),(5,'kaka');
#查看下oldboy庫中的表
mysql> select * from oldboy;
+----+---------+
| id | name |
+----+---------+
| 1 | oldboy |
| 2 | oldgirl |
| 3 | inca |
| 4 | zuma |
| 5 | kaka |
+----+---------+
5 rows in set (0.01 sec)
mysql> quit
#將時間改為晚上12點,準備個存放備份文件的目錄
mkdir /data/backup -p
date -s "2017/06/22"
#備份庫
mysqldump -uroot -poldboy123 -B --master-data=2 --single-transaction oldboy|gzip>/data/backup/oldboy_$(date +%F).sql.gz
#此時我們的binlog日志已經分割了
#增加兩個表
mysql -uroot -poldboy123 -e "use oldboy;insert into oldboy values(6,'bingbing');"
mysql -uroot -poldboy123 -e "use oldboy;insert into oldboy values(7,'xiaoting');"
#查看下
mysql -uroot -poldboy123 -e "select * from oldboy.oldboy;"
+----+----------+
| id | name |
+----+----------+
| 1 | oldboy |
| 2 | oldgirl |
| 3 | inca |
| 4 | zuma |
| 5 | kaka |
| 6 | bingbing |
| 7 | xiaoting |
+----+----------+
#模擬誤刪數據庫
date -s "2017/06/22 11:40"
mysql -uroot -poldboy123 -e "drop database oldboy;show databases;"
#出現問題10分鐘后,發現問題,刪除了數據庫了.
#開始恢復準備
#采用iptables防火墻屏蔽所有應用程序的寫入。
[root@oldboy ~]# iptables -I INPUT -p tcp --dport3306 ! -s 172.16.1.51 -j DROP #<==非172.16.1.51禁止訪問數據庫3306端口。
#拷貝binlog文件到剛才創建的目錄中
cp -a /application/mysql/logs/oldboy-bin.* /data/backup/
cd /data/backup
#解壓備份文件
zcat oldboy_2017-06-22.sql.gz>oldboy_2017-06-22.sql
#查看備份后執行的命令放在哪個binlog下
sed -n '22p' oldboy_2017-06-22.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='oldboy-bin.000003',MASTER_LOG_POS=2623;
#講binlog轉換格式
mysqlbinlog -d oldboy --start-position=2623 oldboy-bin.000003-r bin.sql
#這里要對應上面查看的
#開始恢復
#開始恢復全備。恢復順序很重要
[root@db02 backup]# mysql –uroot –poldboy123<oldboy_2017-06-22.sql
[root@db02 backup]# mysql -e "showdatabases;"
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| oldboy |
| oldgirl |
| performance_schema |
+--------------------+
[root@db02 backup]# mysql -e "useoldboy;select * from oldboy;"
+----+---------+
| id | name |
+----+---------+
| 1 |oldboy |
| 2 |oldgirl |
| 3 |inca |
| 4 |zuma |
| 5 |kaka |
+----+---------+
#開始恢復增量
[root@db02 backup]# mysql oldboy <bin.sql
[root@db02 backup]# mysql -e "useoldboy;select * from oldboy;"
+----+----------+
| id | name |
+----+----------+
| 1 |oldboy |
| 2 |oldgirl |
| 3 |inca |
| 4 |zuma |
| 5 |kaka |
| 6 |bingbing |
| 7 |xiaoting |
+----+----------+
恢復完畢。
調整iptables允許用戶訪問.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。