MySQL主从数据恢复(备份+binlog日志)

分类: 服务器 > Mysql

备份现有数据库

  1. 备份:mysqldump -uroot -p123123 bss_box -l -F>/tmp/bss_box.sql

    -l:读锁,即有读无写入的权限

    -F:flush logs,可以重新生成新的日志文件,当然也包括log-bin日志

  2. 查看binlog日志:show master status\G;

  3. 清除binlog日志:reset master;

  4. 恢复:mysql -uroot -p123123 bss_box -v -f < /tmp/bss_box.sql

    -v:查看导入的详细信息

    -f:是当中间遇到错误时可以skip过去,继续执行下面的语句

 

模拟通过binlog日志恢复数据库数据

  1. 创建模拟数据库和数据表(数据库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. 插入2行数据

    insert into test(name) values('诺基亚');

    insert into test(name) values('三星');

  3. 备份现有数据库(注:mysql备份mysqldump命令需到mysql的bin目录才生效)

    cd /usr/local/mysql/bin/

    mysqldump -root -p123123 bss_box -l -F>/tmp/bss_box.sql;

    备份前后binlog的变化:

  4. 备份完数据,有新数据插入,插入3行数据

    insert into test(name) values('苹果');

    insert into test(name) values('小米');

    insert into test(name) values('中兴');

  5. 数据库损坏或人为删除

    drop tables test;

  6. 用步骤3备份的数据库/tmp/bss_box.sql恢复部分数据

    mysql -uroot -p123123 bss_box -v -f < /tmp/bss_box.sql

  7. 备份后又插入的数据怎么恢复?只能通过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"

    恢复前后数据对比:

 

 

来源:原创 发布时间:2020-02-20 22:14:31