史上最全的MySQL备份方法

本人曾经
用过的备份方式有:mysqldump、mysqlhotcopy、BACKUP TABLE 、SELECT INTO
OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件。MyISAM
表是保存成文件的形式,因此相对比较容易备份,上面提到的几种方法都可以使用。Innodb 所有的表都保存在同一个数据文件 ibdata1
中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份 binlog,或者用
mysqldump。

1.mysqldump备份

mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。
示例:mysqldump -uroot -p database table > /home/jobs/back.sql
mysqldump也可做增量备份,mysqldump相关参数网上较多,就不在此一一赘述了

2.mysqlhotcopy备份

mysqlhotcopy 是一个 PERL 程序。它使用 LOCK TABLES、FLUSH
TABLES 和 cp 或 scp
来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。
mysqlhotcopy 只能用于备份 MyISAM,并且只能运行在 类Unix 和 NetWare 系统上。
mysqlhotcopy 支持一次性拷贝多个数据库,同时还支持正则表达。
示例: root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=root
-p=123456 database /tmp (把数据库目录 database 拷贝到 /tmp
下)root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=root -p=123456
db_name_1 ... db_name_n /tmproot#/usr/local/mysql/bin/mysqlhotcopy
-h=localhost -u=root -p=123456 db_name./regex/
/tmp更详细的使用方法请查看手册,或者调用下面的命令来查看 mysqlhotcopy 的帮助:
perldoc /usr/local/mysql/bin/mysqlhotcopy注意,想要使用 mysqlhotcopy,必须要有
SELECT、RELOAD(要执行 FLUSH TABLES) 权限,并且还必须要能够有读取 datadir/db_name 目录的权限。

还原mysqlhotcopy 备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld
指定的 datadir (在这里是 /usr/local/mysql/data/)目录下即可,同时要注意权限的问题,如下例: root#cp
-rf db_name /usr/local/mysql/data/root#chown -R nobody:nobody
/usr/local/mysql/data/ (将 db_name 目录的属主改成 mysqld 运行用户)

3.SQL 语法备份

3.1 备份BACKUP TABLE 语法其实和 mysqlhotcopy
的工作原理差不多,都是锁表,然后拷贝数据文件。它能实现在线备份,但是效果不理想,因此不推荐使用。它只拷贝表结构文件和数据文件,不同时拷贝索引文
件,因此恢复时比较慢。例子: BACK TABLE tbl_name TO '/tmp/db_name/';注意,必须要有 FILE
权限才能执行本SQL,并且目录 /tmp/db_name/ 必须能被 mysqld 用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。
恢复用 BACKUP TABLE 方法备份出来的文件,可以运行 RESTORE TABLE 语句来恢复数据表。例子: RESTORE TABLE FROM '/tmp/db_name/';权限要求类似上面所述。

3.2 SELECT INTO OUTFILE 则是把数据导出来成为普通的文本文件,可以自定义字段间隔的方式,方便处理这些数据。例子:
SELECT INTO OUTFILE '/tmp/db_name/tbl_name.txt' FROM tbl_name;注意,必须要有
FILE 权限才能执行本SQL,并且文件 /tmp/db_name/tbl_name.txt 必须能被 mysqld
用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。
用 SELECT INTO OUTFILE 方法备份出来的文件,可以运行 LOAD DATA INFILE 语句来恢复数据表。例子: LOAD
DATA INFILE '/tmp/db_name/tbl_name.txt' INTO TABLE
tbl_name;权限要求类似上面所述。倒入数据之前,数据表要已经存在才行。如果担心数据会发生重复,可以增加 REPLACE
关键字来替换已有记录或者用 IGNORE 关键字来忽略他们。

