作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。
MySQL**(本章节)**
PostgreSQL
MongoDB
Redis
Etcd
我们前面讲到的MYSQL的Binlog的时候,已经进行了备份及还原(当时采用的就是逻辑备份)。
1. 什么是逻辑备份?
逻辑备份是将数据库中的结构(CREATE DATABASE/TABLE)和数据(INSERT STATEMENT)以 SQL 语句的形式导出到一个文本文件中。恢复时,MySQL 会执行这些 SQL 语句来重建数据库。
核心特点:
-
格式:通常是
.sql文件,人类可读。 -
内容:包含 CREATE 和 INSERT 等 SQL 语句。
-
恢复:通过 MySQL 客户端(如
mysql命令)导入执行。 -
优点:兼容性好,可以在不同硬件架构、不同 MySQL 版本之间迁移和恢复,甚至可以导入到其他数据库(如 MariaDB)。备份粒度可以很细(单表、单库)。
-
缺点:备份和恢复速度相对较慢(因为要执行 SQL),对于超大型数据库可能不适用。
2.逻辑备份操作(mysqldump)
备份单个库
mysqldump -u username -p database_name > backup.sql
备份所有库
mysqldump -u username -p --all-databases > all_backup.sql
备份单个表
mysqldump -u username -p database_name table1 table2 > tables_backup.sql
备份表结构(不含数据)
# 备份单个数据库的表结构
mysqldump -u username -p --no-data database_name > database_structure.sql
# 备份所有数据库的表结构
mysqldump -u username -p --no-data --all-databases > all_databases_structure.sql
备份数据(不含表结构)
# 备份单个数据库的数据
mysqldump -u username -p --no-create-info database_name > database_data.sql
# 备份所有数据库的数据
mysqldump -u username -p --no-create-info --all-databases > all_databases_data.sql
# 备份特定表的数据
mysqldump -u username -p --no-create-info database_name table1 table2 > tables_data.sql
还原数据
#Linux命令还原
mysql -u username -p database_name < backup.sql
#mysql命令还原
-- 选择数据库
USE database_name;
-- 执行备份文件
SOURCE /path/to/backup.sql;
注意,默认情况下还原的时候会删除原来的数据,如果你打开备份的sql文件可以看到类似的内容。
3.备份参数
选项
介绍
-u username
指定连接数据库的用户名
-p
提示输入密码
--host=hostname 或 -h hostname
指定 MySQL 服务器地址
--port=port
指定端口(默认 3306)
--single-transaction
对 InnoDB 表进行一致性备份,不锁表(推荐)
--routines 或 -R
备份存储过程和函数
--triggers
备份触发器(默认开启)
--events
备份事件调度器
--hex-blob
将 BINARY、VARBINARY 和 BLOB 列安全地转储为十六进制字符串
--lock-tables
备份时锁定所有表(MyISAM 需要,InnoDB 不推荐)
--master-data=2
记录二进制日志位置和文件名,用于搭建从库(值为2表示注释掉CHANGE MASTER语句)
--databases
备份指定的一个或多个数据库(包含 CREATE DATABASE 语句)
--all-databases
备份所有数据库
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。