方法1

备份

SELECT * INTO OUTFILE "D:\\1.sql" FROM 表名;

恢复

LOAD DATA INFILE "D:\\1.sql" INTO TABLE 表名;

补充几个设置

FIELDS TERMINATED BY ',' #字段间隔符
OPTIONALLY ENCLOSED BY '"' #字符串类型字段包围符
LINES TERMINATED BY '\n' #换行符

于是备份命令改为

SELECT
    * INTO OUTFILE "D:\\1.sql" FIELDS TERMINATED BY ','
    *  OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'
FROM
    表名;
 

恢复数据改为

LOAD DATA INFILE "D:\\1.sql" 
    INTO TABLE 表名 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';

注意

要有文件目录的读写权限 特别是在linux下

此方法不能备份表结构。 需要用 SHOW CREATE TABLE 表名来获取结构并备份;


方法2

备份

mysqldump -uroot -p密码 数据库名 -l -F > '/usr/data.sql'

#mysql5.6中失效原因是不能在命令行中出现密码   需要在etc下的my.cnf中写入

[mysqldump]
user=备份用户名
password=备份用户密码
#然后执行
mysqldump 数据库名 -l -F > '/usr/data.sql'

恢复

# 恢复的时候可能会因为数据过大造成失败 先运行
set global wait_timeout=60000;
set global max_allowed_packet = 64*1024*1024
mysql -uroot -p123456 数据库名 -v -f</usr/data.sql
#-v 查看详细信息
#-f 当中间遇到错误 可以跳过 忽略错误

方法3 恢复 binlog 数据

(不详细 仅作记录 具体可以参考 https://zhuanlan.zhihu.com/p/83372804

#恢复全部数据
mysqlbinlog --no-defaults mysql.000001 |mysql -uroot -p123456 数据库名

#恢复部分数据
#根据pos位置193到280之间 恢复数据
mysqlbinlog --no-defaults mysqlbinlog.00001 --start-position="193" --stop-position="280"  |mysql -uroot -p123456 数据库名