mysqldump

  • 参数说明:

--opt 

        启用一组优化选项,包括关闭缓存区(它会使服务器耗尽内存),导出数据时把更多的数据写在更少的SQL语句里,以便在加载的时候更有效率,以及做其他一些有用的事情。如果关闭了这组选项,mysqldump会在把表写到磁盘之前,把它们都导出到内存里,这对于大型的表是不切实际的。

---database,-B

    转储几个数据库。通常情况,mysqldump将命令行中的第1个名字参量看作数据库名,后面的名看作表名。使用该选项,它将所有名字参量看作数据库名。

--single-transaction

    该选项从服务器转储数据之前发出一个BEGIN SQL语句。

它只适用于事务表,例如InnoDB和BDB,因为然后它将在发出BEGIN而没有阻塞任何应用程序时转储一致的数据库状态。

    当使用该选项时,应记住只有InnoDB表能以一致的状态被转储。例如,使用该选项时任何转储的MyISAM或HEAP表仍然可以更改状态。

该选项和--lock-tables选项是互斥的,因为LOCK TABLES会使任何挂起的事务隐含提交。    要想转储大的表,应结合--quick使用该选项。

--flush-logs,-F

    开始转储前刷新MySQL服务器日志文件。该选项要求RELOAD权限。请注意如果结合--all--database(或-A)选项使用该选项,根据每个转储的数据库刷新日志。例外情况是当使用--lock-all-tables或--master-data的时候:在这种情况下,日志只刷新一次,在所有 表被锁定后刷新。如果你想要同时转储和刷新日志,应使用--flush-logs连同--lock-all-tables或--master-data。

--quick,-q

    该选项用于转储大的表。它强制mysqldump从服务器一次一行地检索表中的行而不是检索所有行并在输出前将它缓存到内存中。

  • 使用实例:

直接将MySQL数据库压缩备份
mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz

备份MySQL数据库某个(些)表
mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql

同时备份多个MySQL数据库
mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql

仅仅备份数据库结构
mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql

还原MySQL数据库的命令
mysql -hhostname -uusername -ppassword databasename < backupfile.sql

还原压缩的MySQL数据库
gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename


  • 示例脚本:

分库备份:

#!/bin/sh
MYUSER=root
MYPASS=123456
MYCMD="mysql -u$MYUSER -p$MYPASS"   #定义了mysql命令
MYDUMP="mysqldump -u$MYUSER -p$MYPASS"   #定义了mysqldump命令
DATABASE=`$MYCMD -e "show databases;"|sed '1d'|egrep -v "mysql|performance_schema|information_schema"`  #获取到数据库名
for database in $DATABASE
do
$MYDUMP -B $database|gzip >/server/backup/${database}_$(date +%F).sql.gz   #for循环分库备份
done

分表备份:

#!/bin/sh
MYUSER=root
MYPASS=123456
MYCMD="mysql -u$MYUSER -p$MYPASS"
MYDUMP="mysqldump -u$MYUSER -p$MYPASS"
DATABASE=`$MYCMD -e "show databases"|sed '1d'|egrep -v "mysql|performance_schema|information_schema"`
for database in $DATABASE
do
[ ! -d /server/backup/$database ] && mkdir -p /server/backup/$database   #创建以数据库名命名的目录
TABLE=`$MYCMD -e "show tables from $database;"|sed '1d'` #获取表名
  for table in $TABLE
  do
  $MYDUMP $database $table |gzip >/server/backup/$database/${database}_${table}_$(date +%F).sql.gz  #for循环分表备份
  done
done

http://chocolee.blog.51cto.com/8158455/1424570

  • 其他

在服务器之间复制表:

mysqldump --host=server1 test t1 |mysql --host=server2 test 


你可能感兴趣的:(mysqldump)