mysql数据库导出使用 /mysql/bin/mysqldump指令
数据库导出
导出指令:
[mysql安装目录]/bin/mysqldump -u[username] -p[password] -h[host] -P[port] [databaseName] [[tableName1] [tableName2]] > [dirPath][filename].sql
上面指令中中括号里面的内容根据具体情况进行替换,如果是导出本地数据库中且数据库端口为默认3306中的数据,则不需要输入 -h[host] -P[port] 参数。
下面以导出服务器10.102.112.109机器上数据库为例,其中数据库名为:FR_BLOG,数据库端口为:7712,用户名:admin,密码:adminpass
//导出整个数据库数据 [mysql安装目录]/bin/mysqldump -uadmin -padminpass -h10.102.112.109 -P7712 FR_BLOG > /home/mysqldump/FR_BLOG.sql
//导出其中一个表:比如bl_user表 [mysql安装目录]/bin/mysqldump -uadmin -padminpass -h10.102.112.109 -P7712 FR_BLOG bl_user > /home/mysqldump/bl_user.sql
按条件导出数据
有时候我们不需要导出一张表中的所有数据,mysqldump也提供了按条件导出的功能,--where(或者-w)="condition"
例如,我们要导出上述bl_user表中userid大于1000的数据,可以用如下指令:
[mysql安装目录]/bin/mysqldump -uadmin -padminpass -h10.102.112.109 -P7712 FR_BLOG bl_user --where="userid>1000" > /home/mysqldump/bl_user.sql
导入:
数据库导入一般使用source指令,首先需要登录数据库,还以上述数据库为例,假设我们在数据库中新建了一个库名为:FR_BLOG_BACKUP,然后想把上述导出的bl_user.sql数据导入该库中,指令如下:
//首先需要登录数据库 [mysql安装目录]/bin/mysql -uadmin -padminpass -h10.102.112.109 -P7712 //然后切换到我们要导入数据的库 mysql> use FR_BLOG_BACKUP; //导入数据 mysql> source /home/mysqldump/bl_user.sql
备注:
这个方法导入大批量数据也是没问题的,但是在实践中发现在进行大量数据导入的时候,可能需要对导出的.sql文件进行简单的修改,我在项目中试过7G数据的转存,第一次导入成功了,后来每次再导入都会导致整个服务器的数据库LOCK,而且数据不能导入,后来发现.sql文件中有一行为: LOCK TABLES `page_view` WRITE;
这是为了较快的写入数据而锁表操作,但是在导入的时候却导致了插入失败,而且影响其他数据库的使用,随意最好把这句注释掉,因为.sql文件太大,用vim打开基本上是不可能的,可以使用下面的指令修改:
sed -i "[linenum]s/LOCK/--LOCK/1" [filename].sql
其中 [linenum] 是 LOCK TABLES `page_view` WRITE; 所在行的行号, [filename] 为要修改的.sql文件
[linenum] 可以使用head指令查看, head -n [num] [filename].sql