前言
本文主要介绍三种冷备份的方式
暴力备份、mysqlsqldump、mydumper
说明
mysqldump 是mysql自身提供的工具,按照基本的命令即可使用,navicat中的导入导出用的就是这个
mydumper 是一个第三方工具,需要下载后安装,其速度是前者的10倍有余,但是会产生锁表问题
相关链接
mydumper官网:https://launchpad.net/mydumper
暴力备份
暴力备份就是将 mysql 的 data 目录整体备份。
需要注意的事,在备份和恢复的时候,停止mysql服务。等待完成后,在启动mysql服务,否则会由于 pid 的不一致,产生冲突等问题
mysqldump 工具
它的备份原理是通过协议连接到
MySQL数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert语句,当我们需要还原这些数据时,只要执行这些insert语句,即可将对应的数据还原。
备份命令
1 命令格式
1 | mysqldump [选项] 数据库名 [表名] > 脚本名 |
2 选项说明
| 参数名 | 缩写 | 含义 |
|---|---|---|
| –host | -h | 服务器IP地址 |
| –port | -P | 服务器端口号 |
| –user | -u | MySQL 用户名 |
| –pasword | -p | MySQL 密码 |
| –databases | 指定要备份的数据库 | |
| –all-databases | 备份mysql服务器上的所有数据库 | |
| –compact | 压缩模式,产生更少的输出 | |
| –comments | 添加注释信息 | |
| –complete-insert | 输出完成的插入语句 | |
| –lock-tables | 备份前,锁定所有数据库表 | |
| –no-create-db/–no-create-info | 禁止生成创建数据库语句 | |
| –force | 当出现错误时仍然继续备份操作 | |
| –default-character-set | 指定默认字符集 | |
| –add-locks | 备份数据库表时锁定数据库表 |
3 实例
备份所有数据库:
1 | mysqldump -uroot -p --all-databases > /backup/mysqldump/all.db |
备份指定数据库:
1 | mysqldump -uroot -p test > /backup/mysqldump/test.db |
备份指定数据库指定表(多个表以空格间隔)
1 | mysqldump -uroot -p mysql db event > /backup/mysqldump/2table.db |
备份指定数据库排除某些表
1 | mysqldump -uroot -p test --ignore-table=test.t1 --ignore-table=test.t2 > /backup/mysqldump/test2.db |
4、还原命令
4.1 系统行命令
1 | mysqladmin -uroot -p create db_name |
4.2 soure 方法
1 | mysql > use db_name |
mydumper 工具
1、备份原理
1、主线程 FLUSH TABLES WITH READ LOCK, 施加全局只读锁,保证数据的一致性
2、读取当前时间点的二进制日志文件名和日志写入的位置并记录在metadata文件中,以供即使点恢复使用
3、N个(线程数可以指定,默认是4)dump线程把事务隔离级别改为可重复读 并开启读一致的事物
4、dump non-InnoDB tables, 首先导出非事物引擎的表
5、主线程 UNLOCK TABLES 非事物引擎备份完后,释放全局只读锁
6、dump InnoDB tables, 基于事物导出InnoDB表
7、事物结束
2、该工具介绍
Mydumper是一个针对MySQL和Drizzle的高性能多线程备份和恢复工具。
Mydumper主要特性:
轻量级C语言写的
多线程备份,备份后会生成多个备份文件
事务性和非事务性表一致的快照(适用于0.2.2以上版本)
快速的文件压缩
支持导出binlog
多线程恢复(适用于0.2.1以上版本)
以守护进程的工作方式,定时快照和连续二进制日志(适用于0.5.0以上版本)
开源 (GNU GPLv3)
3、安装步骤
mydumper使用c语言编写,使用glibc库
mydumper安装所依赖的软件包,glibc, zlib, pcre, pcre-devel, gcc, gcc-c++, cmake, make, mysql客户端库文件1、安装依赖软件包,将mysql客户端库文件路径添加至/etc/ld.so.conf, 如/usr/local/mysql/lib
2、解压软件包进入目录,cmake
3、make && make install
1 | 安装依赖软件包 |
mydumper 参数解释
1 | -B, --database 要备份的数据库,不指定则备份所有库 |
myloader 参数解释
1 | -d, --directory 备份文件的文件夹 |
5、使用案例
备份 study 数据库库 到 /data/backup/mysql 文件夹中
1 | 备份命令 |
**如果是在从库进行备份,还会记录备份时同步至主库的二进制日志文件及写入位置 **
恢复 study 数据库
1 | 先删除 study 数据库 |
注意问题
在使用 mydumper 的时候,由于会产生一个全局锁防止写入,所以会导致备份过程总无法写入。
所以在使用的时候,要对用户提示一个短暂的维护提示