参与的一个项目需要将mysql数据库整个备份导出,我用百度大法学习了mysql的备份方法。
一. mysqldump常见用法
mysqldump指令详见:
<pre>
mysqldump --help
</pre>
1.1 导出整个数据库(包含结构和数据)
<pre>
mysqldump -u用户名 -p密码 -h主机 数据库1 数据库2 > 转储文件路径
</pre>
上述命令将指定数据库(可以是一个或多个)备份到某dump文件中,比如:
<pre>
mysqldump -u root -p123456 znms > znmsdump.sql
</pre>
上述命令将本机上的znms数据库整个备份到当前路径下的znmsdump.sql文件中。
1.2 导出数据库结构(不含数据)
<pre>
mysqldump -u用户名 -p密码 -h主机 -d 数据库1 数据库2 > 转储文件路径
</pre>
上述命令仅将指定数据库的结构备份到某dump文件中,比如:
<pre>
mysqldump -u root -p -d znms > znmsdump.sql
</pre>
1.3 导出数据库中的表
<pre>
mysqldump -u用户名 -p密码 -h主机 -d 数据库名 表1 表2 表3 > 转储文件路径
</pre>
上述命令将指定数据库的指定表(一张或多张)导出到指定文件,例如:
<pre>
mysqldump -u root -p123456 znms user_info role user_role > znmsdump.sql
</pre>
如果加上 -d 或 --no-data,将只导出表结构,如:
<pre>
mysqldump -u root -p123456 -d znms user_info role user_role > znmsdump.sql
</pre>
加上--where="筛选条件" 可对表中数据进行筛选后再导出,例如:
<pre>
mysqldump -u root -p123456 znms user_info --where="id>10" > znmsdump.sql
</pre>
1.4 数据库迁移
以下命令将数据库导出然后通过管道导入到另一台机子上的数据库:
<pre>
mysqldump -u root -p123456 --single-transaction--databases db1 db2 | mysql -u root -p123456 -h 172.16.1.25
</pre>
二. 重要参数说明
--add-drop-database:每个数据库创建之前添加drop数据库语句。默认为打开状态,使用--skip-add-drop-table取消。
--comments:附加注释信息。默认为打开,可以用--skip-comments取消。
--lock-tables:在导出数据前先锁表,导出完成后释放。注意如果导出多个数据库,则在前一个表导出完成后,后一个表才上锁。
--lock-all-tables:它会在一开始就对所有的数据库的所有表上锁,请注意它会使用FLUSH TABLES。
--single-transaction:它设置整个导出的过程为一个事务,避免了锁。
--master-data:它对所有数据库的所有表上了锁,并且查询binlog的位置。请注意它会使用FLUSH TABLES。
--master-data --single-transaction:这种组合,会先对所有数据库的所有表上锁,读取binlog的信息之后就立即释放锁,这个过程是十分短暂的,然后整个导出过程都在一个事务里。请注意它会使用FLUSH TABLES。
-F or -flush-logs:使用这个选项,在执行导出之前将会刷新MySQL服务器的log。
-f or -force:使用这个选项,即使有错误发生,仍然继续导出。
-t or -no-create-info:这个选项使的mysqldump命令不创建CREATE TABLE语句,这个选项在只需要数据而不需要DDL(数据库定义语句)时很方便。
-d or -no-data :这个选项使的mysqldump命令不创建INSERT语句,即不导出数据。