(十二)MySQL逻辑备份mysqldump

(1)简介

(2)机器损坏备份恢复

前提:需要有完全备份和增量备份(二进制日志文件)

1)备份

  • 需要提前开启二进制日志

    #vim /etc/my.cnf
    log-bin=/data/mydata/mysql-bin/master
    server-id=1
    #mkdir /data/mydata/mysql-bin
    #chown -R mysql.mysql /data/mydata/mysql-bin
    #systemctl restart mysqld
  • 准备数据

    mysql> create database testdb;
    mysql> create table testdb.test(id int);
    mysql> insert into testdb.test values(1);
  • 完整备份

    mysqldump -uroot -pMysql@123 -A -R --single-transaction --master-data=1 --flush-logs >/backup/$(date +%F-%H)-mysql-all.sql   \\需要提前创建好备份目录
    生成目录:ll /backup/2018-04-26-00-mysql-all.sql
  • 生成一些数据,用于使用二进制日志恢复

    mysql>  insert into testdb.test values(2);
    mysql> flush logs;
    mysql>  insert into testdb.test values(2);
    mysql>  insert into testdb.test values(3);
    mysql> flush logs;
    mysql>  insert into testdb.test values(4);
    mysql> flush logs;
    mysql> select * from testdb.test;
    +------+
    | id   |
    +------+
    |    1 |
    |    2 |
    |    2 |
    |    3 |
    |    4 |
    +------+
  • 把二进制文件拷贝了其它目录,我这里就先放在/root目录了
    cp -ar /data/mydata/mysql-bin/ /root
  • 模拟数据库故障

    rm -rf /var/lib/mysql/*
    systemctl stop mysqld 
    chown -R mysql.mysql /var/lib/mysql
    systemctl start mysqld   \\无法启动
    rm -rf /var/lib/mysql/*   \\再删除数据
    systemctl start mysqld   \\再次可以启动了
    grep "password" /var/log/mysqld.log 
    2018-04-25T10:01:13.953346Z 1 [Note] A temporary password is generated for root@localhost: 9Mf3.k)AOgEd
    mysqladmin -uroot -p'9Mf3.k)AOgEd' password 'Mysql@123';

    2)恢复:注意恢复时关闭记录二进制日志,避免产生不必要的IO操作

  • 关闭记录二进制日志,完整备份恢复

    #mysqladmin  -uroot -p'Mysql@123' flush-logs
    mysql> set sql_log_bin=0;
    mysql> system mysql -uroot -predhat </backup/2018-04-26-00-mysql-all.sql
  • 获取备份记录的log_file文件和pos位置点

    # grep -i change /backup/2018-04-26-00-mysql-all.sql | head -1
    CHANGE MASTER TO MASTER_LOG_FILE='master.000003', MASTER_LOG_POS=154;
  • 增量备份恢复

    mysql> system mysqlbinlog --start-position=154 master.000003 master.000004 master.000005 master.000006 | mysql -uroot -p'Mysql@123'
  • 验证数据

    mysql> select * from testdb.test;
    +------+
    | id   |
    +------+
    |    1 |
    |    2 |
    |    2 |
    |    3 |
    |    4 |
    +------+
    5 rows in set (0.01 sec)

猜你喜欢

转载自www.cnblogs.com/lovelinux199075/p/8947592.html