我们在运营项目的过程中肯定会遇到备份数据库,还原数据库的情况,我们一般用一下两种方式来处理:
1.使用into outfile 和 load data infile导入导出备份数据
这种方法的好处是,导出的数据可以自己规定格式,并且导出的是纯数据,不存在建表信息,你可以直接导入另外一个同数据库的不同表中,相对于MySQLdump比较灵活机动。
我们来看下面的例子:
(1)下面的mysql命令是把select的mytable表中的数据导出到/home/db_bak2012文件。
导入刚才备份的数据,可以使用load file方法,下面的mysql命令,把导出的数据导入了mytable_bak的表中:
load data infile '/home/db_bak2012' into table mytable_bak fields terminated by '|' enclosed by '"' lines terminated by '\r\n' ;2.使用mysqldump导出固定条件的数据库
我们来看几个常用用例:
(1)导出整个数据库
(2)导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql(3)导出一个数据库结构
mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >d:\wcnc_db.sql-d 不导出数据只导出结构 --add-drop-table 在每个create语句之前增加一个drop table
(4)导入数据库,常用source 命令
进入mysql数据库控制台,
mysql -u root -p mysql>use 数据库 mysql>set names utf8; (先确认编码,如果不设置可能会出现乱码,注意不是UTF-8) #然后使用source命令,后面参数为脚本文件(如这里用到的.sql) mysql>source d:\wcnc_db.sql再者,还可以结合Linux管道命令,将导出来的sql文件进行压缩
mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz在导入时可使用以下命令:
gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename上边的实例只是最基础的,有的时候我们可能需要批量导出多个库,我们就可以加上--databases 或者-B,如下语句:
mysqldump -uroot -p --databases test mysql #空格分隔还有的时候我们可能需要把数据库内所有的库全部备份,我们就可以使用-all-databases,如下语句:
mysqldump -uroot -p -all-databases可能我们还会有更多的需求,下面是我在网上找的感觉比较全的参数说明,贴出来供大家参考。
参数说明
--all-databases , -A
导出全部数据库。
--all-tablespaces , -Y
导出全部表空间。
--no-tablespaces , -y
不导出任何表空间信息。
--add-drop-database
每个数据库创建之前添加drop数据库语句。
--add-drop-table
每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项)
--add-locks
在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(默认为打开状态,使用--skip-add-locks取消选项)
--allow-keywords
允许创建是关键词的列名字。这由表名前缀于每个列名做到。
--apply-slave-statements
在'CHANGE MASTER'前添加'STOP SLAVE',并且在导出的最后添加'START SLAVE'。