zoukankan      html  css  js  c++  java
  • MySQL数据库的mysqldump完全备份、binlog的增量备份与还原

    MySQL数据库的mysqldump完全备份、binlog的增量备份与还原

    一、 备份的目的:

    做灾难性恢复:对损坏的书籍进行恢复和还原

    需求改变:因需求改变而需要把数据还原到改变以前

    二、 备份需要考虑的问题:

    可以容忍丢失多长时间的数据;(数据不能百分百全部恢复)

    恢复数据要在多长时间内完成;

    恢复的时候是否需要持续提供服务;

    恢复的对象:是整个库、多个表,还是单个库、单个表。

    备份的数据库大小不超过50G

    三、 按照备份时对数据库的影响范围分类:

    hot backup :指在数据库运行中直接备份,对正在运行的数据库没有任何影响;称为 在线备份(Online

    Backup) (备份的同时,业务不受影响)

    cold backup:指在数据库停止的情况下进行备份;称为 离线备份(Offline

    Backup) (需要关mysql服务,读写请求均不允许状态下进行)

    warm backup:同样在数据库运行时进行备份,但仅支持读请求,不允许写请求;例如:加一个读锁以保证备份数据的一致性 (服务在线,但仅支持读请求,不允许写请求)

    四、 按照备份后文件内容分类:

    逻辑备份:指备份后的文件内容是可读的,通常为文本文件,内容一般是SQL语句,或者是表内的实际数据;适用于数据库的升级和迁移,回复时间较长

    物理文件备份:对数据库物理文件(如数据文件、日志文件等)的备份;恢复时间较短

    支持热备份与冷备份

    五、 按照备份数据库的内容分类:

    完全备份:每次对数据进行完整的备份(备份的是数据库中的全部数据),包含用户表、系统表、索引、视图和存储过程等,但需要花费更多的时间和存储空间。

    差异备份:在上一次完全备份原有的基础上,对更新的数据进行备份(对上一次完整备份后更新的数据)

    增量备份:在上次备份的基础上,对更新的数据进行备份

    日志备份:二进制日志备份

    注:建议的备份策略

    完全备份 + 增量备份 + 二进制日志

    完全备份 + 差异备份 + 二进制日志

    六、 逻辑备份工具 mysqldump:

    mysqldump属于单线程(备份时间较长),通过tcp协议连接到mysql数据库,将数据转换成标准的SQL语句

    优点:

    备份“粒”度灵活;既可以针对整个MySQL服务,也可以只备份某个或者某几个DB,或者还可以指定只备份某个或者某几个表对象,甚至可以实现只备份表中某些符合条件的记录(-w, --where: 只导出符合条件的记录)。

    缺点:

    a) 当数据是浮点数时,会出现精度丢失。

    b) Mysqldump的备份过程属于逻辑备份,备份速度、恢复速度与物理备份工具相比较慢,而且mysqldump备份的过程是串行化的,不会并行的进行备份,当数据量较大时,一般不会使用mysqldump进行备份,因为效率较低。只适合备份50G以下的数据

    mysqldump对innodb存储引擎支持热备

    mysqldump对myisam存储引擎只支持温备

    七、 导出数据的语法及选项:

    语法:mysqldump [options] [db_name [tbl_name …]]>导出的文件名.sql

    语法:mysqldump 选项 库名.表名(一个或多个) >导出的文件名.sql

    常用的参数:

    -?, --help: 显示帮助信息,英文的;

    -u, --user: 指定连接的用户名;

    -p, --password: 指定用户的密码,可以交互输入密码;

    -S , --socket: 指定socket文件连接,本地登录才会使用。

    -h, --host: 指定连接的服务器名称或者IP。

    -P, --port=: 连接数据库监听的端口。

    –default-character-set:

    设置字符集,默认是UTF8。

    -A,–all-databases:

    导出所有数据库。不过默认情况下是不会导出information_schema系统数据库。

    -B, --databases:

    导出指定的某个/或者某几个数据库,参数后面所有名字都被看作数据库名,用空格隔开,包含CREATE DATABASE创建库的语句。

    –tables: 导出指定表对象,参数格式为“库名

    表名”,默认该参数将覆盖-B参数。

    -w, --where: 只导出符合条件的记录。

    -l, --lock-tables:

    默认参数,锁定读取的表对象,想导出一致性备份的话最好使用该参数,但会导致无法对表执行写入操作。

    –single-transaction:

    该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于innoDB存储引擎。

    在InnoDB导出时会建立一致性快照,在保证导出数据的一致性前提下,又不会堵塞其他会话的读写操作。指定这个参数后,其他连接不能执行ALTER TABLE、DROP TABLE 、RENAME TABLE、TRUNCATE TABLE这类语句,事务的隔离级别无法控制DDL语句。本选项和–lock-tables 选项是互斥的,使用参数–single-transaction会自动关闭该选项。

    -d, --no-data: 只导出表结构,不导出表数据。

    -t, --no-create-info: 只导出数据,而不添加CREATE TABLE

    语句。

    -f, --force: 即使遇到SQL错误,也继续执行。

    -F, --flush-logs: 在执行导出前先刷新二进制日志文件,一般来说,如果是全库导出,建议先刷新日志文件,否则就不用了。

    -x, --lock-all-tables: 在导出任务执行期间锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局锁定,并且自动关闭–single-transaction 和–lock-tables 选项。这个参数副作用比较大,这是全库锁定,备份执行过程中,该库无法进行读写操作,不是所有业务场景都能接受的。请慎用。(读写操作无法执行)

    -n, --no-create-db: 不生成建库的语句CREATE DATABASE … IF EXISTS,即使指定—all-databases或–databases这类参数。

    –triggers: 导出表的触发器脚本,默认就是启用状态。使用–skip-triggers禁用它。

    -R, --outines: 导出存储过程以及自定义函数

    导出数据:

    A:导出所有数据库

    mysql -u用户名

    -p密码 -A>导出的文件名.sql

    #mysqldump -uroot -p123456 -A >all.sql

    #mysqldump -uroot -p123456 --all-databases >all2.sql

    参数-A代表所有,等同于—all-databases

    B:导出某个数据库

    mysqldump

    -u 用户名 -p 数据库名 > 导出的文件名.sql

    #mysqldump -uroot -p123456 book >book.sql

    #vim book.sql

    C:导出单张表

    #mysqldump -uroot -p123456 book books >books.sql #导出book库books表

    D:导出库的表结构

    #mysqldump -uroot -p123456 -d book>booktable.sql #只导出book库的表结构

    E:只导出数据

    #mysqldump -uroot -p123456 -t book>bookdata.sql #只导出book库中的数据

    F:导出数据库,并自动生成库的创建语句

    #mysqldump -uroot -p123456 -B book2 >book2.sql

    #mysql -uroot -p123456 < book2.sql 导入不用指定数据名

    导入数据:

    A:导入所有数据库

    #mysql -uroot -p123456 <all.sql

    B:导入数据库

    #mysql -uroot -p123456 book <book.sql #如果导入时,没有对应的数据库,需要你手动创建一下:mysql> create database book;

    使用source导入

    mysql> create database book;

    mysql> use book;

    mysql> source /root/book.sql

    c:导入表

    mysql> drop table books;

    mysql> source /root/books.sql;

    ##导入表时,不需要重新,创建表。要先进到相应的数据库中

    mysql> select * from books;

    D:导入表结构和数据

    mysql> create database book;

    #mysql -uroot -p123456 book<booktable.sql

    #mysql -uroot -p123456 book<bookdata.sql

    八、 二进制日志:Binary Log & Binary Log Index

    mysql的二进制日志记录着数据库的所有增、删、改等操作日志(前提是要在自己的服务器上开启binlog),还包括了这些操作的执行时间。

    2.binlog的用途:

    1):主从同步

    2):恢复数据库

    执行mysql> show

    variables like ‘log_bin%’;查看binlog是否开启

    Off表示mysql当前binlog功能没有开启。

    mysql>

    flush logs; 刷新日志

    filename.index 存放binlog的日志清单文件

    开启binary

    log功能:

    修改/etc/my.cnf配置文件使二进制文件生效,添加如下内容:

    log-bin=/data/mysql/log/mysql_bin

    (二进制日志文件存放路径)

    server-id=1

    重启Mysql服务,使配置文件修改生效

    [root@localhost log]# systemctl

    restart mysqld

    九、 binlog的附加选项参数:

    1、“max-binlog-size”设置binlog 的最大存储上限,一般设置为512M或1G,一般不能超过1G。

    2、“binlog-do-db=db_name”参数明确告诉MySQL,需要对某个(db_name)数据库记录binlog,如果有了“binlog-do-db=db_name”参数的显式指定,MySQL 会忽略针对其他数据库执行的sql query,而仅仅记录针对指定数据库执行的sql query。

    3、“binlog-ignore-db=db_name”与“binlog-do-db=db_name”完全相反,它显式指定忽略某个(db_name)数据库的binlog 记录,当指定了这个参数之后,MySQL 会记录指定数据库以外所有的数据库的binlog。

    4、binlog-cache-size :一个事务,在没有提交(uncommitted)的时候,产生的日志,记录到Cache中;等到事务提交(committed)的时候,则把日志持久化到磁盘。

    十、查看二进制日志:

    1、查看binlog日志文件列表:

    mysql> show binary logs;

    2、查看当前使用的二进制文件及日志文件中事件当前位置:

    mysql> show master status;

    Binlog_Do_DB:显示对那个数据库进行增、删、改操作

    3、删除所有的二进制日志:

    mysql>reset master;

    restet master:清空index文件中列出的所有二进制日志,并创建一个新的二进制日志文件

    4、重新开始一个新的日志文件:

    使用flush logs生成新的二进制日志文件,用以保存之后的数据库操作语句的记录。

    mysql> flush logs; 用于生成新的binlog日志文件

    5、查看binlog(二进制日志文件)内容命令语法:

    查看二进制日志文件语法格式:mysqlbinlog [options] log_file …

    mysqlbinlog选项:

    -v:显示简化的日志内容

    -vv:显示详细的日志内容

  • 相关阅读:
    Python3中zipfile模块文件名乱码问题
    python zipfile 文件压缩和文件
    django+celery+rabitmq
    解决 Jumpserver coco 使用登录用户(ldap)进行SSH连接目标主机,忽略系统用户
    日志实时查看、轮询、统计、监控工具 Loggrove
    python django 多级业务树形结构规划及页面渲染
    nginx+uwsgi 部署 django
    python tornado websocket 实时日志展示
    python tornado websocket 多聊天室(返回消息给部分连接者)
    python 实时遍历日志文件
  • 原文地址:https://www.cnblogs.com/hgmyz/p/12350759.html
Copyright © 2011-2022 走看看