持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
本文SQL为MSSQL适用,对于MySQL或其他数据库类型,可能略有不同
关于数据库的备份,想必后端都遇到过
很多数据库的管理工具也提供了更方便的api,可以进行一键备份,一键恢复,甚至还可以定时备份相关数据库
本文将抛弃这些,直接手动sql操作
俗话说:上山容易下山难!
这句话在这里也同样适用,数据库的备份说实话很简单,但是数据库恢复时,往往会遇到很多或大或小的问题,甚至数据中的中文都会变成乱码也时有发生。
好了,话不多说,开搞
数据备份
很简单,一句话即可将整个数据库备份成一个bak文件
BACKUP DATABASE database_name TO DISK='D:\source\a.bak'
执行结果
注:如果是在服务器上进行这个操作,保存的路径一般在服务器本地硬盘中,如果需要拷贝到其他终端设备,可以根据服务器操作系统使用不同的工具(window可以直接复制出来,linux可以使用强大的scp)
备份文件也可以是 .sql,用哪个都一样,我更常用 .bak,因人而异吧 (两种文件类型没有什么本质的区别)
另外,如果你也可以用cmd或其他终端直接登录数据库,然后用sql形式直接备份
我这里是直接在Navicat中执行的,道理都是一样的
备份不难,基本数据库名称和路径不写错,基本都可以成功备份
数据恢复
restore database database_name from disk='D:\source\a.bak'
with move new_database_name to 'D:\source\sqldata\database_name.mdf',
move 'new_database_name_log' to 'D:\source\sqldata\database_name_log.ldf'
这条sql语句中涉及的变量比较多,很容易出现问题,因此需要格外注意
哈哈,很轻松恢复成功了
sql语句解析
注:请忽略马赛克(涉及隐私,请见谅哈),是不是看完标注很清晰了
新数据库名称可以和原数据库名称一致,但是建议不要同名,这样好区分线下线上(搞混了很麻烦...)
再就是路径了,建议将bak、mdf、ldf这种文件单独存放,防止误删(那样的话,恢复的数据库就没了)
常见错误问题
不知道备份数据中的逻辑文件名(即原数据库名称)
这个应该也很常见,比如别人给你的备份数据,无需再询问别人,一句sql语句就能搞定
RESTORE FILELISTONLY from disk='D:\source\a.bak'
执行结果
当然,如果你的恢复数据库的sql写的有问题,一般数据库管理工具会有报错提示和相关建议,如下就有相关sql建议
路径中的斜杠问题
建议统一都用 \ ,不要用 / ,更不要混用
说多了都是泪啊,曾经就因为这个斜杠问题,查错了很长时间....
好了,基本容易出错或写错的就这些了,如果按照我的方法,基本恢复数据库没啥问题了!
文末总结
如果学习是演习,那工作就是战场。
演习可以有特定的场合,一般按部就班敲代码,不会出现那么多问题。
但是战场上什么问题都有可能发生。
不经历风雨怎么成长呢,所以工作并不是那么不堪,可以赚钱还能成长,双倍收获。
这样一想,是不是爱上工作了[手动dog]