数据库备份是指将数据库中的数据和结构进行备份,以便在发生故障或数据丢失时恢复数据库的操作。数据库备份的时候主要分为了逻辑备份和物理备份这两种方式。
物理备份:
物理备份是指直接将数据库的二进制文件进行备份,包括数据文件、日志文件和索引文件等。物理备份是通过复制数据库文件来进行备份,可以通过文件系统工具(如cp或rsync)进行备份。
优点:备份和恢复的速度较快,特别是在数据量较大的情况下,而且备份的过程比逻辑备份简单。
逻辑备份:
逻辑备份是指通过导出数据库中的数据和结构的逻辑表示(例如SQL语句),将其保存到文件中。逻辑备份可以是数据库的逻辑结构、表结构和数据等。
优点是备份文件相对较小,备份和恢复速度较快,可以跨平台进行备份和恢复。
缺点是备份和恢复的过程较慢,特别是在数据量较大的情况下。
逻辑备份优点:
- 可移植性:逻辑备份通常导出的是SQL语句,这些语句可以在不同的数据库系统之间迁移,而物理备份通常是特定于数据库的存储格式。
- 兼容性:逻辑备份生成的文件可以被不同版本的数据库软件读取,这有助于在升级数据库软件时保持数据的兼容性。
- 安全性:逻辑备份可以更容易地进行加密和压缩,提高了数据的安全性。
- 灵活性:逻辑备份允许用户选择备份特定的表或数据库,而物理备份通常涉及整个数据库文件。
- 易于操作:逻辑备份通常可以通过简单的命令行工具或脚本来执行,易于自动化和集成到现有的工作流程中。
- 恢复速度:在某些情况下,逻辑备份的恢复速度可能比物理备份更快,因为只需要执行SQL语句即可。
- 测试和开发:逻辑备份可以快速地用于数据库的测试和开发环境,因为它们可以快速地被导入到新的数据库实例中。
使用Mysqldump实现逻辑备份
定义
mysqldump是MySQL自带的命令行工具
它的备份原理是通过协议连接到 MySQL数据库,将需要备份的数据查询出来,
将查询出的数据转换成对应的insert语句,当我们需要还原这些数据时,
只要执行这些insert语句,即可将对应的数据还原。
语法
mysqldump的使用语法:
- 备份指定数据库
mysqldump 选项 数据库
- 备份指定数据库下的某张表
mysqldump 选项 数据库 表
- 备份多个数据库
mysqldump 选项 --database/-B 数据库1 数据库2
- 备份所有数据库
mysqldump 选项 --all-databases/ -A
mysqldump连接数据库的选项:
-
-u,--user:指定登陆数据库的用户名。
-
-p,--password:指定登录数据库的密码
-
-h,--host:指定要登陆的MySQL服务器地址。
-
-P,--port:指定MySQL数据库的端口号。
-
-S:指定当前数据库实例的sock文件。
mysqldump输出选项:
--add-drop-database:在每个数据库创建语句前加上 drop database 语句。
--add-drop-table:在每个表创建语句前加上 drop table 语句 , 默认开启 ; 不开启 (–skip-add-drop-table) 。
-n, --no-create-db:不包含数据库的创建语句。
-t, --no-create-info:不包含数据表的创建语句。
-d --no-data:不包含数据。
-T, --tab=name:自动生成两个文件:一个.sql文件,创建表结构的语句;一 个.txt文件,数据文件 。
例子
备份单个库
[root@mysql ~]# mysqldump -uroot -p123456 -B db_1 > /data/backup/db_1.sql
增量备份
#!/bin/bash
# 设置数据库信息
username="root"
password="password"
database="mydb"
# 设置备份文件路径
backup_dir="/path/to/backup"
# 获取上次备份完成的时间点
last_backup=$(cat ${backup_dir}/last_backup.txt)
# 设置当前时间作为备份文件名
current_time=$(date +"%Y%m%d%H%M%S")
backup_file="${backup_dir}/${current_time}.sql"
# 使用mysqldump命令进行增量备份
mysqldump -u ${username} -p${password} --databases ${database} --where="update_time > '${last_backup}'" > ${backup_file}
# 更新上次备份完成的时间点
echo $(date +"%Y-%m-%d %H:%M:%S") > ${backup_dir}/last_backup.txt