方法1
备份
SELECT * INTO OUTFILE "D:\\1.sql" FROM 表名;
恢复
LOAD DATA INFILE "D:\\1.sql" INTO TABLE 表名;
补充几个设置
1. FIELDS TERMINATED BY ',' #字段间隔符
2. OPTIONALLY ENCLOSED BY '"' #字符串类型字段包围符
3. 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 当中间遇到错误 可以跳过 忽略错误
恢复binlog数据
#恢复全部数据
mysqlbinlog --no-defaults mysql. |mysql -uroot -p123456 数据库名
#恢复部分数据
mysqlbinlog --no-defaults mysqlbinlog. --start-position="" --stop-position="" |mysql -uroot -p123456 数据库名
#根据pos位置193到280之间 恢复数据
方法3
停掉mysql的服务,然后tar打包data目录下的数据文件即可,恢复数据时最好采用相同版本的数据库软件