mysql备份工具介绍
本章主要介绍mysql常见的3种的备份(导入,导出)工具.
- mysqldump
- mydumper&&myloader
- xtrabackup
一.mysqldump
概述:
mysqldump是MYSQL自带的备份工具.它基于逻辑备份方式产生一套可以被重新执行的原始数据库DDL和DML语句.mysqldump导出一个或者多个mysql数据库,然后复制或者还原到另外一台SQL服务器.
有关更相信的官方文档介绍和参数介绍请查看官网.
用法:
mysqldump的用法非常简单.以下只介绍几种最常见的用法.更多用法请参考官网.
- 备份数据库
1.备份数据库
1 | mysqldump -uroot -pPassword [database name] > [dump file] |
上述命令将指定数据库备份到某dump文件(转储文件)中,比如:
1 | mysqldump -uroot -p123 test > test.dump |
2.跨主机备份.将备份结果直接还原到目的主机.例如:
1 | mysqldump --host=host1 --opt sourceDb| mysql --host=host2 -C targetDb |
-C指示主机间的数据传输使用数据压缩
3.只备份表结构.需要加上–no-data参数
1 | mysqldump -uroot -p123 --no-data mydatabase > test.dump |
- 恢复数据库
1.从文件恢复
1 | mysqldump -uuser -ppassword [database name] < [backup file name] |
note:
1.要恢复的数据库名必须事先创建.
2.在恢复时最好加上–database参数,明确指定恢复到哪个数据库.:
1
2 > mysqldump -uuser -ppassword --database [database name] < [backup file name]
>
虽然大部分情况下–database参数可有可无,但是有些时候可能会报错
2.source恢复
source恢复方法:
1.登录mysql命令行
2.source /path-to-backup file name
二.mydumper
概述
mydumper是第三方备份工具.详细介绍可以参考官网:mydumper官网
mydumper对于mysqldump来说最明显的区别就是mydumper支持多线程导入和导出(默认4个线程).所以速度会比mysqldump.
用法
一.备份基本用法
备份某个数据库
1 | mydumper -u用户名 -p密码 -h主机 -P 端口 -B 数据库 -o 备份目的目录 |
备份所有数据库:
1 | mydumper u用户名 -p密码 -h主机 -P 端口 -o 备份目的目录 |
备份某个表,如果是多个表,则表名之间用逗号分隔
1 | mydumper u用户名 -p密码 -h主机 -P 端口 -B 数据库 -T 该数据库的表名 -o 备份目的目录 |
此外mydumper还有其他的可选参数.例如
-c :压缩导出文件
–no-data:仅仅导出表结构
更多详细参数可以查看官网,或者执行 ./mydumper –help查看
二.还原基本用法
mydumper备份文件,使用myloader命令还原
用法:
1 | myloader -u用户名 -p密码 -h主机 -P 端口 -B 数据库 -d 备份文件所在的目录 |
三.mydumper用法示例
1.导出test数据库:
1 | [root@mysql mydumper-0.9.1]# ./mydumper -u root -p 123456 -B test -o /data/test |
note:
1.mydumper一定要在命令行显示输入密码..mydumper不像mydump可以执行命令后再在交互界面输入密码 .如果这里参数-p 留空,没有输入密码.则不会提示你输入密码,并且备份所有数据库
2.mydumper导出的是一个目录,而不是像mysqldump导出一个sql单一文件
2.查看mydumper线程数.这里发现默认有4个线程
1 | [root@mysql ~]# ps aux | grep mydumper | grep -v grep |
3.还原数据库
1 | root@mysql mydumper-0.9.1]# ./myloader -u root -p 123456 -B test -d /data/test/ |
4.myloader也用了4个线程
1 | [root@mysql iqg_staging]# ps -T -p 397 |
三.xtrabackup
概述:
Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),全量备份,增量备份、差量备份 .xtrabackup是物理层面的备份,对于大量数据(超过50G)的数据库来说比mysqldump的备份速度要快好几倍.
以下官方文档可以查看详细的xtrabackup介绍
介绍xtrabackup的工作过程: xtrabackup介绍
介绍xtrabackup的安装:xtrabackup安装
备份先决条件
创建一个用于备份数据库的账户,赋予基本权限
1 | mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 's3cret'; |
全量备份
命令很简单. –backup参数表示备份,–target-dir参数表示备份到某个路径下.
1 | xtrabackup --user=bkpuser --password=123456 --user=bkpuser --password=123456 --backup --target-dir=/data/backups/ |
–database参数表示指定备份的数据库,如果没有指定默认备份所有库
全量备份的恢复
step1: 恢复一个备份数据,需要先对备份的数据进行”prepare”工作.
命令如下,–prepare参数表示准备恢复一个备份数据
1 | xtrabackup --user=bkpuser --password=123456 --prepare --target-dir=/data/backups/ |
step2:恢复已经”prepare”的数据.命令如下
1 | xtrabackup --user=bkpuser --password=123456 --copy-back --target-dir=/data/backups/ |
note.恢复一个数据库的注意事项:
1.如果不需要保留备份的数据.可以使用–move-back参数替换–copy-back..这将在恢复工作完成后,删除备份数据
2.在备份之间必须要先关闭mysql数据库,并且删除(或者重命名)mysql的数据目录.建立一个空的数据文件目录.
3.恢复完成后,需要修改数据库文件目录的权限为mysql.mysql.否则无法启动数据库
增量备份
xtrabackup的第一次增量备份需要基于上一次的全量备份基础上进行增量备份.
命令和全量备份没有太大区别,–incremental-basedir参数表示这是一次增量备份.
1 | xtrabackup --user=bkpuser --password=123456 --backup --target-dir=/data/backups/inc1 \ |
–incremental-basedir(/data/backups/base)是上一次全备目录.
–target-dir(/data/backups/inc1)是本次增量备份目录
第二次,第三次….等等后续的增量需要基于上一次的增量备份基础上进行.例如第二个增量备份命令:
1 | xtrabackup --user=bkpuser --password=123456 --backup --target-dir=/data/backups/inc2 \ |
第n次增量备份的basedir为n-1次增量备份的文件路径
增量恢复
增量备份的prepare和全备完全不一样.增量的Prepare步骤如下:
step1: prepare一个全备.需要携带–apply-log-only参数.命令如下:
1 | $ xtrabackup --user=bkpuser --password=123456 --prepare --apply-log-only --target-dir=/data/backups/base |
step2:prepare第一个增量备份..所有增量备份的prepare都是基于全备基础上
1 | $ xtrabackup --user=bkpuser --password=123456 --prepare --apply-log-only --target-dir=/data/backups/base \ |
对于第N个增量备份:
1 | $ xtrabackup --user=bkpuser --password=123456 --prepare --apply-log-only --target-dir=/data/backups/base \ |
但是对于最后一个增量备份的prepare.,注意不能使用–apply-log-only选项:
1 | $ xtrabackup --user=bkpuser --password=123456 --prepare --target-dir=/data/backups/base \ |
对于增量备份的prepare需要注意以下几点:
1.需要指定–apply-log-only参数
2.所有增量备份prepare的incremental-dir都是全备数据文件所在路径
3.最后一个增量备份的prepare不能使用apply-log-only参数
step3:一旦所有的增量备份都全部prepare以后,就可以像全备恢复一样恢复数据库:
1 | xtrabackup --user=bkpuser --password=123456 --copy-back --target-dir=/data/backups/ |
xtrabackup的压缩备份
xtrabackup支持备份的压缩功能,而且可以指定压缩线程数.
语法如下:
1 | --compress #表示开启压缩功能 |
例如:
1 | xtrabackup ---user=bkpuser --password=123456 --backup --compress --compress-threads=4 --target-dir=/data/backups/ |
note: 压缩的线程数只会影响压缩备份数据的时间长短,,而对备份后的数据容量没有任何影响
在实践工作中中,对于一个700M左右的mysql数据库.没有启用压缩功能和启用了压缩功能的备份文件容量大小如下:
1 | [root@localhost tmp]# du -sh /var/lib/mysql |
压缩备份的prepare工作
在prepare之前需要先对压缩文件进行解压.需要使用 –decompress选项
1 | xtrabackup --decompress --target-dir=/data/backups/ |
note:
1.需要先确保服务器已经安装了qpress软件.此软件在percona的软件源中.可以直接使用Yum下载安装
2.可以结合使用 –parallel参数并发解压缩多个数据库备份文件.
3.xtrabackup解压缩备份文件时,不会自动删除压缩文件.如果需要清除备份目录.需要使用–remove-original参数
解压缩备份文件后,接下来的prepare和还原工作和全量/增量一致.
xtrabackup备份脚本
以下脚本是我们公司生产中使用的脚本.屏蔽了一些关键信息.
1 | #!/bin/bash |