Loading... 最近啊,我在捣鼓一个之前没接触过的数据库,sqlserver(简称 MSSQL,我估计应该全称是 Microsoft SQL Server)。这个数据库是微软出品的数据库,一些 asp 为网站语言的网站,可能会用到该数据库来连接并存储数据。 我们知道做网站最重要的就是服务器的数据库了,其次是网站的站点文件。这两者势必每天都需要备份的。 咱们这节课来一起讲讲这个数据库的备份和还原。采用 cmd 或者 bat 操作的方式,这种方式,方便命令行操作或者由别的软件生成批处理文件来操作,实现自动化。 sqlcmd 是 sqlserver 连接数据库的一个程序,使用这个程序在服务器端连接数据库的时候,不需要数据库的账户密码,我估计是采用了 windows 用户验证方式。前提是这个程序的目录已经加入到环境变量了,才能调用。 我这里使用来测试的 sqlserver 版本为 2008。 ============ 数据库备份 ================== cmd 方式: 1. 打开 cmd。 2. 命令: ```bash sqlcmd -s 数据库名 go backup database 数据库名 to disk='这里面填入完整备份到的路径,以bak结尾' go ``` 即可成功全量备份某数据库到文件中。 ============ 数据库的还原 ================== 在新服务器中先建立好要存放的数据库,若有需要,可改名,网站内容配置需要做对应修改即可。 然后在 sqlserver 管理器中,右键该数据库,依次选择 `任务 - 还原 - 数据库`,在弹出的界面中,选择 “源设备”,然后点击后面的按钮,选择备份的 bak 文件,可以存放在任意位置。然后就会读取到下面的列表中,在列表的第一列有一个方框,勾上。 然后切换到选项部分,勾选覆盖现有数据库(一定要勾上,否则报错,说数据库和现有数据库不一样)。 然后确定即可还原成功数据库。 ———–数据库登录用户的还原 —————- 原网站使用新创建的登录用户来访问数据库的,还需要还原用户。不还原的情况下该用户为孤立用户,无法获取数据库访问权限。 方法是先创建一个跟之前一样的数据库新登录名。(必须先做这一步,否则还原孤立用户时会提示用户不存在)比如你之前自己创建的登录用户为 `xxuser`,那么之前的登录名部分就填写 `xxuser`。 **(注意:之前我在测这一块的时候,跟着网上一些博客文章的指导来走,之前的登录名写进去之后,怎么都不成功,后来终于测试明白了,原来我一直是漏了 use 数据库名和 go 这两行代码,不修改上下文数据库的指向的话,后面的存储过程会一直提示找不到用户名的。这一点需要特别的注意)** 然后打开 cmd,输入命令: ```bash sqlcmd -s 数据库名 go use 数据库名 go sp_change_users_login 'update_one','之前的登录名','之前的登录名' go ``` 运行 `sp_change_users_login` 存储过程,即可将过去的孤立用户与新数据库建立连接,这样就可以赋予权限了。 该数据库登录名的没有试过,可以尝试。 ===================================================== ======== 使用 bat 文件来实现批量备份数据库 ========== 文件均配置为 ANSI 编码,支持中文。 1. 编辑一个 bat 文件,写入如下信息: ```bash @echo off echo 数据库备份开始 sqlcmd -i "另一个你要调用的sql文件的路径" echo 数据库备份完成 pause ``` (若自动处理的话,这个 pause 不要加) 2. 编辑一个 sql 文件,它的路径填写到 bat 文件中。(这种方式为增量备份,所以若原文件存在可以考虑先删除原文件,再运行该 sql) 内容为: ```sql backup database 数据库名 to disk = "备份到的文件的全路径,bak结尾" go ``` 这两行代码可以根据数据库的多少重复添加。 最后调用的时候 sql 是动态生成放在那里的,bat 文件无需程序修改,直接调用即可。 ========= 使用 bat 文件来实现登录用户的还原 ========= 文件均配置为 ANSI 编码,支持中文。 1. 编辑 bat 文件,写入 ```bash @echo off echo 孤立用户还原开始 sqlcmd -i "还原的sql文件路径" echo 孤立用户还原完成 pause ``` (若自动处理的话,这个 pause 不要加) 2. 编辑 sql 文件,写入 ```sql use 数据库名 go sp_change_users_login 'update_one','之前的登录名','之前的登录名' go ``` 比如先创建好登录名,再运行还原,否则会提示用户不存在。 =============== 另外,数据库的还原,应该不是挪动服务器一般应用场景较少,可以写 bat 也可以不写了。我就打算手动还原数据库了。如前面已经提到手动还原的方法了。 希望我的总结能对大家有所帮助。 最后修改:2021 年 08 月 15 日 © 允许规范转载 赞 赠人玫瑰,手留余香