参考教材: MySQL数据库技术与应用 张素青、翟慧、黄静 ○ 主编
数据库的备份和恢复 #
数据库的备份 #
直接在命令行执行,而不用登录MySQL数据库
备份单个数据库:
mysqldump -u username -h host -p dbname [tbname1,tbname2,….] > filename.sql
备份多个数据库
mysqldump -u username -h host -p –databases dbname1 [dbname2 dbname3 …] > filename.sql
备份所有数据库
mysqldump -u username -h host -p –all-databases > filename.sql
-
username: 用户名 (root …
-
host: 主机名 (localhost…
-
tbname: [tbname1,tbname2,….] 参数若缺省代表备份整个数据库
-
可以直接在命令行输入密码 -p123456 (-p和密码之间不能有空格),-p单独使用回车后会要求用户输入密码
-
> 重定向符号 ,重定向输入到 filename.sql
-
filename.sql 备份后的文件名
-
–databases 后边 至少要指定一个数据库 多个数据库用空格隔开
数据库的恢复 #
方法1 #
备份的时候生成了.sql文件,恢复就从.sql文件恢复到数据库。
在执行恢复指令之前,需要在数据库中存在dbname这个数据库。
DROP DATABASE [dbname]; 删除
CREATE DATABASE [dbname]; 创建
mysql -u username -p [dbname] < filename.sql
- dbname: 要恢复到某个存在的数据库名称
既然前面有导出多个数据库到一个sql文件的指令,那这种情况如何导入?
即SQL文件中存在多个数据库该如何导入?
我测试了一下,
我把A,B,C三个数据库导出到 3.sql,
发现在导入的时候,根据dbname来导入的。
mysql -u username -p A < 3.sql
如果[dbname]是A,那么就恢复3.sql中A的数据。
mysql -u username -p B < 3.sql
如果[dbname]是B,那么就恢复3.sql中B的数据。
mysql -u username -p D < 3.sql
因为SQL文件中只有A,B,C的数据库数据,恢复到D数据库的时候没反应。
得出结论
一个sql文件中含有多个数据库,那么导入到 文件中不存在的数据库 是无效的。
但是,一个sql文件只有一个数据库,那么是可以导入到任何一个数据库的,比如可以把A.sql文件导入到B数据库。
方法2 #
如果登录了MySQL服务器,还可以使用SOURCE命令来恢复数据。
SOURCE filename.sql;
fiename.sql必须是绝对路径,比如 C://Files//filename.sql.