对与数据库的备份与恢复该怎么去做呢?
Linux下对于文件或目录的备份,直接拷贝一份,留着备用,对于备份,比较简单的做法会就是直接打包拷贝一下,但是,如果需要恢复数据时,你可能会发现更多的问题,如受到版本的影响
不同版本的数据库对于命令,可以增加删除查找修改,但是对于数据库很难rename重命名,可能受版本影响,对于数据库的重命名,有一点不好:当你在操作数据库的时候别人却在修改。
MySql不提供拷贝或直接对文件夹重命名,而且我们也不推荐这么去做;我们比较推荐的是使用mysql的备份工具。
我们需要用到的工具是mysqldump
mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径
举个例子,把test1数据库备份到到/home/hwc/workspace/test1.sql中去,现在我们当前的路径是/home/hwc/workspace
此时vim打开test1.sql,我们会发现,备份的不仅仅只是数据,还有把历史上所有有效的操作都备份起来了。
也就是说 test1.sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句都装载这个文件中。
现在我们在把数据库test1给删除drop掉:
如何进行还原
source /home/hwc/workspace/test1.sql;
采用source命令,后面加上要还原的文件路径,此时就直接将历史对应的sql命令全部在新的sql执行一次:
备份不是只备份了数据,操作也备份了:
此时查看数据库show databases;
先使用数据库test1:use test1;查看test1数据库中的表person:
查看到对于表person已经还原
如果备份的不是整个数据库,而是其中的一张表,怎么做?
指明数据库后的表即可:无需带上-B选项
mysqldump -u root -p 数据库名 表名1 表名2 > 数据库存放路径
如备份test1数据库中的表person:
同时备份多个数据库:
mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原
-B的意思:在备份文件test1.sql中是有创建create database的语句:
如果没有-B的选项,备份的数据库只会把数据库的所有表信息,数据信息备份出来, 而数据库的名称则需要自己创建出来
所以要备份的话,只需要把表备份一下,还原的时候不要-B,直接source一下即可,创建的时候简单的创建,备份的时候直接不带-B把表名带上。
如果数据库很卡,可以查一下当前有什么人在使用数据库,也就是查看连接情况:
show processlist
可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。以后大家发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况