一、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