通常物理备份是保障数据库备份最有效的方法,优于逻辑备份,且其对数据库本身性能的损耗相较于逻辑备份较低。MySQL的物理备份通常我们使用Percona公司出品的基于 MySQL 的服务器的开源热备份实用程序。其使用方法如下:
#下载
MySQL 8.0 https://www.percona.com/downloads/Percona-XtraBackup-LATEST
MySQL 5.7 https://www.percona.com/downloads/Percona-XtraBackup-2.4
#解压
tar -xvf percona-xtrabackup-2.4.9-Linux-x86_64.tar.gz
cd percona-xtrabackup-2.4.9-Linux-x86_64/bin
cp xtrabackup /usr/bin/
cp innobackupex /usr/bin/
#全量备份
xtrabackup --backup --datadir=/data/mysql_3306 --target dir=/u01/backup/full
#增量备份
xtrabackup --backup --datadir=/data/mysql_3306 --target-dir=/u01/backup/incr --incremental-basedir=/u01/backup/full
#全量恢复
xtrabackup --prepare --apply-log-only --datadir=/data/mysql_3306 --target-dir=/u01/backup/full
#增量恢复 需要先做全量恢复后,才能做增量恢复
xtrabackup --prepare --apply-log-only --datadir=/data/mysql_3306 --target-dir=/u01/backup/full --incremental-dir=/u01/backup/incr
xtrabackup --copy-back datadir=/data/mysql_3306 --target-dir=/u01/backup/full --incremental-dir=/u01/backup/incr
mysql的逻辑备份有多种方式,伴随mysql的演进,官方分别出了mysqldump、mysqldumper、mysqlshell等工具。
2.1 Mysqldump
mysqldump是mysql的初代逻辑备份工具,无需单独安装,命令包含在mysql server的bin目录里。
数据备份
mysqldump -u用户名 -p密码 [OPTIONS] database [tables]
mysqldump -u用户名 -p密码 [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
mysqldump -u用户名 -p密码 [OPTIONS] --all-databases [OPTIONS]
常用参数
-u 用户名
-p 密码
-h hostname 信息
-d(--no-data) 只导出表结构
-A(--all-databases) 备份所有的数据库信息
-B(--databases) 备份多个数据库信息(-B db1 db2 db3 ...)
-Y(--all-tablespaces) 备份所有的表空间信息
-y(--no-tablespaces) 不备份表空间信息
-t(--no-create-info) 不添加 create table 语句 (默认为 开启状态)
-n(--no-create-db) 不添加 create database 语句
--add-drop-table 每次创建表之前先删除存在的表(默认为开启状态)
--skip-add-drop-table 删除 drop table 的语句
2.2. Mydumper
mydumper的多线程开源逻辑备份工具,myloader是与mydumper工具备份配合使用的多线程备份恢复工具,可以直接以mydumper输出文件为输入,恢复备份数据。
并行性。并行备份,并行恢复,可以提升备份恢复速度。
备份文件易于管理。备份出来的文件基于表为单位,一个sql文件记录一个表的信息。
一致性。维护所有线程的快照,提供准确的主日志和从日志位置
可管理性。支持PCRE(perl语音的正则表达式),用于指定数据库和表的包含/排除
常用参数
mydumper选项
myloader选项
#备份biz_test_xxx,包含trigger(G)、routines(R)、events(E),使用8线程(t)导出,输出目录/backup
mydumper -h 192.168.10.11 -P 3306 -u root -p 123456 -B biz_test_xxx -G -R -E -t 8 -o /backup
#备份数据库biz_test_xxx中的表test01,test02
mydumper -h 192.168.10.11 -P 3306 -u root -p 123456 -B biz_test_xxx -T test01,test02 -o /backup
#从备份目录/backup/biz_test_xxx恢复数据到biz_test_xxx
myloader -h 192.168.10.11 -P 3306 -u root -p 123456 -B biz_test_xxx -d /backup/biz_test_xxx
#从备份目录/backup/biz_test_xxx恢复数据表到biz_test_xxx
myloader -h 192.168.10.11 -P 3306 -u root -p 123456 -B biz_test_xxx -o test01,test02 -d /backup/table
2.3. Mysql shell
MySQL Shell 是Oracle官方发布的一个高级客户端和代码编辑器,是第二代MySQL客户端,内置了很多实用工具。相较于mysqldump、mydumper对大数据量的备份恢复友好,且效率高。
对于备份过程中有较多临时表生成、删除的业务,备份成功率更高。
自由度高,并行度可自己控制。大文件导入,可以拆分导入。
常用参数
checkForServerUpgrade:检测目标实例能否升级到指定版本
dumpInstance:备份实例
dumpSchemas:备份指定库
dumpTables:备份指定表
loadDump:恢复通过上面三个工具生成的备份
exportTable:将指定表导出到文本文件中。只支持单表,效果同 SELECT INTO OUTFILE 一样
importTable:将指定文本的数据导入到表中
详细均可通过help来查看
mysqlsh -- util –help
mysqlsh -- util dump-schemas –help
mysqlsh -- util load-dump –help
#备份
mysqlsh -udumper -pxxxx -h172.18.0.1 -P3306 -- util dump-schemas biz_test_log --compatibility=strip_definers --excludeTables=biz_test_log.t_log_app,biz_test_log.t_log_app_l --outputUrl=/var/backup
#恢复
mysqlsh -uroot -pxxxx -h172.18.0.1 -P3306 -- util load-dump /var/backup/biz_test_log --resetProgress --deferTableIndexes=all --ignoreExistingObjects=true --schema=biz_test_log