mysql热拷贝_MySQL备份与恢复之热拷贝

一 热拷贝

在上一篇文章中我们提到热拷贝,热拷贝也就是在MySQL或者其他数据库服务在运行的情况下进行备份。本文分享另外一种备份的方法,也就是热拷贝。热拷贝跟热备很类似,只不过热备使用mysqldump命令,热拷贝使用mysqlhotcopy命令。热拷贝的优势在于支持服务运行中进行备份,速度快,性能好;劣势在于只能备份MyIsam的表,无法备份InnoDB的表。所以在生产环境中应该酌情使用。

二 示意图

c3a7dcb31ae8254677c0a881d37a3a0c.png

三 热备模拟

第一步,热拷贝

[[email protected] 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.

第二步,报错。因为这个命令是用perl写的或者此命令需要perl支持,所以需要安装perl

[[email protected] databackup]# yum install perl* -y

第三步,对数据库larrydb热拷贝

[[email protected] databackup]# mysqlhotcopy --help

#第一种写法

[[email protected] databackup]# mysqlhotcopy --user=root --password=123456 larrydb /databackup/

#第二种写法

[[email protected] 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).

第四步,模拟数据丢失

[[email protected] 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)

#这样删除会出错,不要这样删除

[[email protected] databackup]# rm -rf /usr/local/mysql/data/larrydb/*

[[email protected] databackup]# rm -rf /usr/local/mysql/data/larrydb/

第五步,恢复数据

[[email protected] 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)

#再次导入

[[email protected] 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)

四 相关阅读

我的邮箱: [email protected] 新浪微博: @jutdb

微信公众平台:JustOracle(微信号:justoracle)

数据库技术交流群:336882565(加群时验证 From CSDN XXX)

All is well

2013年11月10日

By Larry Wen

1357456262_5409.jpg

1351182273_5476.png.thumb.jpg  1351182268_8254.png.thumb.jpg

@Wentasy 博文仅供参考,欢迎大家来访。如有错误之处,希望批评指正。原创博文如需转载请注明出处,谢谢 :) [CSDN博客]

作者:Wentasy 发表于2013-11-10 11:33:03 原文链接

阅读:106 评论:0 查看评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值