首页 > mysql > mysql的备份与恢复

mysql的备份与恢复

作者:bin
目录
[隐藏]

mysql的备份分为逻辑备份和物理备份

一、逻辑备份与恢复

1、备份所有数据库:

shell>mysqldump -uroot -p --all-databases > test.sql

备份test数据库:

shell>mysqldump -uroot -p test > test.sql

备份test数据库的tbl表

shell>mysqldump -uroot -p test tbl > test.sql

备份test数据库的tbl和tbl2表

shell>mysqldump -uroot -p test tbl tbl2 > test.sql

2、完整恢复数据库:
mysqldump的恢复也很简单,将备份作为输入执行即可

mysql -uroot -p test < test.sql

值得注意的是:
这样的操作只能恢复部分数据,而备份操作后的数据是没办法恢复的。
那么我们就需要开启log_bin,然后将备份后的二进制日志进行重做:

mysqlbinlog mysql-bin.000001 | mysql -uroot -p***

此时建议在备份数据库时,应当加上 -l (给数据加锁) 和 -F (刷新二进制日志),这样就保证了数据可以完整恢复:

shell>mysqldump -uroot -p -l -F test > test.sql

3、基于时间点恢复

工作中,比如由于误操作,删了一张表,这时完全恢复是没有用的,我们需要恢复到操作之前的状态,跳过错误操作(删表操作),再恢复后面执行的语句,从而完成我们的恢复,这种恢复叫不完全恢复,分2种情况,一种是基于时间(time),一种是基于位置(at)

比如在10点10-10点15之间出现误操作,那么就恢复2017-08-09 10:10:11之前和2017-08-09 10:15:11之后的数据,

mysqlbinlog--stop-date="2017-08-09 10:10:11" mysql-bin.000001   | mysql -uroot -p***

mysqlbinlog--stop-date="2017-08-09 10:15:11" mysql-bin.000001   | mysql -uroot -p***

还可以基于位置恢复,方式也是类似:

这时需要我们查看二进制日志文件,确定错误的位置然后跳过他;

mysqlbinlog--stop-position="312321" mysql-bin.000001   | mysql -uroot -p***

mysqlbinlog--start-position="312324" mysql-bin.000001   | mysql -uroot -p***

二、物理备份和恢复

物理备份分为冷备份和热备份

冷备份:就是操作系统级的文件和日志备份

热备份:MyISAM利用mysqlhotcopy工具进行备份,InnoDB则可以使用ibbackup、Xtrabackup等工具进行备份

三、表的导出

日常工作中,表的导入导出,时很常见的;

  • 用作excel展示
  • 单纯为了节省备份空间
  • 快速加载数据,LOAD DATA比sql快20倍
mysql> select * fom tbl into outfile '/file_path' [option]

option有很多可选项

fields terminated by ‘string’  //将字符用什么分隔开,默认’\t’

fields [OPTIONALLY] enclosed by char ‘char’ //字段引用符,如果使用了OPTIONALLY,那只会在string类型上加引用符号

fields escaped by ‘char’ //转义字符,默认为’\’

fields starting by ‘string’ //行开始,默认为”

fields terminated by ‘string’  //行结束, 默认为换行’\n’

示例:

mysql> select * from countrys into outfile '/var/lib/mysql-files/countrys.txt' fields terminated by ',' enclosed by '"';

除了使用into outfile,还可以使用mysqldump导出文本

mysqldump -uroot -p -T target_dir db tbl [option]

–fields-terminated-by=name

–fields-enclosed-by=name

–fields-optionally-enclosed-by=name

–fields-escaped-by=name

–fields-terminated-by=name

示例:

mysqldump -uroot -ptoot -T /var/lib/mysql-files movies countrys --fields-terminated-by ',' --fields-optionally-enclosed-by '"'

四、表的导入

1、load data,表的导入方式和导出方式类似,示例:

mysql> load data infile '/var/lib/mysql-files/countrys.txt' into countrys fields terminated by ',' enclosed by '"';

这里我们可以看到和into outfile的语法是一样的,当然你还可以后面加上ignore n line来忽略n行

mysql> load data infile '/var/lib/mysql-files/countrys.txt' into countrys fields terminated by ',' enclosed by '"' ingnore 2 line;

还可以通过修改列顺序,如果正常的顺序为id , name ,status ,我们可以这样改

mysql> load data infile '/var/lib/mysql-files/countrys.txt' into countrys fields terminated by ',' enclosed by '"' (id, status, name);

如果我们只需要加载name,而不需要status

mysql> load data infile '/var/lib/mysql-files/countrys.txt' into countrys fields terminated by ',' enclosed by '"' (id, name);

 

2、mysqlimport,导入方式

方式和mysqldump类似

mysqlimport -uroot -ptoot -T /var/lib/mysql-file/country.txt movies countrys --fields-terminated-by ',' --fields-optionally-enclosed-by '"'

 

 

 

您必须 [ 登录 ] 才能发表留言!