为什么要备份数据?
- 防止数据库意外崩溃或硬件损伤而导致的数据丢失
- 防止手误删库删表导致数据丢失
备份数据的方式
- 物理备份
- 逻辑备份(库、表)
备份数据的工具
- 利用navicate等第三方工具
- 利用mysql自带脚本(mysqldump 命令,由于mysqlhotcopy只能用于MyISAM,所以MySQL 5.7移除了 mysqlhotcopy 脚本)
mysqldump命令
mysqldump是MySQL自带的逻辑备份工具。
备份原理: 通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert语句
命令格式:
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
备份所有数据库
mysqldump -h127.0.0.1 -P3306 -uroot -p --all-databases>local_all_databases.sql
备份指定数据库
mysqldump -h127.0.0.1 -P3306 -uroot -p --databases mysql_demo demo>mysql_demo_demo.sql
备份指定数据库指定表(多个表以空格间隔)
mysqldump -h127.0.0.1 -P3306 -uroot -p mysql_demo emp role>emp_role.sql
备份指定数据库排除某些表
mysqldump -h127.0.0.1 -P3306 -uroot -p mysql_demo --ignore-table=mysql_demo.emp --ignore-table=mysql_demo.emp_role_ref>ignore_emp_role_ref.sql
导出表数据
SELECT...INTO OUTFILE 语句基本格式如下:
SELECT 列名 FROM table [WHERE 语句] INTO OUTFILE '目标文件'[OPTIONS]
[OPTIONS] 为可选参数选项,OPTIONS 部分的语法包括 FIELDS 和 LINES 子句,其常用的取值有:
FIELDS TERMINATED BY '字符串':设置字符串为字段之间的分隔符,可以为单个或多个字符,默认情况下为制表符‘\t’
FIELDS [OPTIONALLY] ENCLOSED BY '字符':设置字符来括上 CHAR、VARCHAR 和 TEXT 等字符型字段。如果使用了 OPTIONALLY 则只能用来括上 CHAR 和 VARCHAR 等字符型字段
FIELDS ESCAPED BY '字符':设置如何写入或读取特殊字符,只能为单个字符,即设置转义字符,默认值为‘\’
LINES STARTING BY '字符串':设置每行开头的字符,可以为单个或多个字符,默认情况下不使用任何字符
LINES TERMINATED BY '字符串':设置每行结尾的字符,可以为单个或多个字符,默认值为‘\n’
注: FIELDS 必须位于 LINES的前面
select * from dept into outfile 'E:/demo/dept.txt’;
select * from dept into outfile 'E:/demo/dept.txt' FIELDS TERMINATED BY ',';
select * from dept into outfile 'E:/demo/dept.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\“’;
select * from dept into outfile 'E:/demo/dept.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES STARTING BY '\-';
数据恢复
基于备份恢复数据
mysql 命令语法格式如下:
mysql -u username -p [dbname] < filename
dbname :数据库名称,该参数是可选参数。如果 filename 文件为 mysqldump 命令创建的包含创建数据库语句的文件,则执行时不需要指定数据库名。如果指定的数据库名不存在将会报错;
filename :备份文件的名称
mysql -uroot -p mysql_demo_copy < E:/demo/mysql_demo.log
soure 方法
mysql>source E:/demo/mysql_demo.log;
基于binlog恢复数据
语法:
mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名
mysqlbinlog D:\application\mysql-5.7.9-winx64\data\my-bin.000008 --start-position=859 --stop-position=1146| mysql -uroot –p
mysqlbinlog D:\application\mysql-5.7.9-winx64\data\my-bin.000008 --stop-position=1710| mysql -uroot -p