(十二)MySQL逻辑备份mysqldump

(1)简介

  • 语法

    mysqldump -h服务器 -u用户名 -p密码 [-P端口号] [参数] 数据库名 >备份文件.sql

  • 关于数据库:
    -A,--all-databases 所有库,会生成DDL语句(创建数据库的语句和进入数据库的语句,导入的时候不需要指定数据)
    test    数据库,没有指定其它参数,导入到数据的时候需要指定导入到哪个数据库,不会生成创建数据库的DDL语句,mysql -uroot -predhat testdb <1.sql
    test t1 t2  test数据库的表t1和t2 ,导入到数据的时候需要指定导入到哪个数据库,不会生成创建数据库的DDL语句
    -B, --databases bbs test mysql 多个数据库 ,会生成DDL语句(创建数据库的语句和进入数据库的语句,导入的时候不需要指定数据)mysql -uroot -predhat <1.sql
  • 其它参数说明
    --single-transaction  #InnoDB 一致性服务可用性
    -x  #MyISAM 一致性服务可用性
    -E   #备份时间调度器代码
    -R   #备份存储过程和存储函数
    -F    #备份之前刷新日志
    -d    #只备份表结构
    --triggers    #备份触发器
    --master-data=1|2    #用于记录binlog日志位置和文件名追加到文件中,一般使用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 [email protected] -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 [email protected]: 9Mf3.k)AOgEd
    mysqladmin -uroot -p‘9Mf3.k)AOgEd‘ password ‘[email protected]‘;

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

  • 关闭记录二进制日志,完整备份恢复
    #mysqladmin  -uroot -p‘[email protected]‘ 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‘[email protected]‘
  • 验证数据
    mysql> select * from testdb.test;
    +------+
    | id   |
    +------+
    |    1 |
    |    2 |
    |    2 |
    |    3 |
    |    4 |
    +------+
    5 rows in set (0.01 sec)

    (3)模拟删除数据恢复

    1)准备数据

    mysql -uroot -predhat -e "create database testdb"
    mysql -uroot -predhat -e "create table testdb.test(id int)"
    mysql -uroot -predhat -e "insert into testdb.test values(1)"

    2)完整备份

    mysqldump -uroot -predhat -A -R --single-transaction --master-data=1 --flush-logs >/backup/$(date +%F-%H)-mysql-all.sql
    生成目录:ll /backup/2018-04-25-10-mysql-all.sql 

    3)准备数据用于增量备份恢复

    mysql> insert into testdb.test values(2);
    mysql> flush logs;
    mysql> insert into testdb.test values(3);
    mysql> flush logs;
    mysql> insert into testdb.test values(4);
    mysql> flush logs;
    mysql> insert into testdb.test values(5);
    mysql> select * from testdb.test;
    +------+
    | id   |
    +------+
    |    1 |
    |    2 |
    |    3 |
    |    4 |
    |    5 |
    +------+

    4)删除数据库:注意删除数据库刷新一下二进制日志

    mysql> drop database testdb;
    mysql> flush logs;

    5)完全备份恢复

    mysql -uroot -predhat </backup/2018-04-25-10-mysql-all.sql

    6)获取备份文件的位置点

    # grep -i "change" /backup/2018-04-25-10-mysql-all.sql | head -1
    CHANGE MASTER TO MASTER_LOG_FILE=‘master.000002‘, MASTER_LOG_POS=154;

    7)获取删库的pos位置点

    [[email protected] ~]# mysqlbinlog -v /data/mydata/mysql-bin/master.000005 | grep -C 3 "^\bdrop\b"
    # mysqlbinlog -v /data/mydata/mysql-bin/master.000005 | grep -C 3 "^\bdrop\b"
    # at 472
    #180425 10:34:23 server id 1  end_log_pos 570 CRC32 0x1d4bcda1  Query   thread_id=24    exec_time=0 error_code=0
    SET TIMESTAMP=1524666863/*!*/;
    drop database testdb
    /*!*/;
    # at 570
    #180425 10:35:14 server id 1  end_log_pos 635 CRC32 0x836dc275  Anonymous_GTID  last_committed=2    sequence_number=3   rbr_only=no

    8)增量备份恢复

    master.000005 是删除数据库的二进制文件,上面把删除库语句上面at的pos位置找到,恢复这个文件的时候使用stop-position=472

    cd /data/mydata/mysql-bin
    #mysqlbinlog --start-position=154 master.000002 master.000003 master.000004 | mysql -uroot -p‘redhat‘
    # mysqlbinlog --stop-position=472 master.000005 | mysql -uroot -p‘redhat‘

    9)验证

    mysql> select * from testdb.test;
    +------+
    | id   |
    +------+
    |    1 |
    |    2 |
    |    3 |
    |    4 |
    |    5 |
    +------+

原文地址:https://www.cnblogs.com/lovelinux199075/p/8947592.html

时间: 2024-08-12 09:05:08

(十二)MySQL逻辑备份mysqldump的相关文章

MySQL逻辑备份mysqldump

