• mysql备份


    对于中等级别业务量的系统来说,备份策略可以这么定:第一次全量备份,每天一次增量备份,每周再做一次全量备份,如此一直重复。而对于重要的且繁忙的系统 来说,则可能需要每天一次全量备份,每小时一次增量备份,甚至更频繁。为了不影响线上业务,实现在线备份,并且能增量备份,最好的办法就是采用主从复制机 制(replication),在 slave 机器上做备份。
    出现操作系统崩溃或电源故障时,InnoDB自己可以完成所有数据恢复工作。但为了确保你可以睡好觉,应遵从下面的指导:
    1.    一定用--log-bin或甚至--log-bin=log_name选项运行MySQL服务器,其中日志文件名位于某个安全媒介上,不同于数据目录所在驱动器。
    2.    如果你有这定期进行完全备份,使用mysqldump命令进行在线非块备份。
    3.    用FLUSH LOGS或mysqladmin flush-logs清空日志进行定期增量备份

    1、mysqldump

    1.1 备份

    mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。

    其他参数详情请参考手册,我通常使用以下 SQL 来备份 MyISAM 表:

    /usr/local/mysql/bin/mysqldump -uyejr -pyejr /
    --default-character-set=utf8 --opt --extended-insert=false /
    --triggers -R --hex-blob -x db_name > db_name.sql

    使用以下 SQL 来备份 Innodb 表:

    /usr/local/mysql/bin/mysqldump -uyejr -pyejr /
    --default-character-set=utf8 --opt --extended-insert=false /
    --triggers -R --hex-blob --single-transaction db_name > db_name.sql

    另外,如果想要实现在线备份,还可以使用 --master-data 参数来实现,如下:

    /usr/local/mysql/bin/mysqldump -uyejr -pyejr /
    --default-character-set=utf8 --opt --master-data=1 /
    --single-transaction --flush-logs db_name > db_name.sql

    它只是在一开始的瞬间请求锁表,然后就刷新binlog了,而后在导出的文件中加入CHANGE MASTER 语句来指定当前备份的binlog位置,如果要把这个文件恢复到slave里去,就可以采用这种方法来做。

    1.2 还原

    用 mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本,有两种方法可以将数据导入。

    * 直接用 mysql 客户端
    例如:

    /usr/local/mysql/bin/mysql -uyejr -pyejr db_name < db_name.sql

    * 用 SOURCE 语法
    其实这不是标准的 SQL 语法,而是 mysql 客户端提供的功能,例如:

    SOURCE /tmp/db_name.sql;

        这里需要指定文件的绝对路径,并且必须是 mysqld 运行用户(例如 nobody)有权限读取的文件。

    2、 启用二进制日志(binlog)

    采用 binlog 的方法相对来说更灵活,省心省力,而且还可以支持增量备份。

    启用 binlog 时必须要重启 mysqld。首先,关闭 mysqld,打开 my.cnf,加入以下几行:

    server-id    = 1
    log-bin        = binlog
    log-bin-index    = binlog.index

    然后启动 mysqld 就可以了。运行过程中会产生 binlog.000001 以及 binlog.index,前面的文件是 mysqld 记录所有对数据的更新操作,后面的文 
    件则是所有 binlog 的索引,都不能轻易删除。关于 binlog 的信息请查看手册。

    需要备份时,可以先执行一下 SQL 语句,让 mysqld 终止对当前 binlog 的写入,就可以把文件直接备份,这样的话就能达到增量备份的目的了:

    FLUSH LOGS;

    如果是备份复制系统中的从服务器,还应该备份 master.info 和 relay-log.info 文件。

    备份出来的 binlog 文件可以用 MySQL 提供的工具 mysqlbinlog 来查看,如:

    /usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001

    该工具允许你显示指定的数据库下的所有 SQL 语句,并且还可以限定时间范围,相当的方便,详细的请查看手册。
    提示:因为mysqlbinlog重新读取my.cnf 需要注销,解决方法修改配置:

    [cliend]
    #default-character-set=utf8


    恢复时,可以采用类似以下语句来做到:

    /usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001 | /usr/local/mysql/bin/mysql -uyejr -pyejr db_name

    把 mysqlbinlog 输出的 SQL 语句直接作为输入来执行它。

    如果你有空闲的机器,不妨采用这种方式来备份。由于作为 slave 的机器性能要求相对不是那么高,因此成本低,用低成本就能实现增量备份而且还能分担一部分数据查询压力,何乐而不为呢?

    备份后,更换新一个log-bin文件可以:

    /usr/local/mysql/bin/mysqladmin -uroot -ppassword flush-logs


    3、 备份最低权限
    Musqldump:必须有该表的select 和show view
    musqladmin:必须有全局的reload

  • 相关阅读:
    Spring事务传播机制
    关于MyBatis-Like的模糊查询,">"、"<"等需转义字符描述
    MyBatis中if
    报错(持续.....)
    爬虫报错(持续.....)
    django的timezone问题
    dispatch
    django + uwsgi + nginx 实现高并发环境部署 及 报错处理
    虚拟机问题(持续更新.......)
    Tornado
  • 原文地址:https://www.cnblogs.com/suifengbingzhu/p/2693956.html
Copyright © 2020-2023  润新知