一、 环境摘要
1.1 NBU备份MySQL方案概述
NetBackup可采用以下几种方案对MySQL进行备份:
ü 关闭MySQL并以文件形式离线备份(无法做到热备份)
ü 采用脚本或工具(如mysqldump)将MySQL数据先导出到文件系统然后再通过NBU对其备份
ü 采用Zmanda代理或MySQL Enterprise Backup与NetBackup结合使用
补充说明:
? 自带的mysqldump备份恢复速度慢(只要是逻辑备份数据量较大均不推荐),备份出来的为sql语句(即DDL+insert),增备利用mysql binlog,必须开启二进制日志
? NetBackup 8.1之前版本并无MySQL Agent,NBU Agent从8.1才开始引入,是通过创建快照来进行MySQL备份(适用于Windows的卷影复制服务(VSS)或Linux的逻辑卷管理器(LVM)须可获取数据库快照)
注:NetBackup for MySQL Agent支持完全备份、完全恢复以及重定向恢复(即异机恢复),不支持增量备份恢复、表级备份恢复。
? Zmanda或MEB对MySQL进行按需(全备、增备等)备份,NetBackup提供备份介质和策略管理(作业调度计划、保留周期等),NBU与其结合将MySQL直接备份至指定介质(如磁盘、磁带等)
? Zmanda已从开源转向Enterprise且使用率较低,配置麻烦因此不再考虑使用
? MySQL Enterprise Backup 3.6版本开始支持与介质管理软件(MMS)(如Symantec NetBackup,Oracle Secure Backup(OSB),IBM Tivoli Storage Manager(TSM))连接,以通过系统备份到磁带(SBT)接口执行备份和还原操作。SBT是作为共享库(Linux中的libobk.so和Windows中的orasbt.dll)实现的Oracle API,用于通过第三方软件供应商备份/恢复数据,MEB可通过MetaLink下载正常使用但属于商业软件(本次仅用于测试)
1.2 备份工具指标对比
工具 指标 |
MySQL Enterprise Backup |
MySQL Utilities |
mysqldump |
Physical copy |
LVM/ZFS snapshot |
XtraBackup |
备份类型 |
Physical |
Logical |
Logical |
Physical |
Physical |
Physical |
备份速度 |
Medium |
Slow |
Slow |
Fast |
Fast |
Medium |
恢复速度 |
Fast |
Slow |
Slow |
Fast |
Fast |
Fast |
系统支持 |
All |
All |
All |
All |
LVM only |
All |
数据库引擎 |
All |
All |
All |
All |
All |
InnoDB XtraDB MyISAM |
备注:XtraBackup 是一款可免费使用的开源工具,功能、使用率及备份速度均不错(与MEB难分伯仲),但此工具仅备份至文件系统或其他服务器,无法直接通过NetBackup lib库(libobk.so)结合将数据备份至NBU备份介质。 |
1.3 测试环境简述
本次测试采用NetBackup 7.7.3 Linux Server通过MEB(MySQL Enterprise Backup)对MySQL 5.6和5.7分别进行备份恢复操作(采用LAN备份),备份拓扑如下图所示:
说明(经验值,需根据具体环境而定):
? 数据量小于500GB可优先考虑采用LAN模式备份(部署相对简单方便且Standard Client无需访问备份介质)
? 数据量大于500GB可考虑采用LAN_FREE模式备份(需Enterprise Client且可访问备份介质)
? 数据量小于2TB可考虑每日完全备份,大于2TB考虑每周1-2次全备+增备组合方式
? 在备份数据量较大、保留周期较长、备份频率较高等环境中若后端备份介质支持压缩、去重功能可节省大量空间
二、 参数核查
1
2.1 系统版本检查
cat /etc/redhat-release CentOS release 6.10 (Final) |
2.2 MySQL版本检查
以下几种方法任选其一即可:
方法一:用户登录后便可看到版本信息
方法二:通过status命令查看
方法三:通过select命令查看
方法四:通过mysql –help命令查看
方法五:通过rpm –qa命令查看
2.3 MySQL其他参数查看
1、 查看port:
mysql> show global variables like ‘port’; |
2、 查看datadir:
mysql> show global variables like “%datadir%”; |
三、创建用户并赋权
备份需要MySQL特定用户连接到MySQL服务器,因此需要单独创建备份用户并赋权(亦可使用如root等管理账户操作)。
注:请根据之前核查的MySQL版本对应选择:
3.1 MySQL 5.7.21 and later
CREATE USER ‘mysqlbkuser‘@’localhost’ IDENTIFIED BY ‘P@ssw0rd‘; GRANT RELOAD ON *.* TO ‘mysqlbkuser‘@’localhost’; GRANT CREATE,INSERT,DROP,UPDATE ON mysql.backup_progress TO ‘mysqlbkuser‘@’localhost’; GRANT CREATE,INSERT,DROP,UPDATE,SELECT,ALTER ON mysql.backup_history TO ‘mysqlbkuser‘@’localhost’; GRANT REPLICATION CLIENT ON *.* TO ‘mysqlbkuser‘@’localhost’; GRANT SUPER ON *.* TO ‘mysqlbkuser‘@’localhost’; GRANT PROCESS ON *.* TO ‘mysqlbkuser‘@’localhost’; GRANT SELECT ON performance_schema.replication_group_members TO ‘mysqlbkuser‘@’localhost’; |
备1:For using transportable tablespaces (TTS) to back up and restore InnoDB tables还须赋予以下权限,否则跳过: GRANT LOCK TABLES,ALTER,SELECT,CREATE,DROP,FILE ON *.* TO ‘mysqlbkuser‘@’localhost’; |
备2:For creating tape backups using the System Backup to Tape (SBT) API还须赋予以下权限,否则跳过: GRANT CREATE,INSERT,DROP,UPDATE ON mysql.backup_sbt_history TO ‘mysqlbkuser‘@’localhost’; |
3.2 MySQL 5.7.9 to 5.7.20
CREATE USER ‘mysqlbkuser‘@’localhost’ IDENTIFIED BY ‘P@ssw0rd‘; GRANT RELOAD ON *.* TO ‘mysqlbkuser‘@’localhost’; GRANT CREATE,INSERT,DROP,UPDATE ON mysql.backup_progress TO ‘mysqlbkuser‘@’localhost’; GRANT CREATE,INSERT,SELECT,DROP,UPDATE ON mysql.backup_history TO ‘mysqlbkuser‘@’localhost’; GRANT REPLICATION CLIENT ON *.* TO ‘mysqlbkuser‘@’localhost’; GRANT SUPER ON *.* TO ‘mysqlbkuser‘@’localhost’; GRANT PROCESS ON *.* TO ‘mysqlbkuser‘@’localhost’; |
备1:For using transportable tablespaces (TTS) to back up and restore InnoDB tables还须赋予以下权限,否则跳过: GRANT LOCK TABLES,ALTER,SELECT,CREATE,DROP,FILE ON *.* TO ‘mysqlbkuser‘@’localhost’; |
备2:For creating tape backups using the System Backup to Tape (SBT) API还须赋予以下权限,否则跳过: GRANT CREATE,INSERT,DROP,UPDATE ON mysql.backup_sbt_history TO ‘mysqlbkuser‘@’localhost’; |
3.3 MySQL 5.7.9 earlier and 5.6
CREATE USER ‘mysqlbkuser‘@’localhost’ IDENTIFIED BY ‘P@ssw0rd‘; GRANT RELOAD ON *.* TO ‘mysqlbkuser‘@’localhost’; GRANT CREATE,INSERT,DROP,UPDATE ON mysql.backup_progress TO ‘mysqlbkuser‘@’localhost’; GRANT CREATE,INSERT,SELECT,DROP,UPDATE ON mysql.backup_history TO ‘mysqlbkuser‘@’localhost’; GRANT REPLICATION CLIENT ON *.* TO ‘mysqlbkuser‘@’localhost’; GRANT SUPER ON *.* TO ‘mysqlbkuser‘@’localhost’; |
备1:For using transportable tablespaces (TTS) to back up and restore InnoDB tables还须赋予以下权限,否则跳过: GRANT LOCK TABLES,ALTER,SELECT,CREATE,DROP,FILE ON *.* TO ‘mysqlbkuser‘@’localhost’; |
备2:For creating tape backups using the System Backup to Tape (SBT) API还须赋予以下权限,否则跳过: GRANT CREATE,INSERT,DROP,UPDATE ON mysql.backup_sbt_history TO ‘mysqlbkuser‘@’localhost’; |
四、 创建备份脚本
使用《Create_NBU_Scripts_V1.2.sh》可快速规范创建NBU备份MySQL或ORACLE脚本,提高效率并降低出错率,具体步骤如下:
1、 将脚本上传至客户端任意目录并赋权:
chmod +x Create_NBU_Scripts_V1.2.sh |
2、 运行脚本并输入相关信息(根据提示输入需要的信息即可),如下所示:
[root@backup tmp]# ./Create_NBU_Scripts_V1.2.sh Create NetBackup Script, Do you wish to continue? [y,n] (y) Choose the Backup Type you wish to create 1) NetBackup Script for MySQL DataBase(Use MEB) 2) NetBackup Script for Oracle DataBase 3) NetBackup Script for Oracle ArchiveLog 4) NetBackup Script for Oracle DataBase and ArchiveLog x) Exit from this Script Choose an option: 1 Input script directory and name: (default: /usr/openv/scripts) Input MySQL port number: (default: 3306) Input MySQL user name: (default: mysqlbkuser) Input MySQL User mysqlbkuser’s password: (default: P@ssw0rd) Input MySQL IP address: (default: 127.0.0.1) Input MySQL the directory to store the backup data: (default: /mysqlbak_nbu) “/mysqlbak_nbu” directory does not exist, create the directory? [y,n] (y) Input script name: (default: hot_mysql.sh) Input MEB mysqlbackup file path: (/opt/mysql/meb-3.12/bin/mysqlbackup) “/usr/openv/scripts/hot_mysql.sh” has been created. This script can be deleted after you are sure the create was successful. |
3、 完成后的脚本信息如下所示:
#!/bin/sh #2018.08.07_09:53:29 by yto MEB=/opt/mysql/meb-3.12/bin/mysqlbackup MYSQL_PORT=3306 MYSQL_INSTALL_USER=root MYSQL_DB_USER=mysqlbkuser MYSQL_PWD=P@ssw0rd MYSQL_HOST=127.0.0.1 MYSQL_BAK_DIR=/mysqlbak_nbu eecho(){ echo “$1”>>$BAK_LOG_FILE 2>&1;} CUSER=`id |cut -d”(” -f2 | cut -d “)” -f1` if [[ “$NB_ORA_INCR” = “1” || “$NB_ORA_CINC” = “1” ]];then BKTP=INC;else BKTP=FUL;fi BAK_LOG_FILE=${0}_${BKTP}_`date +%Y%m%d%H%M%S`.out eecho chmod 666 $BAK_LOG_FILE eecho “Script $0” 声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!
和泰机电过会:今年IPO过关第304家 民生证券过18单
上一篇
2022年8月3日
企业租办公电脑用笔记本还是台式机?2022年企业租电脑更省钱
下一篇
2022年8月3日
|