• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

MySQL(四):备份恢复详解

mysql 搞代码 4年前 (2022-01-09) 23次浏览 已收录 0个评论

一、备份的类型随着互联网的迅速发展;数据的重要性不需要多说;相信大家都知道。所以数据备份就显得格外重要了;并且选择一个合适的备份方法能提高性能。下面就

一、备份的类型

随着互联网的迅速发展;数据的重要性不需要多说;相信大家都知道。所以数据备份就显得格外重要了;并且选择一个合适的备份方法能提高性能。下面就备份类型来分类:

  • 根据备份时;数据库服务器是否在线:

  • 冷备:cold backup

    温备:warm backup

    热备:hot backup 基于事务的存储引擎(InnoDB)

  • 根据备份时的数据集:

  • 完全备份:full backup

    部分备份:partial backup

  • 根据备份时的接口(直接备份数据文件还是通过mysql服务器导出数据):

  • 物理备份(physical backup):直接复制(归档)数据文件的备份方式;

    1、不需要额外工具

    2、跨平台性能差

    3、表空间占据大

    逻辑备份(logical backup):把数据从库中提取出来保存为文本文件;

    1、可以使用编辑器处理数据文件

    2、可以使用批处理或网络恢复数据;可以更换数据引擎

    3、有助于避免数据损坏等

    缺陷:恢复慢;无法保证浮点数的精度;还原数据后需要重建索引,消耗时间和资源

  • 根据备份时数据变化(整个数据|变化的数据):

  • 1、完全备份:full backup

    2、增量备份:incremental backup

    3、差异备份:differential backup

    二、基本的备份工具

    1、mysqldump:逻辑备份工具

    对InnoDB热备、MyISAM温备、Aria温备

    备份和恢复过程较慢

    2、mysqldumper:多线程的mysqldump

    很难实现差异或增量备份;

    3、基于lvm-snapshot:

    接近于热备的工具;因为要先请求全局锁;而后创建快照;并在创建完成后释放全局锁

    cp、tar等工具进行物理备份:仅限于冷备

    备份和恢复速度较快;

    很难实现增量备份;并且请求全局需要等待一段时间;在繁忙的服务器上尤其如此。

    4、部分备份工具;不会备份关系定义;仅备份表中的数据;逻辑备份工具

    select clause into outfile ‘/path/to/somefile’

    load data infile ‘/path/to/somefile’

    5、Xtrabackup:由percona提供的开源备份工具

    InnoDB热备;增量备份

    MyISAM温备;不支持增量

    物理备份;速度快

    三、基于mydump进行备份

    #使用格式[root@localhost ~]# mysqldumpUsage: mysqldump [OPTIONS] database [tables]ORmysqldump [OPTIONS] –databases [OPTIONS] DB1 [DB2 DB3…]ORmysqldump [OPTIONS] –all-databases [OPTIONS]For more options, use mysqldump –help#详细可以–help查看;man也可以查看详细说明

  • 备份单个库

  • #备份单个库mysql> show databases;+——————–+| Database|+——————–+| information_schema || hellodb|| mysql||本文来源[email protected]搞@^&代*@码)网5 performance_schema || test|| ultrax|+——————–+6 rows in set (0.00 sec)#假设备份上述中hellodb数据库[root@localhost ~]# mysqldump -uroot -p –databases hellodb –lock-all-tables > /tmp/hdb.sqlEnter password:[root@localhost ~]###删除、恢复mysql> drop database hellodb;Query OK, 7 rows affected (0.20 sec)mysql> show databases;+——————–+| Database|+——————–+| information_schema || mysql|| performance_schema || test|| ultrax|+——————–+5 rows in set (0.00 sec)#恢复mysql> source /tmp/hdb.sqlQuery OK, 0 rows affected (0.00 sec)…mysql> show databases;+——————–+| Database|+——————–+| information_schema || hellodb|| mysql|| performance_schema || test|| ultrax|+——————–+6 rows in set (0.00 sec)#测试恢复成功

  • 完全备份以及利用二进制日志进行时间点恢复

  • [root@localhost ~]# mysqldump -uroot -p –lock-all-tables –all-databases –flush-logs –master-data=2 –events >/tmp/all.sqlEnter password:#–lock-all-tables 请求锁;不让其他用户此刻做修改#–all-databases备份所有数据库#–flush-logs滚动日志#–master-data=2记录二进制日志的位置#–events导出事件[root@localhost ~]# vim /tmp/all.sql– CHANGE MASTER TO MASTER_LOG_FILE=’mysql-bin.000007′, MASTER_LOG_POS=107;#这行记录的就是二进制日志的位置;后续需要依赖进行时间点恢复####进行测试删除和恢复mysql> create database soul;Query OK, 1 row affected (0.00 sec)mysql> use soul;Database changedmysql> create table t1 (ID int);Query OK, 0 rows affected (0.06 sec)mysql> insert into t1 values (1),(2),(3);Query OK, 3 rows affected (0.04 sec)Records: 3 Duplicates: 0 Warnings: 0mysql> drop database soul;Query OK, 1 row affected (0.05 sec)mysql> drop database hellodb;Query OK, 7 rows affected (0.00 sec)#利用备份恢复mysql> set session sql_log_bin=0;#关闭记录二进制日志;因为恢复过程不需要记录mysql> source /tmp/all.sqlmysql> show databases;+——————–+| Database|+——————–+| information_schema || hellodb|| mysql|| performance_schema || test|| ultrax|+——————–+6 rows in set (0.00 sec)#时间点之后的还没有[root@localhost ~]# mysqlbinlog –start-position=107 /data/mydata/mysql-bin.000007# at 547#位置#140324 1:04:00 server id 1 end_log_pos 628 Query thread_id=33 exec_time=0 error_code=0SET TIMESTAMP=1395594240/*!*/;drop database soul #删除的库/*!*/;# at 628#位置#140324 1:04:20 server id 1 end_log_pos 715 Query thread_id=33 exec_time=0 error_code=0SET TIMESTAMP=1395594260/*!*/;drop database hellodb #删除的库/*!*/;#能查看完全备份之后的操作;也能看到删除的操作;所以在此截取后来恢复[root@localhost ~]# mysqlbinlog –start-position=107 –stop-position=547 /data/mydata/mysql-bin.000007 >/tmp/bin.sqlmysql> source /tmp/bin.sql…mysql> use soul;Database changedmysql> show tables-> ;+—————-+| Tables_in_soul |+—————-+| t1|+—————-+1 row in set (0.00 sec)mysql> select * from t1;+——+| ID |+——+| 1 || 2 || 3 |+——+3 rows in set (0.15 sec)mysql> set session sql_log_bin=1;Query OK, 0 rows affected (0.00 sec)#在恢复的过程中;应该限制其他用户的任何操作;可以通过iptables来关闭端口;或其他策略#备份除了数据文件还有二进制文件、配置文件等


    搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
    转载请注明原文链接:MySQL(四):备份恢复详解

    喜欢 (0)
    [搞代码]
    分享 (0)
    发表我的评论
    取消评论

    表情 贴图 加粗 删除线 居中 斜体 签到

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址