在进行数据库数据逻辑备份操作过程中,主要会运用mysqldump逻辑备份工具,可以实现本地或远程的数据备份;
利用mysqldump进行逻辑备份数据时,主要的备份逻辑是将建库、建表、数据插入语句信息导出,实现数据的备份操作;
基于mysqldump备份数据的逻辑原理,对于数据量比较小的场景(单表数据行百万以内),mysqldump备份工具做备份会更适合些;
在跨平台或跨版本进行数据库数据信息迁移时,mysqldump备份工具做备份也会比较适合,可以避免物理备份的兼容性问题;
说明:在一般情况下,对数据库进行数据恢复的时间耗费,大约是数据库进行数据备份的时间耗费的3~5倍。
工具命令使用语法:
-- 在执行mysqldump命令时,也会用到数据库连接登录的基础参数:-u -p -S -h -P
[root@master ~]# mysqldump -u数据库用户 -p数据库密码 [备份参数] > /路径信息/数据库备份文件.sql
工具命令常用参数:
| 序号 | 参数信息 | 官方说明 | 解释说明 |
|---|---|---|---|
| 01 | -A | Dump all the databases | 表示备份所有库中数据信息 |
| 02 | -B | Dump several databases. | 表示备份指定库中数据信息 |
| 03 | -F | Flush logs file in server before starting dump | 表示在备份启动前自动刷新日志文件 |
工具命令实践操作:
数据库备份恢复练习环境准备:
-- 备份机器创建备份sql数据目录
[root@master ~]# mkdir -p /database_backup
-- 如果有用户,则使用下面语句进行创建
[root@master ~]# mysql
mysql> alter user root@'localhost' identified by '123456';
-- 如果没有用户,则使用下面语句进行创建
mysql> create user root@'localhost' identified with mysql_native_password by '123456';
一、数据库全库备份操作练习实践命令¶
将数据库中所有数据库全部备份(-A)
本机进行备份
-- 利用mysqldump命令备份的数据文件是纯文本文件,是可以进行查看或过滤的;下面warning内容是因为gtid开启的原因导致,可以不用管
[root@db01-51 ~]# mysqldump -uroot -p123456 -A >/database_backup/all_database.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.
-- 如果想消除上面告警提示,则可使用--single-transaction和--set-gtid-purged=OFF这两个参数
[root@db01-51 ~]# mysqldump -uroot -p123456 --single-transaction --set-gtid-purged=OFF -A > /database_backup/all_database.sql
-- 验证查看
[root@db01-51 ~]# ll -h /database_backup/all_database.sql
-rw-r--r-- 1 root root 49M Mar 10 12:07 /database_backup/all_database.sql
相关参数说明:
- --single-transaction:保证Innodb引擎一致性备份及实现无锁热备份
- --set-gtid-purged=OFF:设置 GTID 不写入备份文件
说明:利用-A创建数据库备份数据时,在备份数据中会含有 create建库语句和use切换库语句,可以直接进行恢复操作即可;
本机进行备份还原数据
-- 方法一
[root@db01-51 ~]# source /database_backup/all_database.sql
-- 方法二
[root@db01-51 ~]# mysql -uroot -p123456 < /database_backup/all_database.sql
远程机器进行备份
-- 远程机器创建存储目录
[root@db02-52 ~]# mkdir -p /database_backup
-- 备份
[root@db01-52 ~]# mysqldump -uroot -p123456 -h 10.0.0.51 --single-transaction --set-gtid-purged=OFF -A > /database_backup/all_database.sql
-- 验证
[root@db02-52 ~]# ll /database_backup/all_database.sql
-rw-r--r-- 1 root root 51267996 Mar 10 12:21 /database_backup/all_database.sql
远程机器进行备份还原数据
-- 方法一
[root@db01-51 ~]# mysql -uroot -p123456 -h 10.0.0.51 -e "source /database_backup/all_database.sql"
-- 方法二
[root@db01-51 ~]# mysql -uroot -p123456 -h 10.0.0.51 < /database_backup/all_database.sql
二、数据库部分备份操作练习实践命令¶
2.1 将数据库中单个数据库进行备份(-B)¶
# 进行数据库单库备份操作
[root@db01-51 ~]# mysqldump -uroot -p123456 -B zq --single-transaction --set-gtid-purged=OFF >/database_backup/zq.sql
# 过滤部分内容后查看备份数据库文件信息:
[root@db01-51 ~]# egrep -vi '^-|^/\*|^$|lock' /database_backup/zq.sql
...
...
DROP TABLE IF EXISTS `test1`;
CREATE TABLE `test1` (
`id` int DEFAULT NULL,
`name` char(5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `test1` VALUES (1,'a'),(2,'b'),(3,'c');
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
以上指定数据库备份完毕后,可以模拟删除相应数据,利用备份的数据库文件进行数据库恢复操作:
-- 模拟删除数据库中数据表信息,造成数据库中数据损坏
mysql> use zq
mysql> show tables;
+--------------+
| Tables_in_zq |
+--------------+
| t100w |
| test1 |
+--------------+
2 rows in set (0.00 sec)
-- 删除表
mysql> drop table t100w;
-- 查看表
mysql> show tables;
+--------------+
| Tables_in_zq |
+--------------+
| test1 |
+--------------+
1 row in set (0.00 sec)
Empty set (0.00 sec)
# 进行数据库数据复原恢复操作:
# 方式一:在数据库系统中加载数据库备份文件
mysql> source /database_backup/zq.sql;
# 方式二:在操作系统命令行执行数据恢复命令
[root@master ~]# mysql -uroot -p123456 zq </database_backup/zq.sql
# 数据信息恢复完毕后检查数据库情况
mysql> show tables;
+------------------------+
| Tables_in_oldboy |
+------------------------+
| stu2 |
+------------------------+
1 row in set (0.00 sec)
mysql> select * from stu2;
2.2 将数据库中多个数据库进行备份(-B)¶
[root@master ~]# mysqldump -uroot -p123456 --single-transaction --set-gtid-purged=OFF -B zq world >/database_backup/zq_world.sql
# 过滤部分内容后查看备份数据库文件信息:
[root@master ~]# egrep -vi '^-|^/\*|^$|lock' /database_backup/zq_world.sql
说明:利用-B创建数据库备份数据时,在备份数据中会含有 create建库语句和use切换库语句,可以直接进行恢复操作即可;
多个数据库备份进行还原:
# 方式一:在数据库系统中加载数据库备份文件
mysql> source /database_backup/zq_world.sql;
# 方式二:在操作系统命令行执行数据恢复命令
[root@master ~]# mysql -uroot -p123456 zq </database_backup/zq_world.sql
三、数据表部分备份操作练习实践命令¶
3.1 将数据库中单个数据表进行备份¶
# 备份指定数据库中的单个数据表:
[root@master ~]# mysqldump -uroot -p123456 --single-transaction --set-gtid-purged=OFF zq t100w >/database_backup/zq_tables_t100w.sql
# 恢复指定数据库中的单个数据表:
[root@master ~]# mysql -uroot -p123456 zq < /database_backup/zq_tables_t100w.sql
3.2 将数据库中多个数据表进行备份¶
# 备份指定数据库中的多个数据表:
[root@master ~]# mysqldump -uroot -p123456 --single-transaction --set-gtid-purged=OFF zq t100w test1 >/database_backup/zq_tables_t100w_test1.sql
# 恢复指定数据库中的多个数据表:
[root@master ~]# mysql -uroot -p123456 zq </database_backup/zq_tables_t100w_test1.sql
说明:数据库单表或多表进行数据备份时,在备份数据中不含有create建库语句和use切换库语句,需要建库并指定库再恢复数据;