逻辑备份
备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低。
本质:导出的是SQL语句文件
优点:不论是什么存储引擎,都可以用mysqldump备成SQL语句
缺点:速度较慢,导入时可能会出现格式不兼容的突发情况,无法做增量备份和累计增量备份。
提供三种级别的备份,表级,库级和全库级
逻辑备份: 备份的是建表、建库、插入等操作所执行SQL语句(DDL DML DCL),适用于中小型数据库,效率相对较低。
本身为客户端工具:
远程备份语法: mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql
本地备份语法: mysqldump -u用户名 -p密码 数据库名 > 备份文件.sql
常用备份选项
-A, --all-databases 备份所有库
-B, –databases bbs test mysql 备份多个数据库
–no-data,-d 不导出任何数据,只导出数据库表结构。
备份表
语法:mysqldump -u root -p1 db1 t1 > /db1.t1.bak
mysqldump -u 用户 -p 密码 数据库名 表名 > 需要备份到的路径/文件
[root@mysql-server ~]# mkdir /home/back #创建备份目录
# 将school数据库的employee5表备份到/home/back/下,命名为school.employee5.bak
[root@mysql-server ~]# mysqldump -uroot -p'Qwer@123' school employee5 > /home/back/school.employee5.bak
mysqldump: [Warning] Using a password on the command line interface can be insecure.
备份多个表
语法:mysqldump -u root -p1 db1 t1 t2 > /db1.t1_t2.bak
[root@mysql-server ~]# mysqldump -uroot -p'Qwer@123' school new_t1 new_t2 > /home/back/school.new_t1_t2.bak
备份库
备份一个库:相当于将这个库里面的所有表全部备份。
语法: mysqldump -u root -p1 db1 > /db1.bak
[root@mysql-server ~]# mysqldump -uroot -p'Qwer@123' school > /home/back/school.bak
备份多个库(-B)
语法:mysqldump -u root -p1 -B db1 db2 db3 > /db123.bak
mysqldump -u 用户 -p 密码 -B 数据库1 数据库2 数据库3 … > 备份位置目录/文件
[root@mysql-server ~]# mysqldump -uroot -p'Qwer@123' -B school testdb > /home/back/school_testdb.bak
备份所有的库
语法: mysqldump -u root -p1 -A > /alldb.bak
[root@mysql-server ~]# mysqldump -uroot -p'Qwer@123' -A > /home/back/allbase.bak
恢复库
-- 下面我们演示如何恢复数据库
-- 先把school数据库删掉
mysql> drop database school;
mysql> show databases; --查看库已经没有了
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
6 rows in set (0.00 sec)
-- 我们开始恢复数据库
-- 登陆mysql创建一个库
mysql> create database school;
-- 恢复:
-- 将备份的数据库school.bak恢复到school数据库下
[root@mysql-server ~]# mysql -uroot -p'Qwer@123' school < /home/back/school.bak
-- 进入mysql查看,school已经存在了
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| school |
+--------------------+
6 rows in set (0.00 sec)
恢复表
-- 登陆到刚才恢复的库中将其中的一个表删除掉
mysql> use school;
mysql> drop table employee5;
-- 两种方法
开始恢复:
mysql> set sql_log_bin=0; -- 停止binlog日志(可选)
Query OK, 0 rows affected (0.00 sec)
mysql> source /home/back/school.employee5.bak; -------加路径和备份的文件
恢复方式二:
[root@mysql-server ~]# mysql -u root -p1 db1 < db1.t1.bak
库名 备份的表文件路径
备份及恢复表结构
备份表结构:
语法:mysqldump -uroot -p123456 -d databasename tablename > dump.sql
mysqldump -uroot -p123456 -d 数据库名 表名 > 备份的文件路径
# -d只备份表结构
[root@mysql-server ~]# mysqldump -uroot -p'Qwer@123' -d school employee5 > /home/back/emp.bak
恢复表结构
-- 恢复表结构:
-- 登陆数据库创建一个库
mysql> create database t1;
语法:# mysql -u root -p1 -D db1 < db1.t1.bak
[root@mysql-server ~]# mysql -uroot -p'Qwer@123' -D t1 < /home/back/emp.bak