Thanks to visit codestin.com
Credit goes to github.com

Skip to content

MySQL_7 MySQL数据库备份与恢复 #26

@qingquan-li

Description

@qingquan-li

本篇博客(第七篇)重点:

了解 MySQL 数据库备份和恢复的几种方法
掌握 mysqldump 命令导出数据
掌握 source 命令导入数据

MySQL的备份

数据库备份必要性:

  • 保证重要数据不丢失
  • 数据转移

MySQL 数据库备份方法:

  • mysqldump 备份工具
  • 数据库管理工具,如 SQLyog、Navicat
  • 直接拷贝数据库文件和相关配置文件


mysqldump

mysqldump 客户端

作用:
转储数据库
搜集数据库进行备份
将数据转移到另一个 SQL 服务器(不一定是 MySQL 服务器)

语法:

mysqldump -h主机名 –u用户名 –p [options] 数据库名 
[table1 table2 table3] > path/filename.sql 

其中,path/filename.sql 为预存文件目录,须有该目录读写权限

实例 备份 myschool 数据库

> mysqldump -uroot -p myschool > d:/myschool.sql
EnterPassword:****

mysqldump 常用选项

可通过 mysqldump --help 查看该命名的选项

符号名称 描述
--add-drop-table 导出 sql 脚本会加上 DROP TABLE IF EXISTS 语句,默认是打开的,可以用 --skip-add-drop-table 来取消
--add-locks 该选项会在 INSERT 语句中捆绑一个 LOCK TABLEUNLOCK TABLE 语句
好处:防止记录被再次导入时,其他用户对表进行的操作,默认是打开的
-t

--no-create-info
忽略不写重新创建每个转储表的 CREATE TABLE 语句
-c

--complete-insert
在每个 INERT 语句的列上加上字段名。在数据库导入另一个数据库时非常有用
-d--no-data 不写表的任何行信息。对于只想转储表的结构很有用
--where "where-condition",-w "where-condition" 只转储给定的 WHERE 条件选择的记录
--opt 该选项是速记;等同于指定
--add-drop-tables
--add-locking
--create-option
--disable-keys--extended-insert
--lock-tables
--quick
--set-charset

实例 利用 mysqldump 导出数据库

> mysqldump -uroot -p -c myschool subject> d:/subject.sql


MySQL数据库的恢复

  • 方法一:用 SOURCE 语法
    • /path/ 是一个绝对路径,并且必须是 mysql 运行用户有权限读取的文件
    • SOURCE 在 MySQL 命令行 里执行
SOURCE /path/db_name.sql; 

注:都要先创建或选择数据库


  • 方法二:用 mysql 客户端
mysql –u root –p dbname < /path/db_name.sql; 


利用 SQL 语句导出、导入数据

语法:

SELECT * INTO OUTFILE 'file_name' FROM tbl_name
  • 输出的文件不能先存在,否则报错
LOAD DATA INFILE 'file_name' INTO TABLE tbl_name [FIELDS]

实例:

#导出数据库
> mysqldump -u root -p -c --opt myschool > /path/myschool_bak.sql

#恢复数据库方法一
> source /path/myschool_bak.sql;
#恢复数据库方法二
> mysql -uroot -p myschool < /path/myschool_bak.sql;

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions