mysql 备份
- 1. 备份的类型
- 2.备份的类容
- 3. 备份工具
- 1:MySQL自带的备份工具
- 2:文件系统备份工具
- 3:其他工具
- 4:备份的策略
- 1. 直接拷贝数据库文件
- 2. mysqldump备份数据库
- 3. mydumper备份数据库
- 4.lvm快照从物理角度实现几乎热备的完全备份,配合二进制日志备份实现增量备份,速度快适合比较烦忙的数据库
- 5. 查看数据库的数据文件所在地
- 备份脚本
1. 备份的类型
分类一——从服务器状态来分:
类型 | 说明 |
---|---|
热备份 | 读写不受影响 |
冷备份 | 离线备份,读写均中止 |
温备份 | 备份时只读 |
分类二——从对象来分:
类型 | 说明 |
---|---|
物理备份 | 复制数据文件 |
逻辑备份 | 将数据导出到文本文件中 |
逻辑备份的优缺点:
优点 | 缺点 |
---|---|
在备份速度上两种备份要取决于不同的存储引擎 | 逻辑备份要对RDBMS产生额外的压力,而裸备份无压力 |
物理备份的还原速度非常快。但是物理备份的最小粒度只能做到表 | 逻辑备份的结果可能要比源文件更大。所以很多人都对备份的内容进行压缩 |
逻辑备份保存的结构通常都是纯ASCII的,所以我们可以使用文本处理工具来处理 | 逻辑备份可能会丢失浮点数的精度信息 |
逻辑备份有非常强的兼容性,而物理备份则对版本要求非常高 | |
逻辑备份也对保持数据的安全性有保证 |
分类三——从数据收集:
类型 | 说明 |
---|---|
完全备份 | 备份所以数据 |
增量备份 | 仅备份上传备份或增量备份以后变化的数据 |
差异备份 | 仅备份上传完全备份以来变化的数据 |
2.备份的类容
数据文件
日志文件(比如事务日志,二进制日志)
存储过程,存储函数,触发器
配置文件(十分重要,各个配置文件都要备份)
用于实现数据库备份的脚本,数据库自身清理的Crontab
3. 备份工具
1:MySQL自带的备份工具
- mysqldump
逻辑备份工具,支持所有引擎,MyISAM引擎是温备,InnoDB引擎是热备,备份速度中速,
还原速度非常非常慢,但是在实现还原的时候,具有很大的操作余地。具有很好的弹性。 - mysqlhotcopy
物理备份工具,但只支持MyISAM引擎,基本上属于冷备的范畴,物理备份,速度比较
快。
2:文件系统备份工具
- cp冷备份
支持所有引擎,复制命令,只能实现冷备,物理备份。使用归档工具,cp命令,对其进行备份的,备份速度快,还原速度几乎最快,但是灵活度很低,可以跨系统,但是跨平台能力很差。 - lvm
支持所有引擎,基于快照(LVM,ZFS)的物理备份,速度非常快,几乎是热备。只影响数据几秒钟而已。但是创建快照的过程本身就影响到了数据库在线的使用,所以备份速度比较快,恢复速度比较快,没有什么弹性空间,而且LVM的限制:不能对多个逻辑卷同一时间进行备份,所以数据文件和事务日志等各种文件必须放在同一个LVM上。而ZFS则非常好的可以在多逻辑卷之间备份。
3:其他工具
- ibbackup
商业工具,备份还原都很快,但是很贵 - xtrabackup
开源工具,ibbackup的平替 - mysqlbackup
ORACLE公司也提供了针对企业的备份软件MySQL Enterprise Backup简称
4:备份的策略
1. 直接拷贝数据库文件
- 停止数据库,进入数据库的数据文件,全部打包
systemctl stop mysqld #停止数据库服务
cd /var/lib/mysql # 进入数据库的数据文件所在地
tar czf /tem/database.tar.gz * #把所有的文件都打包到/tem/database.tar.gz
- 发送到需要恢复的服务器上
scp /tem/database.tar.gz 服务器IP:/tmp
- 停止服务器的数据库服务
systemctl stop mysqld
- 解压到服务器数据库数据文件的所在的
tar xf /tem/database.tar.gz -C /var/lib/mysql
- 重启服务器数据库
systemctl restart mysqld
2. mysqldump备份数据库
备份恢复单个数据库
mysqldump -uroot -p12345678 it -B > /backuo/db/it_1.sql # -B: 这是指定备份时同时包括数据库创建的选项。使用这个选项可以在备份文件中包含创建数据库的语句。
备份恢复全部数据库
mysqldump -uroot -p12345678 -A -B > /backuo/db/it_all.sql
恢复:
-
备份时包含-B
- 进mysql
- 创建对应的数据库
- source 备份文件的路径
-
备份时不包含-B
mysqldump -uroot -p12345678 < /backuo/db/it_1.sql
-
备份恢复单个表
和上边类似,只是在备份是把表名带上 -
备份数据结构,不备份数据
mysqldump -uroot -p12345678 it -b > /backuo/db/it_structure.sql
-
增量备份+完全备份
- 前提
完全备份: mysqldump -uroot -p --default-character-set=utf8 --single-transaction -F -B 数据库名 |gzip > /server/backup/school_$(date +%F).sql.gz 查看二进制日志在哪 立即刷新并备份出binlog mysqladmin -uroot -p flush-logs cp /path/to/mysql-bin.000004 /server/backup/ 恢复binlog生成sql语句 mysqlbinlog mysql-bin.000004 > bin.log zcat school_$(date +%F).sql.gz | mysql -uroot -p mysql -uroot -p < bin.log
mysqlbinlog增量恢复方式
基于时间点恢复
1)指定开始时间到结束时间
myslbinlog mysqlbin.000008 --start-datetime=’2014-10-45 01:10:46’ --stopdatetime=’2014-10-45 03:10:46’-r time.sql
2)指定开始时间到文件结束
myslbinlog mysqlbin.000008 --start-datetime=’2014-10-45 01:10:46’ -d esen -r
time.sql
3)从文件开头到指定结束时间
myslbinlog mysqlbin.000008 --stop-datetime=’2014-10-45 03:10:46’ -d esen -r
time.sql
基于位置点的增量恢复
1)指定开始位置到结束位置
myslbinlog mysqlbin.000008 --start-position=510 --stop-position=1312 -r pos.sql
2)指定开始位置到文件结束
myslbinlog mysqlbin.000008 --start-position=510 -r pos.sql
3)从文件开始位置到指定结束位置
myslbinlog mysqlbin.000008 --stop-position=1312 -r pos.sql - 前提
3. mydumper备份数据库
Mydumper 是一个用于备份和恢复 MySQL 数据库的开源工具,它可以快速且并行地导出和导入数据库。以下是使用 Mydumper 进行备份和还原的基本步骤:
-
安装 Mydumper:
在 Linux 系统上,使用包管理器安装 Mydumper 工具。例如,在 Ubuntu 上可以使用以下命令进行安装:sudo apt-get install mydumper
-
备份数据库:
使用 Mydumper 通过以下命令备份数据库,将DATABASE_NAME
替换为要备份的实际数据库名称,并指定备份输出的目录路径:mydumper -u USERNAME -p PASSWORD -B DATABASE_NAME -o /path/to/backup_directory
其中,
USERNAME
是连接 MySQL 的用户名,PASSWORD
是对应的密码。备份文件将保存在指定的目录路径中。 -
还原数据库:
在执行还原操作之前,请确保已经在 MySQL 中创建了用于还原的数据库。然后,使用以下命令来还原数据库,将DATABASE_NAME
替换为要还原的实际数据库名称,并指定备份文件的路径:myloader -u USERNAME -p PASSWORD -d /path/to/backup_directory
其中,
USERNAME
是连接 MySQL 的用户名,PASSWORD
是对应的密码。该命令将从指定的备份文件中还原数据库。
Mydumper 工具还有其他更高级的选项,可以根据需要进行配置,如并行度、压缩等。您可以查阅 Mydumper 的文档以获取更多详细的信息和用法示例。
4.lvm快照从物理角度实现几乎热备的完全备份,配合二进制日志备份实现增量备份,速度快适合比较烦忙的数据库
5. 查看数据库的数据文件所在地
1:看数据库的数据文件所在地
2:修改my.cnf,指定datadir目录
备份脚本
#!/bin/bash
# 定义备份脚本的变量
USER=root
PASSWORD=your_mysql_password
DATABASE=db_name
BACKUP_DIR=/backup
# 创建备份存储目录
mkdir -p $BACKUP_DIR
# 生成备份文件名
TODAY=`date +"%Y-%m-%d"`
FILE_NAME="$DATABASE-$TODAY.sql"
# 备份MySQL数据库
mysqldump -u $USER -p$PASSWORD --databases $DATABASE --single-transaction --flush-logs > $BACKUP_DIR/$FILE_NAME
# 压缩备份文件
tar -zcvf $BACKUP_DIR/$FILE_NAME.tar.gz $BACKUP_DIR/$FILE_NAME
# 删除原始备份文件
rm $BACKUP_DIR/$FILE_NAME
# 完成备份
echo "MySQL backup successfully completed."
要使用cron来调度备份,请执行以下步骤:
打开终端并输入以下命令:crontab -e
在打开的文件中添加以下行:
0 0 * * * /path/to/backup.sh
# 每天晚上十二点进行数据库备份