备份现有数据库
-
备份:mysqldump -uroot -p123123 bss_box -l -F>/tmp/bss_box.sql
-l:读锁,即有读无写入的权限
-F:flush logs,可以重新生成新的日志文件,当然也包括log-bin日志
-
查看binlog日志:show master status\G;
-
清除binlog日志:reset master;
-
恢复:mysql -uroot -p123123 bss_box -v -f < /tmp/bss_box.sql
-v:查看导入的详细信息
-f:是当中间遇到错误时可以skip过去,继续执行下面的语句
模拟通过binlog日志恢复数据库数据
-
创建模拟数据库和数据表(数据库bss_box和数据表test)
create database bss_box; #创建数据库bss_box
create table test(id int not null auto_increment primary key, name varchar(11)) engine Myisam charset utf8; #创建数据表test;
-
插入2行数据
insert into test(name) values('诺基亚');
insert into test(name) values('三星');
-
备份现有数据库(注:mysql备份mysqldump命令需到mysql的bin目录才生效)
cd /usr/local/mysql/bin/
mysqldump -root -p123123 bss_box -l -F>/tmp/bss_box.sql;
备份前后binlog的变化:
-
备份完数据,有新数据插入,插入3行数据
insert into test(name) values('苹果');
insert into test(name) values('小米');
insert into test(name) values('中兴');
-
数据库损坏或人为删除
drop tables test;
-
用步骤3备份的数据库/tmp/bss_box.sql恢复部分数据
mysql -uroot -p123123 bss_box -v -f < /tmp/bss_box.sql
-
备份后又插入的数据怎么恢复?只能通过binlog来恢复了
查看binlog日志:
/usr/local/mysql/bin/mysqlbinlog --no-defaults mysql-binlog.000005|more
找到恢复的时间点或位置:
/usr/local/mysql/bin/mysqlbinlog --no-defaults --stop-position="499" mysql-binlog.000005|mysql -uroot -p123123
主要参数:可以根据时间点和位置
--stop-position="100"
--start-position="50"
--stop-date="2014-04-05 12:20:00"
--start-date="2014-02-01 12:14:00"
恢复前后数据对比: