在上一篇文章中我們提到熱備,熱備也就是在MySQL或者其他數(shù)據(jù)庫服務(wù)在運(yùn)行的情況下進(jìn)行備份。本文分享另外一種備份的方法,也就是熱拷貝。熱拷貝跟熱備很類似,只不過熱備使用mysqldump命令,熱拷貝使用mysqlhotcopy命令。熱拷貝的優(yōu)勢(shì)在于支持服務(wù)運(yùn)行中進(jìn)行備份,速度快,性能好;劣勢(shì)在于只能備份MyIsam的表,無法備份InnoDB的表。所以在生產(chǎn)環(huán)境中應(yīng)該酌情使用。
示意圖
熱備模擬
第一步,熱拷貝
1
2
3
|
[root@serv01 databackup]# mysqlhotcopy -uroot -p123456 --database larrydb > larrydb_hostcopy.sql Can't locate DBI.pm in @INC (@INC contains : /usr/ local /lib64/perl5 /usr/ local /share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/ local /mysql/bin/mysqlhotcopy line 25. BEGIN failed --compilation aborted at /usr/local/mysql/bin/mysqlhotcopy line 25. |
第二步,報(bào)錯(cuò)。因?yàn)檫@個(gè)命令是用perl寫的或者此命令需要perl支持,所以需要安裝perl
1
|
[root@serv01 databackup]# yum install perl* -y |
第三步,對(duì)數(shù)據(jù)庫larrydb熱拷貝
1
|
[root@serv01 databackup]# mysqlhotcopy --help |
#第一種寫法
1
|
[root@serv01 databackup]# mysqlhotcopy --user=root --password=123456 larrydb /databackup/ |
#第二種寫法
1
2
3
4
5
6
7
8
|
[root@serv01 databackup]# mysqlhotcopy -u root -p 123456 larrydb /databackup/ Flushed 2 tables with read lock (`larrydb`.`class`, `larrydb`.`stu`) in 0 seconds. Locked 0 views () in 0 seconds. Copying 5 files... Copying indices for 0 files... Unlocked tables. mysqlhotcopy copied 2 tables (5 files) in 0 seconds (0 seconds overall). |
第四步,模擬數(shù)據(jù)丟失
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
[root@serv01 databackup]# ll larrydb total 36 -rw-rw ----. 1 mysql mysql 8590 Sep 10 19:07 class.frm -rw-rw ----. 1 mysql mysql 65 Sep 10 19:07 db.opt -rw-rw ----. 1 mysql mysql 8618 Sep 10 19:07 stu.frm -rw-rw ----. 1 mysql mysql 48 Sep 10 19:07 stu.MYD -rw-rw ----. 1 mysql mysql 1024 Sep 10 19:07 stu.MYI mysql> use larrydb; Database changed mysql> show tables; + -------------------+ | Tables_in_larrydb | + -------------------+ | class | | stu | + -------------------+ 2 rows in set (0.00 sec) mysql> show create table class \G; *************************** 1. row *************************** Table : class Create Table : CREATE TABLE `class` ( `cid` int (11) DEFAULT NULL , `cname` varchar (30) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec) ERROR: No query specified mysql> show create table stu \G; *************************** 1. row *************************** Table : stu Create Table : CREATE TABLE `stu` ( `sid` int (11) DEFAULT NULL , `sname` varchar (30) DEFAULT NULL , `cid` int (11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 1 row in set (0.00 sec) ERROR: mysql> drop table class,stu; Query OK, 0 rows affected (0.01 sec) mysql> show tables; Empty set (0.00 sec) #這樣刪除會(huì)出錯(cuò),不要這樣刪除 [root@serv01 databackup]# rm -rf /usr/ local /mysql/data/larrydb/* [root@serv01 databackup]# rm -rf /usr/ local /mysql/data/larrydb/ |
第五步,恢復(fù)數(shù)據(jù)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
[root@serv01 databackup]# cp larrydb /usr/ local /mysql/data/ -arvf `larrydb ' -> `/usr/local/mysql/data/larrydb' `larrydb/stu.MYI ' -> `/usr/local/mysql/data/larrydb/stu.MYI' `larrydb/stu.MYD ' -> `/usr/local/mysql/data/larrydb/stu.MYD' `larrydb/stu.frm ' -> `/usr/local/mysql/data/larrydb/stu.frm' `larrydb/db.opt ' -> `/usr/local/mysql/data/larrydb/db.opt' `larrydb/class.frm ' -> `/usr/local/mysql/data/larrydb/class.frm' mysql> use larrydb; Database changed mysql> show tables; + -------------------+ | Tables_in_larrydb | + -------------------+ | class | | stu | + -------------------+ 2 rows in set (0.00 sec) mysql> select * from class; ERROR 1146 (42S02): Table 'larrydb.class' doesn't exist mysql> select * from stu; + ------+---------+------+ | sid | sname | cid | + ------+---------+------+ | 1 | larry01 | 1 | | 2 | larry02 | 2 | + ------+---------+------+ 2 rows in set (0.00 sec) mysql> drop database larrydb; Query OK, 2 rows affected (0.00 sec) #再次導(dǎo)入 [root@serv01 databackup]# mysql -uroot -p123456 < larrydb.sql mysql> use larrydb; Database changed mysql> show tables; + -------------------+ | Tables_in_larrydb | + -------------------+ | class | | stu | + -------------------+ 2 rows in set (0.00 sec) mysql> select * from stu; + ------+---------+------+ | sid | sname | cid | + ------+---------+------+ | 1 | larry01 | 1 | | 2 | larry02 | 2 | + ------+---------+------+ 2 rows in set (0.00 sec) mysql> select * from class; + ------+--------+ | cid | cname | + ------+--------+ | 1 | linux | | 2 | oracle | + ------+--------+ 2 rows in set (0.00 sec) |
本文介紹了另一種備份--熱拷貝,與熱備的區(qū)別在于使用的命令不同,熱拷貝使用mysqlhotcopy命令,希望大家可以親自動(dòng)手操作一下!