mysqldump实现MySQL 数据库的备份及还原

一、mysqldump介绍

作用:mysqldump是mysql自带的备份和数据转移的工具。

特点:它只产生sql语句(即sql命令)封装在文件,而不是真实的数据。Mysqldump是逻辑备份,不是物理备份,备份的是SQL语句,而不是数据文件。Mysqldump适用于小型数据库,数据容量一般是在几个G大小,当数据量很大的情况下,不建议使用mysqldump。

导出对象:可以针对单个表、多个表、单个数据库、多个数据库、所有数据库。

格式:

#mysqldump [选项] 库名 [表名1] [表名2] … >/备份路径/备份文件名    //导出指定数据库的单个或多个表#mysqldump [选项] --databases 库名1 [库名2] … > /备份路径/备份文件名   //导出指定的数据库或多个数据库#mysqldump [选项] --all-databases > /备份路径/备份文件名        //导出所有的数据库:

#mysqldump -uroot -p123456--flush-logs bdqn >/opt/bdqn.sql

导出数据库bdqn,其中“—flush-logs”这个选项是完整备份完毕后开启一个新的binlog

#mysql-uroot -p123456 bdqn< /opt/bdqn.sql    //从备份文件导入数据库bdq

二、下面用一个具体的实验说明用mysqldump实现全库备份+binlog的数据恢复

1>开启binlog功能并重启服务

在配置文件/etc/my.cnf里增加:

log-bin=mysql-bin

默认二进制文件会产生在mysql的数据目录下,也可指定二进制文件的路径例:log-bin=/binlogDir/mysql-bin

service mysqld restart        #重启服务器

2>创建备份目录

mkdmkdir -p /home/backupir -p /opt

3>创建实验数据 

create database test;

use test;

create table M(id int,name varchar(10))engine=myisam;

insert into M values(1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e');

4>查看binlog日志:

5>开始全库备份(注意:全库备份不会备份binlog日志文件)

mysqldump -uroot [email protected] --flush-logs test > /home/backup/backupAll.sql

#把整个数据库test全部备份,并在备份完毕后开启一个新的binlog日志文件,备份的文件名为backupAll.sql

6>再次查看binlog日志:

说明全库备份备份了 binlog.000002之前所有的日志(这里只有 binlog.000001), binlog.000002是全备之后由于选项--flush-logs产生的

7>然后再对数据库进行一些操作,这些操作都会记录在binlog.000002(或其后的)日志文件里

create table I(id int,name varchar(10))engine=innodb;

insert into I values(11,'A'),(22,'B'),(33,'C'),(44,'D'),(55,'E');

select * from I;

8>备份全量备份后的二进制日志文件即binlog.000002和其之后产生的二进制文件

mysqlbinlog /opt/mysql/data/binlog.000002 > /home/backup/binlog.sql

#由于插入数据量的原因,这里只有一个binlog.000002,所以只备份binlog.000002,如果有多个的话可使用

mysqlbinlog /opt/mysql/data/binlog.000002  /opt/mysql/data/binlog.000003 > /home/backup/binlog.sql

9>删除数据库,开始数据恢复

drop database test;

create database test;    #创建一个空的数据库

#全量恢复

mysql -uroot [email protected] test  < /home/backup/backupAll.sql    #查看数据库,数据恢复到全量备份时的数据

#基于二进制日志的恢复

mysql -uroot [email protected] test  < /home/backup/binlog.sql         #查看数据库,数据全部恢复

附:

可通过一下命令,领用二进制文件进行恢复数据:(做全量恢复前,需要对二进制文件备份关闭日志记录,否则二进制文件会发生变动,无法恢复到之前的状态)

mysqlbinlog /opt/mysql/data/binlog.000002 --start-position=219 | mysql mysql -uroot -ppassword

mysqlbinlog /opt/mysql/data/binlog.000002 --stop-position=219 | mysql mysql -uroot -ppassword

mysqlbinlog /opt/mysql/data/binlog.000002  | mysql mysql -uroot -ppassword

三、多台服务器间,使用mysqldump备份和恢复数据库。单台服务器上也适用。

1)通过Xsheel访问服务器,在服务器下备份数据库或数据库中的表

2)备份命令:mysqldump -uroot -p databasename > backup.sql   #我把数据库word备份到当前目录下

         如果备份数据库中的表:mysqldump -u root -p databasename tablename> backup.sql

 备份命令: 

$time mysqldump -uroot -p --all -databases > backup.sql

$echo $?

$ls -lh backup.sql

命令1:备份所有的数据库,备份中有什么发生错误,会在屏幕中输出

命令2:确认上一条命令是否执行成功,返回0成功,非0非分过程出错

命令3:显示备份文件大小

以time命令作为mysqldump命令的前缀将提供有关实际消耗时间的有用信息。记录备份时间和大小是所有DBA都要做的重要事情。

在服务器上备份的文件可以通过命令:sz 文件名   #把备份的文件下载到本地电脑 

3)在另一服务器下通过rz命令,把备份的文件上传到该服务器上

4)数据库命令:mysql -uroot -p word < word.sql        #将数据库word恢复到数据库

     或者,在服务器上登录数据库,执行备份的SQL文件

    mysql > source backup.sql

注:-p后边可加数据库密码,不加的话,敲回车后输入数据库密码

注:备份的文件就是SQL语句的集合

可登陆mysql后通过执行SQL文件的方式来恢复数据

mysql  > source  /路径/backup.sql

猜你喜欢

转载自blog.csdn.net/LiuHuan_study/article/details/81411552