重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
上篇文章中,我们介绍了几种 MySQL 数据备份方式的原理,本文我们将和大家来共同探讨这些数据备份方式如何来使用。关于数据备份的使用攻略,各路大神都有示例文章,本文对此做了简单的总结和汇总。
创新互联建站长期为上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为嵩明企业提供专业的做网站、成都网站制作,嵩明网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。
Mysqldump
Mysqldump 是 MySQL 自带的很好用的备份工具,常用于 MySQL 数据库的逻辑备份,将 MySQL 服务器中的数据库以标准的 sql 语言的方式导出,并保存到文件中。其语法为: mysqldump (选项)。
常用的语法有:
--add-drop-table :在每个创建数据库表语句前添加删除数据库表的语句;
--add-locks :备份数据库表时锁定数据库表;
--all-databases :备份 MySQL 服务器上的所有数据库;
--comments :添加注释信息;
--compact :压缩模式,产生更少的输出;
--complete-insert :输出完成的插入语句;
--databases :指定要备份的数据库;
--default-character-set :指定默认字符集;
--force :当出现错误时仍然继续备份操作;
--host :指定要备份数据库的服务器;
--lock-tables :备份前,锁定所有数据库表;
--no-create-db :禁止生成创建数据库语句;
--no-create-info :禁止生成创建数据库库表语句;
--password :连接 MySQL 服务器的密码;
--port : MySQL 服务器的端口号;
--user :连接 MySQL 服务器的用户名。
数据备份的简单实例:
mysqldump 导出整个数据库 :
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
例: mysqldump -u linuxde -p smgp_apps_linuxde > linuxde.sql
mysqldump 导出一个表
mysqldump -u 用户名 -p 数据库名 表名 > 导出的文件名
例: mysqldump -u linuxde -p smgp_apps_linuxde users > linuxde_users.sql
mysqldump 导出一个数据库结构
mysqldump -u linuxde -p -d --add-drop-table smgp_apps_linuxde > linuxde_db.sql
Mydumper
mydumper
是
MySQL
数据库备份的一个轻量级第三方开源工具,备份方式为逻辑备份,支持多线程,备份速度远高于原生态的
mysqldump
。用法为:
mydumper [OPTION...] multi-threaded MySQL dumping
常用的语法:
-B, --database 需要备份的库
-T, --tables-list 需要备份的表,用逗号分隔
-o, --outputdir 输出文件的目录
-s, --statement-size 生成插入语句的字节数, 默认 1000000
-r, --rows 分裂成很多行块表
-c, --compress 压缩输出文件
-e, --build-empty-files 即使表没有数据,还是产生一个空文件
-x, --regex 正则表达式: 'db.table'
-i, --ignore-engines 忽略的存储引擎,用逗号分隔
-m, --no-schemas 不导出表结构
-k, --no-locks 不执行共享读锁 警告:这将导致不一致的备份
-l, --long-query-guard 设置长查询时间,默认60秒,
--kill-long-queries kill掉长时间执行的查询
-b, --binlogs 导出binlog
-D, --daemon 启用守护进程模式
-I, --snapshot-interval dump快照间隔时间,默认60s,需要在daemon模式下
-L, --logfile 日志文件
-t, --threads 使用的线程数,默认4
-C, --compress-protocol 在mysql连接上使用压缩协议
-V, --version Show the program version and exit
-v, --verbose 更多输出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2
数据备份的简单示例
1 备份单个库
# mydumper -u 用户名 -p 密码 -B 需要备份的库名 -o /tmp/bak
2 备份所有数据库:全库备份期间除了information_schema与performance_schema之外的库都会被备份
# mydumper -u 用户名 -p 密码 -o /tmp/bak
-o 输出文件的目录(备份输出指定的目录)
3 备份单表
# mydumper -u 用户名 -p 密码 -B 库名 -T 表名 -o /tmp/bak
-T 需要备份的表,多表用逗号分隔 -o指定输出备份文件路径
4 备份多表
# mydumper -u 用户名 -p 密码 -B 库名 -T 表1,表2 -o /tmp/bak
5、当前目录自动生成备份日期时间文件夹,不指定-o参数及值时默认为:export-20150703-145806
mydumper -u 用户名 -p 密码 -B 数据库名字 -T 表名
6、不带表结构备份表
# mydumper -u 用户名 -p 密码 -B 数据名字 -T 表名 -m
-m 不导出表结构
7、备份特定表
# mydumper -u 用户名 -p 密码 -B 数据库名字 --regex=actor* -o /tmp/bak
只备份以actor*开头的表
Xtrabackup
前两种工具都是逻辑备份,而Xtrabackup是物理备份,是商业备份工具InnoDB Hotbackup的替代品,包含的两个主要工具分别是xtrabackup和innobackupex。其中xtrabackup只能备份innodb和xtradb两种引擎的表,而不能备份myisam引擎的表,而innobackupex是一个封装了xtrabackup的Perl脚本,可同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读锁,且myisam不支持增量备份。
另外,还有两个相对比较小众的工具分别是xbcrypt和xbstream ,xbcrypt是加解密用的,xbstream 类似于tar,是 Percona 自己实现的一种支持并发写的流文件格式。
常用的参数
1) innobackupex 参数选项
--defaults-file=[MY.CNF] //指定配置文件:只能从给定的文件中读取默认选项。 且必须作为命令行上的第一个选项;必须是一个真实的文件,它不能是一个符号链接。
--databases=# //指定备份的数据库和表,格式为:--database="db1[.tb1] db2[.tb2]" 多个库之间以空格隔开,如果此选项不被指定,将会备份所有的数据库。
--include 传递给 xtrabackup --tables。
--tables-file=FILE //此选项的参数需要是一个文件名,此文件中每行包含一个要备份的表的完整名称,格式为databasename.tablename。该选项传递给 xtrabackup --tables-file,与--tables选项不同,只有要备份的表的库才会被创建。
--compact //创建紧凑型备份,忽略所有辅助索引页,只备份data page;通过--apply-log中重建索引--rebuild-indexs。
--compress //此选项指示xtrabackup压缩备份的InnoDB数据文件,会生成 *.qp 文件。
--decompress //解压缩qp文件,为了解压缩,必须安装 qpress 工具。
--no-timestamp //指定了这个选项备份将会直接存储在 BACKUP-DIR 目录,不再创建时间戳文件夹。
想查看更多的参数,请戳:
https://www.percona.com/doc/perconaxtrabackup/2.4/innobackupex/innobackupex_option_reference.html
2) xtrabackup 参数选项
--apply-log-only //这个选项使在准备备份(prepare)时,只执行重做(redo)阶段,这对于增量备份非常重要。
--backup //进行备份并将其放入
--check-privileges //此选项检查Percona XtraBackup是否具有所有必需的权限。
--compact //跳过辅助索引页来创建压缩备份。
想查看更多的参数,请戳:
https://www.percona.com/doc/percona-xtrabackup/LATEST/xtrabackup_bin/xbk_option_reference.html
数据备份的简单示例
innobackupex完全备份
#备份所有数据库:备份目录里生成日期命名的文件夹
innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 /home/zhoujy/xtrabackup/
#备份所有数据库:指定备份目录
innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --no-timestamp /home/zhoujy/xtrabackup/
#备份指定数据库名,多个数据库用空格分开
innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --no-timestamp --databases="dba_test xtra_test" /home/zhoujy/xtrabackup/
#备份指定表
备份不同库下的不同表
1:innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --no-timestamp --databases="dba_test.tb1 xtra_test.M" /home/zhoujy/xtrabackup/
备份一个库下面的表,支持正则,如:--include='^mydatabase[.]mytable'
2:innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --no-timestamp --include='xtra_test.I' /home/zhoujy/xtrabackup/
备份指定文件里的表,文件里每行的格式是:dbname.tbname
3:innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --no-timestamp --tables-file=/tmp/tbname.txt /home/zhoujy/xtrabackup/
innobackupex 增量备份
#全量备份,这里举例单个表,也可以是指定几个库,甚至所有库
innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --no-timestamp --databases="xtra_test.I" /home/zhoujy/xtrabackup/
#增量备份1
innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --no-timestamp --databases="xtra_test.I" --incremental-basedir=/home/zhoujy/xtrabackup/ --incremental /home/zhoujy/increment_data/
#增量备份2
innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --no-timestamp --databases="xtra_test.I" --incremental-basedir=/home/zhoujy/increment_data/ --incremental /home/zhoujy/increment_data1/
Xtrabackup全量备份
1:指定--defaults-file
xtrabackup --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --backup --target-dir=/home/zhoujy/xtrabackup/
2:用--datadir取代--defaults-file
xtrabackup --user=root --password=123 --backup --datadir=/var/lib/mysql/ --target-dir=/home/zhoujy/xtrabackup/
Xtrabackup增量备份
#备份,这里指定几个库和表,也可以是所有库
1:库全量备份
xtrabackup --user=root --password=123 --datadir=/var/lib/mysql/ --backup --parallel=3 --databases="xtra_test dba_test" --target-dir=/home/zhoujy/xtrabackup/
2:增量备份
xtrabackup --user=root --password=123 --datadir=/var/lib/mysql/ --backup --parallel=3 --databases="xtra_test dba_test" --target-dir=/home/zhoujy/xtrabackup1/ --incremental-basedir=/home/zhoujy/xtrabackup/
注意:要是有多个增量备份,第2个增量需要指定第一个增量的目录。和innobackupex一样。