• MySQL 数据库自动备份


    MySQL 数据库自动备份




    MySQL 备份命令

    手抖、写错条件、写错表名、错连生产库造成的误删库表和数据总有听说,那么删库之后除了跑路,还能做什么呢,当然是想办法恢复,恢复数据的基础就在于完善的备份策略。下面就来介绍下MySQL自带备份工具mysqldump


    mysqldump 介绍

    • 用法

      Usage: mysqldump [OPTIONS] database [tables]
      OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
      OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
      
    • 常用参数

      • --opt 如果有这个参数表示同时激活了mysqldump命令的quick,add-drop-table,add-locks,extended-insert,lock-tables参数,它可以给出很快的转储操作并产生一个可以很快装入MySQL服务器的转储文件。当备份大表时,这个参数可以防止占用过多内存。(反之使用 --skip-opt
      • --single-transaction 设置事务的隔离级别为可重复读,然后备份的时候开启事务,这样能保证在一个事务中所有相同的查询读取到同样的数据。注意,这个参数只对支持事务的引擎有效,如果有 MyISAM 的数据表,并不能保证数据一致性。(自动关闭选项 --lock-tables)
      • --default-character-set=charset 指定转储数据时采用何种字符集。(默认使用数据库的字符集)
      • --master-data=2 表示在备份过程中记录主库的 binlog 和 pos 点,并在dump文件中注释掉这一行,在使用备份文件做新备库时会用到
      • -x --lock-all-tables 锁表备份。由于 MyISAM 不能提供一致性读,如果要得到一份一致性备份,只能进行全表锁定。
      • -l --lock-tables 锁定所有的表以便读取。(默认为打开;使用--skip-lock-tables来禁用。)
      • --dump-date 在输出的最后加上转储日期。(默认为打开;使用--skip-dump-date来禁用。)
      • -h --host=name 连接主机
      • -P --port=# 端口号
      • -u --user=username 用户名
      • -p --password[=passwd] 密码
      • -A --all-databases 转储全部数据库
      • -Y --all-tablespaces 转储所有的表空间。(反之 -y --no-tablespaces不转储任何表空间信息)
      • -B --databases 转储指定数据库
        • --tables 转储指定表, 覆盖选项 --databases
      • --ignore-table=name 不转储指定的表。要指定一个以上的忽略的表,请多次使用该指令,每个表一次为每个表使用一次。每个表都必须同时指定数据库和表名(如--ignore-table=database.table)
      • -d --no-data 不转储行记录。(只有表结构,没有表数据)
      • --add-drop-database 在每次创建前添加一个DROP DATABASE。
      • --add-drop-table 在每次创建前添加一个DROP TABLE。(默认添加)

    数据备份

    • InnoDB 全库备份

      mysqldump --opt --single-transaction --master-data=2 --default-character-set=utf8 -h -u -p -A > backup.sql

    • MyISAM 全库备份

      mysqldump --opt --lock-all-tables --master-data=2 --default-character-set=utf8 -h -u -p -A > backup.sql

    • 备份带上压缩

      mysqldump -h -u -p -A | gzip >> backup.sql.gz

    • 备份指定库(可多个库)

      mysqldump -h -u -p --databases > backup.sql


    数据恢复

    • SQL文件恢复

      mysql -h -u -p < backup.sql

    • 压缩文件恢复

      gzip -d backup.sql.gz | mysql -h -u -p

      note: gzip -d为解压, 下面介绍下gzip用法与参数介绍(gzip命令只是压缩,不做打包操作)


    gzip 介绍

    • 用法:

      gzip [OPTION]... [FILE]...

    • 常用参数

      • -d --decompress 解压
      • -c --stdout 保留原始文件,把压缩/解压流重定向到新文件(如: gzip -c aa > aa.gz
      • -l --list 列出压缩文件信息,并不解压
      • -r --recursive 对目录进行递归操作
      • -t --test 测试压缩文件的完整性
      • -v --verbose 冗长模式
      • -num num为压缩效率,是一个介于1~9的数值,预设值为“6”,指定愈大的数值,压缩效率就会愈高;
        • -1 --fast 最快压缩方法(低压缩比)
        • -9 --best 最慢压缩方法(高压缩比)
    • 栗子

      • 把 test目录下的每个文件压缩成.gz文件

        gzip test/*

      • 把上例中每个压缩的文件解压,并列出详细的信息

        gzip -dv test/*

      • 详细显示test中每个压缩的文件的信息,并不解压

        gzip -l test/*

      • 压缩一个tar备份文件,此时压缩文件的扩展名为.tar.gz

        gzip -r log.tar

      • 递归的压缩目录

        gzip -rv test

        这样,所有test下面的文件都变成了.gz,目录依然存在只是目录里面的文件相应变成了.gz.这就是压缩,和打包不同。因为是对目录操作,所以需要加上-r选项,这样也可以对子目录进行递归了。

      • 递归地解压目录

        gzip -dr test

      • 保留原始文件,把压缩/解压流重定向到新文件

        gzip -c aa > aa.gz

        gzip -dc bb.gz > bb


    MySQL 备份脚本


    Linux 定时任务-crontab

    crontab 是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。

    • 用法:

      • crontab [-u user] file
      • crontab [-u user] [ -e | -l | -r ]
    • 参数解释:

      • -e 编辑用户的定时任务 (edit user's crontab)
      • -l 列出用户的定时任务 (list user's crontab)
      • -r 删除用户的定时任务 (delete user's crontab)
      • -i 在删除用户的定时任务前提示 (prompt before deleting user's crontab)
      • -s (selinux context)
    • 栗子

      • 编辑

        crontab -e

      • 执行计划 (每天23点执行service iptables status命令)

        00 23 * * * service iptables status

      • 详情

        *  *  *  *  *  commad
        分 时  日 月 周  命令
        
        第`1`列表示分钟 `1~59`, 每分钟用 `*` 或者 `*/1`表示
        
        第`2`列表示小时 `1~23` (0表示0点)
        
        第`3`列表示日期 `1~31`
        
        第`4`列表示月份 `1~12`
        
        第`5`列表示星期 `0~6` (0表示星期日)
        
        第`6`列是要运行的命令
        


    Reference

  • 相关阅读:
    大型门户网站架构设计的可伸缩性
    服务器性能的瓶颈分析
    boost中bind、thread、io_services测试
    C++ 宏定义中字符串连接操作
    完成端口与高性能服务器程序开发
    异步IO、APC、IO完成端口、线程池与高性能服务器
    在模板类中使用字符串作为无类型模板参数
    VS2010 设置全局Include Directories与Library Directories
    Yii的Model ( 模型)创建及使用
    mvc中循环遍历分配的代码
  • 原文地址:https://www.cnblogs.com/cure/p/15769609.html
Copyright © 2020-2023  润新知