MySQL数据的备份与恢复

MySQL备份的类型

按照备份时对数据库的影响范围分为:
Hot backup(热备)  Cold Backup(冷备)Warm Backup(温备)
Hot backup:指在数据库运行中直接备份,对正在运行的数据库没有任何影响,(Online Backup)官方手册为在线备份
Cold Backup:指在数据库停止的情况下进行备份,(OfflineBackup) 官方手册称为离线备份
Warm Backup:备份同样在数据库运行时进行,但是会对当前数据库的操作有所影响,例如加一个全局读锁以保证备份数据的一致性

按照备份后文件内容:

逻辑备份 -->
指备份后的文件内容是可读的,通常为文本文件,内容一般是SQL语句,或者是表内的实际数据,如mysqldump和SELECT * INTO OUTFILE的方法,一般适用于数据库的升级和迁移,恢复时间较长

裸文件备份(物理备份)-->
拷贝数据库的物理文件,数据库既可以处于运行状态(mysqlhotcopy 、ibbackup、xtrabackup这类工具),也可以处于停止状态,恢复时间较短。

按照备份数据库的内容的量来分,又可以分为:
完全备份:对数据库完整的备份
增量备份:在上一次完全备份基础上,对更新的数据进行备份(xtrabackup)
日志备份:二进制日志备份,主从复制


逻辑备份工具mysqldump

使用的时候MySQL当要导入或者导出数据量大的库的时候,用PHPMYADMIN甚至MySQL Administrator这些工具都会力不从心,这时只能使用MySQL所提供的命令行工具mysqldump进行备份恢复;数据量大的时候不推荐使用,可支持MyISAM,InnoDB

MySQL数据的导出和导入工具: mysqldump

导出数据


语法: mysqldump [TMPIONS] database [tables] >导出的文件名.sql

(1):导出所有数据库
mysqldump -uroot -pMySql@123 -A >all.sql
mysqldump -uroot -pMySql@123 --all-databases >all2.sql

参数-A代表所有,等同于 --all-databases

(2):导出某个数据库
mysqldump -u 用户名 -p密码 数据库名 > 导出的文件名.sql 
mysqldump -uroot -pMySql@123 testdb > testdb.sql

(3):导出单张表
mysqldump -uroot -pMySql@123 testdb book1 > testdb.book1.sql  #导出testdb库book1表

(4):导出库的表结构
mysqldump -uroot -pMySql@123 -d testdb > testdbtable.sql  #只导出testdb库的表结构

(5):只导出数据
mysqldump -uroot -pMySql@123 -t testdb > testdbdata.sql  #只导出testdb库中的数据

(6):导出数据库,并自动生成库的创建语句
mysqldump -uroot -pMySql@123 -B testdb > testdb.sql #生成建库语句
mysql -uroot -pMySql@123 < testdb.sql #导入不用指定数据名

导入数据


(1):导入所有数据库
mysql -uroot -pMySql@123 < all.sql

(2):导入数据库
mysql -uroot -pMySql@123 testdb < testdb.sql  #如果导入时,没有对应的数据库,需要你手动创建一下

mysql> create database testdb;

使用source导入
mysql> drop database testdb;
mysql> create database testdb;
mysql> use testdb;
mysql> source /tmp/testdb.sql

(3):导入表
mysql> drop table testdb.book1;
mysql> source /tmp/testdb.book1.sql;   #导入表时,不需要重新创建表,要先进到相应的数据库中
mysql> select * from testdb.book1;

(4):导入表结构和数据
mysql> create database testdb;
mysql -uroot -pMySql@123 testdb < testdbtable.sql
mysql -uroot -pMySql@123 testdb < testdbdata.sql

简单测试案例

参数说明:
--quick:用于转储大的表,强制mysqldump从服务器一次一行的检索数据而不是检索所有行,并输出当前cache到内存中
--no-create-info:不要创建create table语句
--extended-insert:使用包括几个values列表的多行insert语法,这样文件更小,IO也小,导入数据时会非常快
--default-character-set=utf8 :按照原有字符集导出数据,这样导出的文件中,所有中文都是可见的,不会保存成乱码

(1):导出表结构
mysqldump -uroot -pMySql@123 --default-character-set=utf8 -d testbookdb > booktable.sql

(2): 如果booktable.sql 里的字符集不是utf8,可以用vim编辑进行批量更改

(3): 确保数据库不再更新,导出指定库的所有数据

(4):打开bookdata.sql 将SET NAME latin1 修改成SET NAME utf8
                 vim bookdata.sql
                 /*!40101 SET NAMES utf8 */;
(5): 重新建库
        mysql> create database testdb default charset utf8;
(6):建立表,导入我们之前导出的表的表结构
        mysql> CREATE TABLE book1 (bTypeId int,bName char(16),price int,publishing char(16));
(7): 导入数据
        mysql -uroot -pMySql@123 testdb < bookdata.sql
        注意:选择目标字符集时,要注意最好大于等于原字符集(字库更大),否则可能会丢失不被支持的数据

写这个文章的时候也有参考其他文档,如有侵权请告知删除

相关推荐

  1. MySQL数据备份恢复

    2023-12-24 18:42:01       35 阅读
  2. MySQL恢复备份

    2023-12-24 18:42:01       25 阅读
  3. MySQL备份恢复

    2023-12-24 18:42:01       28 阅读
  4. MySQL备份恢复

    2023-12-24 18:42:01       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-24 18:42:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-24 18:42:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-24 18:42:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-24 18:42:01       20 阅读

热门阅读

  1. Mysql sql_mode参数配置

    2023-12-24 18:42:01       38 阅读
  2. sql server多表查询

    2023-12-24 18:42:01       39 阅读
  3. 9.9算法

    2023-12-24 18:42:01       32 阅读
  4. 力扣(leetcode)13和14题(Python)

    2023-12-24 18:42:01       41 阅读
  5. 在C#中使用OpenCV获取图像的轮廓

    2023-12-24 18:42:01       42 阅读
  6. 文盘Rust -- 本地库引发的依赖冲突

    2023-12-24 18:42:01       44 阅读
  7. 内网穿透之FRP

    2023-12-24 18:42:01       38 阅读
  8. uniapp点击tabbar之前做判断

    2023-12-24 18:42:01       50 阅读
  9. Program专栏启动计划

    2023-12-24 18:42:01       40 阅读
  10. 贪心算法高频问题-区间问题

    2023-12-24 18:42:01       35 阅读