mysqldump

110 阅读4分钟

数据库备份是指将数据库中的数据和结构进行备份,以便在发生故障或数据丢失时恢复数据库的操作。数据库备份的时候主要分为了逻辑备份和物理备份这两种方式。

物理备份:

物理备份是指直接将数据库的二进制文件进行备份,包括数据文件、日志文件和索引文件等。物理备份是通过复制数据库文件来进行备份,可以通过文件系统工具(如cp或rsync)进行备份。

优点:备份和恢复的速度较快,特别是在数据量较大的情况下,而且备份的过程比逻辑备份简单。

逻辑备份:

逻辑备份是指通过导出数据库中的数据和结构的逻辑表示(例如SQL语句),将其保存到文件中。逻辑备份可以是数据库的逻辑结构、表结构和数据等。

优点是备份文件相对较小,备份和恢复速度较快,可以跨平台进行备份和恢复。

缺点是备份和恢复的过程较慢,特别是在数据量较大的情况下。

逻辑备份优点:

  1. 可移植性:逻辑备份通常导出的是SQL语句,这些语句可以在不同的数据库系统之间迁移,而物理备份通常是特定于数据库的存储格式。
  2. 兼容性:逻辑备份生成的文件可以被不同版本的数据库软件读取,这有助于在升级数据库软件时保持数据的兼容性。
  3. 安全性:逻辑备份可以更容易地进行加密和压缩,提高了数据的安全性。
  4. 灵活性:逻辑备份允许用户选择备份特定的表或数据库,而物理备份通常涉及整个数据库文件。
  5. 易于操作:逻辑备份通常可以通过简单的命令行工具或脚本来执行,易于自动化和集成到现有的工作流程中。
  6. 恢复速度:在某些情况下,逻辑备份的恢复速度可能比物理备份更快,因为只需要执行SQL语句即可。
  7. 测试和开发:逻辑备份可以快速地用于数据库的测试和开发环境,因为它们可以快速地被导入到新的数据库实例中。

使用Mysqldump实现逻辑备份

定义

mysqldump是MySQL自带的命令行工具

它的备份原理是通过协议连接到 MySQL数据库,将需要备份的数据查询出来,

将查询出的数据转换成对应的insert语句,当我们需要还原这些数据时,

只要执行这些insert语句,即可将对应的数据还原。

语法

mysqldump的使用语法:

  1. 备份指定数据库

mysqldump 选项 数据库

  1. 备份指定数据库下的某张表

mysqldump 选项 数据库 表

  1. 备份多个数据库

mysqldump 选项 --database/-B 数据库1 数据库2

  1. 备份所有数据库

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