mysqldump 导出表结构及表数据

一: mysqldump 的核心参数

--single-transaction:用于保证innodb备份数据时的一致性,配合RR隔离级别一起使用,当发起一个事务时,会读取当前的数据快照,直到备份结束,都不会读取到本事务开始之后提交的数据

--master-data:该参数为1时,表示备份出来的文件中添加一个CHANGE MASTER语句,该值为2时,表示会在CHANGE  MASTER命令前端增加注释信息

--dump-slave:该参数用于在从库端备份,在线搭建新的从库时使用。该参数也有两个值1和2,该参数为1时,表示备份出来的文件中添加一个CHANGE MASTER语句,该值为2时,表示会在CHANGE  MASTER命令前端增加注释信息

 

二:数据导出

1:mysql到处数据库中某张表结构
mysqldump -u $user -p -d $databasename $tablename > $databasename.sql

2:mysql 导出某个数据库里面的所有表的结构
mysqldump -u $user -p -d $databasename > $databasename.sql

3、导出某个数据库中所有表结构及表数据(不加-d)
mysqldump -u $user -p $databasename > $databasename.sql;

4、导出某个数据库中某张表结构及表数据(不加-d)
mysqldump -u $user -p $databasename $tablename > $databasename.sql;

5: 导出整个实例

mysqldump -u $user -p --all-databases > all_database.sql

三:数据导入

# 导入指定SQL文件 (指定导入testdb库中)
mysql -u $user -p testdb < testdb.sql

为了快速导入脚本,临时修改以下两个参数

1:innodb_flush_log_at_trx_commit

innodb_flush_log_at_trx_commit默认值为1,可设置为0、1、2 。如果innodb_flush_log_at_trx_commit设置为0,log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。如果innodb_flush_log_at_trx_commit设置为1,每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去.如果innodb_flush_log_at_trx_commit设置为2,每次事务提交时MySQL都会把log buffer的数据写入log file.但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。

2:sync_binlog

sync_binlog默认值为1,可设置为[0,N)当sync_binlog =0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。当sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。

这两个参数可以在线修改,案例如下:

1):进入MySQL命令行 临时修改这两个参数
set global innodb_flush_log_at_trx_commit = 2;
set global sync_binlog = 2000;

set sql_log_bin=0;(新建从库或不需要产生binlog时导入SQL脚本可以设置暂时不记录binlog,可以在脚本开头增加 set sql_log_bin=0; 然后再执行导入,这样速度会进一步加快)

2): 执行SQL脚本导入
mysql -u $user -p testdb < testdb.sql

3):导入完成 再把参数改回来
set global innodb_flush_log_at_trx_commit = 1;
set global sync_binlog = 1;

你可能感兴趣的:(Mysql-server)