10.2.1 MySQL数据库备份和恢复步骤
步骤1:准备工作。
方法一:停止MySQL服务。
方法二:使用MySQL命令“flush tables with read lock;”将服务器内存中的数据“刷新”到数据库文件中,同时锁定所有表,以保证备份期间不会有新的数据写入。
步骤2:备份文件的选取。
如果数据库中全部是MyISAM存储引擎的表,最为简单的数据库备份方法就是直接“备份”整个数据库目录。
如果某个数据库中还存在InnoDB存储引擎的表,此时不仅需要“备份”整个数据库目录,还需要备份ibdata1表空间文件以及重做日志文件ib_logfile0与ib_logfile1。
数据库备份时,建议将MySQL配置文件(例如my.cnf配置文件)一并进行备份。
步骤3:数据库恢复。
首先停止MySQL服务;然后将整个数据库目录、MySQL配置文件(例如my.cnf配置文件)、ibdata1共享表空间文件以及重做日志文件ib_logfile0与ib_logfile1复制到新MySQL服务器对应的路径,即可恢复数据库中的数据。
10.2.2 逻辑备份与逻辑还原
1.逻辑备份
使用MYSQLDUMP命令备份,语法如下:
mysqldump –u root –p 库名>路径\文件名.sql
mysqldump -u user -p pwd -h host dbname[tbname,[tbname...]]>filename.sql
【例10.7】利用mysqldump命令,将当前库school备份到c盘根目录下。
打开cmd,然后执行下面的命令:
mysqldump –u root –h 127.0.0.1 –p school >c:\ school_2014-7-10.sql;执行结果如图10.23所示。
图10.23 文件备份
可以看到C盘下面已经生成了school_2014-7-10.sql文件,如图10.24所示。
图10.24 备份生成的文件
2.使用mysqldump备份数据库中的某个表
【例10.8】备份school数据库里面的book表。
mysqldump –u root –h 127.0.0.1 –p school book>c:\ book_2014-7-10.sql;执行结果如图10.25所示。
图10.25 备份school数据库里面的book表
3.使用mysqldump备份多个数据库
如果要使用mysqldump备份多个数据库,需要使用--databases参数。
使用--databases参数之后,必须指定至少一个数据库的名称,多个数据库名称之间用空格隔开。
【例10.9】使用mysqldump备份school库和test库。(www.xing528.com)
mysqldump –u root –h 127.0.0.1 –p –database school test>c:\ test_school_2014-7-10.sql;执行结果如图10.26所示 。
图10.26 备份school库和test库
备份文件里的内容,基本上跟备份单个数据库一样,但是指明了里面的内容那一部分属于test库,哪一部分属于school库。
4.使用--all-databases参数备份系统中所有的数据库
使用--all-databases不需要指定数据库名称,语法如下:
mysqldump –u root –h 127.0.0.1 –p –all-database school test>c:\all_2014-7-10.sql;执行结果如图10.27所示 。
图10.27 数据备份系统中所有的数据库
执行完毕之后会产生all_2014-7-10.sql的备份文件,里面会包含了所有数据库的备份信息。
提示:如果在服务器上进行备份,并且表均为myisam,应考虑使用mysqlhotcopy,因为可以更快地进行备份和恢复。使用mysqlhotcopy,如果是Windows操作系统,需要先安装perl脚本组件才能使用,因为mysqlhotcopy是使用perl来编写的。
5.逻辑还原
使用mysql命令进行还原。对于已经备份的包含CREATE、INSERT语句的文本文件,可以使用mysql命令导入数据库中。备份的sql文件中包含CREATE、INSERT语句(有时也会有DROP语句),mysql命令可以直接执行文件中的这些语句,其语法如下:
先建一个数据库,再用命令:
Mysql –u root –p数据库名<路径/文件名.sql;
user是执行backup.sql中语句的用户名;-p表示输入用户密码;dbname是数据库名。
如果filename.sql文件为mysqldump工具创建的包含创建数据库语句的文件,执行的时候不需要指定数据库名。
【例10.10】用mysql命令将school_2014-7-10.sql文件中的备份导入到数据库中。
语法如下:
mysql -u root -h 127.0.0.1 -p school<c:\school_2014-7-10.sql;
在执行语句之前必须建好school数据库,如果不存在,恢复过程将会出错。
可以看到表数据都已经导入到数据库了,如图10.28所示。
图10.28 还原结果
如果已经登录mysql,那么可以使用source命令导入备份文件。使用source命令导入备份文件school_2014-7-10.sql,语法如下:
source c:\school_2014-7-10.sql;执行结果如图10.29所示。
图10.29 使用source命令导入备份文件
执行source命令前必须使用use 语句选择好数据库,不然会出现ERROR 1046(3D000):NO DATABASE SELECTED 的错误。
还有一点要注意的是只能在cmd界面下执行source命令,不能在mysql工具里面执行source命令,否则会报错。因为cmd是直接调用mysql.exe来执行命令的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。