一个用mysqldump做逻辑备份的小脚本 用于小数据量的备份,全库,按日期,按库,按表,进行分类 # date -s "2015/01/01" && bash mybackup.sh #!/bin/bash # 使用mysqldump进行逻辑备份 # 目录结构/backup/日期 # 每隔7天删除旧的备份目录 db_backup_root="/backup" today=`date +%Y%m%d` old_backup_dir=`date -d

(4.12)mysql备份还原——mysql逻辑备份之mysqldump

关键词:mysql逻辑备份介绍,mysqldump 1.mysql逻辑备份介绍 [1.1]备份内容:数据库的结构定义语句+数据内容的插入语句,备份出来的文件可以编辑 [1.2]使用场景:数据量较少的库,比较适合100G数据量以内的 逻辑备份的特点 (1)sql语句组成的文件,可以编辑截取部分单独使用. (2)备份文件比物理文件小 (3)可以细化到表/表的内容 (4)速度慢 (5)可以跨平台恢复/迁移 2.逻辑备份工具 [1.1]mysqldump(单线程).mysqlpump(多线程,5.7以后

MySQL 逻辑备份神器

简介: Mydumper.Myloader 是一个第三方的.开源的 MySQL 逻辑备份工具. 支持多线程,比起 mysqldump 要快很多,也能解决 innobackupex 备份工具对 MyISAM 引擎备份的不便. 多线程快速逻辑备份,支持快照功能. 下载地址:https://launchpad.net/mydumper/0.9/0.9.1/+download/mydumper-0.9.1.tar.gz 一.安装 Mydumper shell > yum -y install gcc g

逻辑备份,mysqldump,SELECT…INTO OUTFILE,恢复

逻辑备份 mysqldump mysqldump备份工具最初由Igor Romanenko编写完成,通常用来完成转存(dump)数据库的备份以及不同数据库之间的移植,例如从低版本的MySQL数据库升级到高版本的MySQL数据库,或者从MySQL数据库移植到Oracle和SQL Server等数据库等. mysqldump的语法如下: mysqldump [arguments] > file_name 如果想要备份所有的数据库,可以使用--all-databaes选项: mysqldump --a

mysql逻辑备份2种方案

mysql逻辑备份方案: 针对db进行逻辑备份(由于数据量较小,正在生产环境使用). mysql_backup.sh #!/bin/bash date=`date +%F-%H-%M` mkdir /opt/backup/${date} -p usesize=`du -s /opt/mysql |cut -f 1` biaozhun=`df  /opt/ |awk 'END{print ("'$usesize'"+$3)/$2*100+0.5}'|cut -d. -f1` ip=`gr

Linux命令:MySQL系列之十二--MySQL备份与还原(重要章节)

一.数据备份 备份类型:热备份.温备份和冷备份 热备份:读.写不受影响: 温备份:仅可以执行读操作: 冷备份:离线备份,读.写操作均中止: 备份方式:物理备份和逻辑备份: 物理备份:复制数据文件,速度快,保存数据库的所有数据结构,如果数据跟数据库关联性强, 导致物理备份可移植性能力不强: 逻辑备份:将数据导出至文本文件中,速度慢.丢失浮点数精度:方便使用文本处理工具 直接对其处理,可移植能力强: 备份策略:完全备份.增量备份和差异备份: 完全备份:备份全部数据: 增量备份:仅备份上次完全备份或者

mysql逻辑备份与还原工具mysqldump

(一)mysqldump介绍 mysqldump是MySQL自带的逻辑备份工具,类似于Oracle的expdp/impdp,mysqldump备份十分灵活,可以在以下级别对数据库进行备份: 实例下的所有数据库 某个或某几个数据库 某个数据库中的表 某个数据库中的表的某些记录 mysqldump的备份结果集有两种文件:一种是将数据转换为标准的SQL语句,另一种是按照指定的分隔符,输出为特定格式的平面文件. (二)mysqldump的用法 可以直接使用mysqldump命令查看mysqldump的用

MySQL逻辑备份利器-mydumper

关于mydumper的简介和下载请访问:https://launchpad.net/mydumper 简言之,mydumper是多线程逻辑备份,对于表和数据量很大的情况下,建议使用mydumper提高备份效率,比mysqldumper要快很多. 我为什么要用mydumper?是基于某个需求,比如我需要把某个库下的所有按日期分表的表备份并导入到新实例?如何实现? table_20170101 table_20170102 ...... table_20171231 一共三百多张表 开始我去尝试my

mysql逻辑备份(mysql dump的使用)

mysqldump 属于MySQL客户端工具 mysqldump备份工具对于MyISAM存储引擎实现备份是温备份,对innodb存储引擎是可以实现热备份. 使用mysqldump备份数据库可以实现完全备份 + 二进制日志文件,这样也算是完全备份 + 增量备份. 首先将这个数据库备份下来这就是完全备份,然后以后数据的变化再每天进行对二进制日志进行备份这就是增量备份. mysqldump命令的使用: 用法mysqldump  + 选项  +要备份的数据库 常用选项: db_name:      备份