4.启用二进制日志(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 语句,并且还可以限定时间范围,相当的方便,详细的请查看手册。
恢复时,可以采用类似以下语句来做到: /usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001
| mysql -uyejr -pyejr db_name把 mysqlbinlog 输出的 SQL 语句直接作为输入来执行它。
如果你有空闲的机器,不妨采用这种方式来备份。由于作为 slave 的机器性能要求相对不是那么高,因此成本低,用低成本就能实现增量备份而且还能分担一部分数据查询压力,何乐而不为呢?

5.拷贝文件

直接备份数据文件相较前几种方法,备份数据文件最为直接、快速、方便,缺点是基本上不能实现增量备份。
为了保证数据的一致性,需要在靠背文件前,执行以下 SQL 语句: FLUSH TABLES WITH READ
LOCK;也就是把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单,直接拷贝回
原来的数据库目录下即可。
注意,对于 Innodb 类型表来说,还需要备份其日志文件,即 ib_logfile* 文件。因为当 Innodb 表损坏时,就可以依靠这些日志文件来恢复。

6.利用rsync备份
rsync作为同步工具也可以用来做备份,但要配置服务器端和客户端
示例rsync -vzrtopg --progress --delete root@192.168.1.3::root /tmp/
相关rsync配置可参考http://fanqiang.chinaunix.net/a6/b7/20010908/1305001258.html
缺点是rsync是根据文件修改时间做的增量备份,所以备份数据库都是全备,并且配置比较麻烦.

当然也可以参考下面的这篇文章
mysql 数据库备份和还原方法集锦

(0)

相关推荐

  • Mysql 数据库常用备份方法和注意事项

    Mysql数据库备份的常用3种方法: 1.直接拷贝(cp.tar,gzip,cpio) 2.mysqldump 3.mysqlhotcopy 1.使用直接拷贝数据库备份 典型的如cp.tar或cpio实用程序. 当你使用直接备份方法时,必须保证表不在被使用.如果服务器在你正在拷贝一个表时改变它,拷贝就失去意义. 保证你的拷贝完整性的最好方法是关闭服务器,拷贝文件,然后重启服务器.如果你不想关闭服务器,要在执行表检查的同时锁定服务器.如果服务器在运行,相同的制约也适用于拷贝文件,而且你应该使用相同

  • mysql完整备份时过滤掉某些库的方法

    mysql进行完整备份时使用--all-database参数 比如: #mysqldump -u root -h localhost -p --all-database > /root/all.sql 数据导入的时候,可以先登陆mysql数据库中,使用source /root/all.sql进行导入. 问题: 想要在mysqldump备份数据库的时候,过滤掉某些库. 这种情况mysqldump备份的时候就不能使用--all-database了,而是使用--database. 如下:备份数据库的时

  • 简单的MySQL备份与还原方法分享

    为了安全起见,需要经常对数据库作备份,或者还原.对于 MySQL 而言,最方便的方法可能就是用 phpMyAdmin 的导出.导入功能了,但如果你的数据库体积比较大,作为 Web 应用的 phpMyAdmin 可能会遭遇"超时"而操作失败.所以,学会在命令行模式下备份.还原数据库,还是很有必要的. Linux系统下 备份数据库 在 Linux 命令行模式下备份 MySQL 数据库,用的是 mysqldump 命令: mysqldump -u mysqluser -p test_db 对

  • mysql 复制过滤重复如何解决

    1.replicate_do_db 和 replicate_ignore_db 不要同时出现.容易出现混淆.也是毫无意义的. Replicate_Do_DB: db1 Replicate_Ignore_DB: db2 statement模式: 使用use 语句 use db1;insert into tb1 values (1); use db2;insert into tb2 values (2); 以上在slave上均能正确复制,tb1 有数据,tb2没有数据. 不使用use 语句 inse

  • mysql备份的三种方式详解

    一.备份的目的 做灾难恢复:对损坏的数据进行恢复和还原需求改变:因需求改变而需要把数据还原到改变以前测试:测试新功能是否可用 二.备份需要考虑的问题 可以容忍丢失多长时间的数据:恢复数据要在多长时间内完: 恢复的时候是否需要持续提供服务:恢复的对象,是整个库,多个表,还是单个库,单个表. 三.备份的类型 1.根据是否需要数据库离线 冷备(cold backup):需要关mysql服务,读写请求均不允许状态下进行:温备(warm backup): 服务在线,但仅支持读请求,不允许写请求:热备(ho

  • 史上最全的MySQL备份方法

    本人曾经 用过的备份方式有:mysqldump.mysqlhotcopy.BACKUP TABLE .SELECT INTO OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件.MyISAM 表是保存成文件的形式,因此相对比较容易备份,上面提到的几种方法都可以使用.Innodb 所有的表都保存在同一个数据文件 ibdata1 中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件.备份 binlog,或者用

  • Selenium元素定位的30种方式(史上最全)

    Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素才能进行后续的自动化控制,我在这里将对各种元素定位方式进行总结归纳一下. 这里将统一使用百度首页(www.baidu.com)进行示例,f12可以查看具体前端代码. WebDriver8种基本元素定位方式 find_element_by_id() 采用id属性进行定位.例如在百度页面中输入关键字 Selenium 进行搜索.百度部分关键源码如下: <span class="bg s_

  • 2020史上最全IDEA插件总结(推荐收藏)

    IDEA 插件安装 步骤 IDEA里面,选择打开 File --> Settings --> Plugins 在Plugins里面, 可以搜索需要的插件 (下面的标题),然后安装 如下图: AceJump 全栈必备,作为一个全能的程序员 ,用鼠标,太伤自尊了,他就可以帮到你 AceJump其实是一款能够代替鼠标的软件,只要安装了这款插件,可以在代码中跳转到任意位置.按快捷键进入 AceJump 模式后(默认是 Ctrl+J),再按任一个字符,插件就会在屏幕中这个字符的所有出现位置都打上标签,你

  • 推荐史上最全的IDEA好用插件

    经过很多查看在巨人的肩膀上写完这篇博客,如有雷同纯属巧合,虽然自己也查了些文章才总结的,但是站在巨人肩膀上不敢搞原创! 学习使用一些插件,可以提高平常工作中的开发效率.对于我们开发人员很有帮助! 插件安装 IDEA里面,依次选择打开 File → Settings → Plugins,在Plugins里面可以搜索需要的插件,然后安装(安装完插件,一定要重启Idea,不然插件不生效) 1. Alibaba Java Coding Guidelines [阿里巴巴代码规范检查插件] ① 功能: 代码

  • 史上最全的PHP正则表达式(手机号需要加上177-***)

    首先看下正则表达式思维导图: 一.校验数字的表达式  1 数字: ^[0-9]*$ 2 n位的数字: ^\d{n}$ 3 至少n位的数字: ^\d{n,}$ 4 m-n位的数字: ^\d{m,n}$ 5 零和非零开头的数字: ^(0|[1-9][0-9]*)$ 6 非零开头的最多带两位小数的数字: ^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7 带1-2位小数的正数或负数: ^(\-)?\d+(\.\d{1,2})?$ 8 正数.负数.和小数: ^(\-|\+)?\d+(\.\

  • 在CentOS VPS上通过SSH安装 MySQL的方法图解

    输入yum install mysql-server 按Y继续 安装完成,设置开机启动Mysql,输入 chkconfig --levels 235 mysqld on 然后启动tomcat,输入service mysqld start 启动完毕,然后登录MYsql设置密码 输入set password for 'root'@'localhost' = password('12345678');来设置密码 至此,mysql安装完毕!然后创建数据库,首先用show databases;查看数据库

  • 史上最全Java8日期时间工具类(分享)

    这是我总结的Java8日期工具类,应该是比较全面的,满足日常开发绝大部分需求,分享给大家,有错误之处,还望大神指教. /** * Java8日期时间工具类 * * @author JourWon * @date 2020/12/13 */ public class LocalDateUtils { /** * 显示年月日时分秒,例如 2015-08-11 09:51:53. */ public static final String DATETIME_PATTERN = "yyyy-MM-dd

  • Docker安装Oracle19c史上最全步骤

    目录 介绍 前期准备 Docker安装 Oracle 19c安装 第一步:下载镜像 第二步:创建挂载文件 第三步:安装Oracle 第四步:连接Oracle 介绍 Oracle Database 19c ,也就是12.2.0.3,最初在livesql.oracle.com上发布,是Oracle Database 12c和18c系列产品的最终版本,因此也是“长期支持”版本(以前称为“终端版本”). “长期支持”意味着Oracle Database 19c提供4年的高级支持(截止到2023年1月底)

  • 史上最简单的MySQL数据备份与还原教程(中)(三十六)

    数据备份与还原第二篇,具体如下 基础概念: 备份,将当前已有的数据或记录另存一份: 还原,将数据恢复到备份时的状态. 为什么要进行数据的备份与还原? 防止数据丢失:保护数据记录. 数据备份与还原的方式有很多种,具体可以分为:数据表备份.单表数据备份.SQL备份和增量备份. 单表数据备份 单表数据备份,每次只能备份一张表,而且只能备份数据,不能备份表结构. 通常的使用场景为:将表中的数据导出到文件. 备份方法:从表中选出一部分数据保存到外部的文件中, select */字段列表 + into ou

  • 史上最简单的MySQL数据备份与还原教程(中)(三十六)

    数据备份与还原第二篇,具体如下 基础概念: 备份,将当前已有的数据或记录另存一份: 还原,将数据恢复到备份时的状态. 为什么要进行数据的备份与还原? 防止数据丢失:保护数据记录. 数据备份与还原的方式有很多种,具体可以分为:数据表备份.单表数据备份.SQL备份和增量备份. 单表数据备份 单表数据备份,每次只能备份一张表,而且只能备份数据,不能备份表结构. 通常的使用场景为:将表中的数据导出到文件. 备份方法:从表中选出一部分数据保存到外部的文件中, select */字段列表 + into ou

随机推荐