MySQL备份与恢复之热拷贝(4)

所属分类: 数据库 / Mysql 阅读数: 804
收藏 0 赞 0 分享

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

示意图

热备模拟

第一步,热拷贝

[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.

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

[root@serv01 databackup]# yum install perl* -y

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

[root@serv01 databackup]# mysqlhotcopy --help

#第一种写法

[root@serv01 databackup]# mysqlhotcopy --user=root --password=123456 larrydb /databackup/

#第二种写法

[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).

 
第四步,模拟数据丢失

[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)
 
#这样删除会出错,不要这样删除
[root@serv01 databackup]# rm -rf /usr/local/mysql/data/larrydb/*
[root@serv01 databackup]# rm -rf /usr/local/mysql/data/larrydb/

 
第五步,恢复数据

[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)

#再次导入
[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)

本文介绍了另一种备份--热拷贝,与热备的区别在于使用的命令不同,热拷贝使用mysqlhotcopy命令,希望大家可以亲自动手操作一下!

更多精彩内容其他人还在看

Mac 将mysql路径加入环境变量的方法

这篇文章主要介绍了Mac如何将mysql路径加入环境变量,有需要的朋友好按照下面的步骤操作即可
收藏 0 赞 0 分享

mysql 增加修改字段类型及删除字段类型

本节主要介绍了mysql如何增加修改字段类型及删除字段类型,需要的朋友可以参考下
收藏 0 赞 0 分享

Mysql主从复制(master-slave)实际操作案例

这篇文章主要介绍了Mysql主从复制(master-slave)实际操作案例,同时介绍了Mysql grant 用户授权的相关内容,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL异常处理浅析

这篇文章主要介绍了MySQL的异常处理,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL存储毫秒数据的方法

MySQL中没有可以直接存储毫秒数据的数据类型,但是不过MySQL却能识别时间中的毫秒部分。这篇文章主要介绍了MySQL存储毫秒数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

MySql中使用INSERT INTO语句更新多条数据的例子

这篇文章主要介绍了MySql中使用INSERT INTO语句更新多条数据的例子,MySQL的特有语法,需要的朋友可以参考下
收藏 0 赞 0 分享

Windows下MySql错误代码1045的解决方法

这篇文章主要介绍了Windows下MySql错误代码1045的解决方法,文中还包含了2个Linux下的解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句

这篇文章主要介绍了mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句,一般在一些统计报表中比较常用这个时间段,需要的朋友可以参考下
收藏 0 赞 0 分享

mysql的中文数据按拼音排序的2个方法

这篇文章主要介绍了mysql的中文数据按拼音排序的2个方法,用于一些特殊环境,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL定期分析检查与优化表的方法小结

听DBA的人说,相比oracle,MySQL就是一个玩具级别的数据库,在网易门户中,DBA基本很少去管理到MySQL的东西,所以我们产品使用到的MySQL的一些配置和优化还是需要我们开发人员自己动手,下面就简单介绍一下实用的定期优化方法
收藏 0 赞 0 分享
查看更多