暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql备份---mysqldump备份

程序猿读历史 2021-05-31
1170

一、前言

对于MySQL的备份,可分为以下两种:

  • 冷备。

  • 热备。

冷备,就是将数据库关掉,利用操作系统命令拷贝数据库相关文件。而热备指的是在线热备,即在不关闭数据库的情况下,对数据库进行备份。实际生产中几乎都是热备。

热备也可分为两种方式:

  • 逻辑备份。

  • 物理备份。

逻辑备份的常用的工具是MySQL自带的mysqldump(5.7之后有mysqlpump)。热备常用的工具是Percona提供的XtraBackup(简称PXB)。对于数据量比较小(100G的数据,SSD盘mysqldump备份大约需要40分钟),业务并不繁忙的数据库,一般都是选择mysqldump。那么,mysqldump的备份原理是什么呢?

本文主要通过mysql的 general log,查看mysqldump全库备份时,来了解mysqldump背后的原理。

说明:general log是mysql的普通查询日志,一般做为审计使用,开启该功能后,mysql服务会记录所有的操作信息。mysql默认是关闭该功能,因为该功能对性能消耗较大。

二、开启general log

2.1 在线开启

  • 保存在系统日志文件中

mysql默认是关闭普通查询日志的,如下图:

  1. root@localhost [(none)]>show global variables like '%general%';

  2. +------------------+--------------------------------+

  3. | Variable_name | Value |

  4. +------------------+--------------------------------+

  5. | general_log | OFF |

  6. | general_log_file | /opt/mysql/data/rds-manage.log |

  7. +------------------+--------------------------------+

  8. 2 rows in set (0.00 sec)

复制

有时需要临时开启MySQL的全局generallog,可以登录mysql直接设置日志的路径并开启generallog。注意必须使用root用户登陆。

  1. mysql> set global general_log_file='/opt/app/mysql/logs/mysql_general.log';

  2. Query OK, 0 rows affected (0.00 sec)

  3. mysql> set global general_log=on;

  4. Query OK, 0 rows affected (0.02 sec)

  5. mysql> show global variables like '%general%';

  6. +------------------+---------------------------------------+

  7. | Variable_name | Value |

  8. +------------------+---------------------------------------+

  9. | general_log | ON |

  10. | general_log_file | /opt/app/mysql/logs/mysql_general.log |

  11. +------------------+---------------------------------------+

  12. 2 rows in set (0.00 sec)

  13. mysql>

复制

在使用完后可以直接 setglobalgeneral_log=off;
关闭这个日志

  • 保存中mysql表中

  1. root@localhost [(none)]>set global log_output='table';

  2. Query OK, 0 rows affected (0.00 sec)

  3. root@localhost [(none)]>set global general_log=on;

  4. Query OK, 0 rows affected (0.00 sec)

  5. root@localhost [(none)]>use test

  6. root@localhost [test]>show tables;

  7. +--------------------+

  8. | Tables_in_test |

  9. +--------------------+

  10. | flow_order_content |

  11. | t_test_01 |

  12. | t_test_02 |

  13. | t_test_03 |

  14. | t_test_parttion |

  15. | wf_order |

  16. | wf_process |

  17. | wf_task |

  18. +--------------------+

  19. 8 rows in set (0.00 sec)

  20. root@localhost [test]>select * from t_test_01;

  21. +------+------+

  22. | id | name |

  23. +------+------+

  24. | 1 | a |

  25. +------+------+

  26. 1 row in set (0.00 sec)

  27. root@localhost [test]>select * from mysql.general_log;

  28. +----------------------------+---------------------------+-----------+-----------+--------------+---------------------------------+

  29. | event_time | user_host | thread_id | server_id | command_type | argument |

  30. +----------------------------+---------------------------+-----------+-----------+--------------+---------------------------------+

  31. | 2019-09-17 09:02:08.390322 | root[root] @ localhost [] | 12 | 58592126 | Query | SELECT DATABASE() |

  32. | 2019-09-17 09:02:08.503855 | root[root] @ localhost [] | 12 | 58592126 | Init DB | test |

  33. | 2019-09-17 09:02:14.107374 | root[root] @ localhost [] | 12 | 58592126 | Query | show tables |

  34. | 2019-09-17 09:02:18.924482 | root[root] @ localhost [] | 12 | 58592126 | Query | select * from t_test_01 |

  35. | 2019-09-17 09:02:31.523556 | root[root] @ localhost [] | 12 | 58592126 | Query | select * from mysql.general_log |

  36. +----------------------------+---------------------------+-----------+-----------+--------------+---------------------------------+

  37. 5 rows in set (0.01 sec)

复制

2.2 离线开启

离线开启时通过修改/etc/my.cnf配置文件实现,修改完后需要重新启动mysql才可以生效,是永久生效。当然这种方式是不允许在生产上采用的。因为要重启mysql,会中断mysql的业务。同时general.log会记录所有的关于mysql的语句,非常消耗资源,一般都是在协助排除mysql故障时,临时短暂的在线开启几分钟。

离线修改方式如下:

  • 保存在日志中

  1. [root@192-168-0-171 ~]# tail -3 /etc/my.cnf

  2. log_output=file

  3. general_log=on

  4. general_log_file=/opt/app/mysql/logs/mysql_general.log

复制
  • 保存在表中

  1. [root@192-168-0-171 ~]# tail -3 /etc/my.cnf

  2. log_output=table

  3. general_log=on

复制

三、全库备份

  • 备份语句一:

  1. [root@192-168-0-171 ~]# mysqldump -u'root' -p'root' -A > test2.sql

复制
  • 备份语句二:

  1. [root@192-168-0-171 ~]#mysqldump -u'root' -p'root' -A --single-transaction --master-data=2> test3.sql

复制

--single-transaction 获取InnoDB表的一致性备份。-A 相当于--all-databases。--master-data 是为了获取备份时binlog的位点信息(该值等于1时,备份文件中位点信息不被注释,等于2时,被注释)

3.1 第一种备份方式的general log

  1. 2019-09-17T19:01:41.307905+08:00 4 Connect root@localhost on using Socket

  2. 2019-09-17T19:01:41.308260+08:00 4 Query /*!40100 SET @@SQL_MODE='' */

  3. 2019-09-17T19:01:41.308538+08:00 4 Query /*!40103 SET TIME_ZONE='+00:00' */

  4. 2019-09-17T19:01:41.308787+08:00 4 Query SHOW VARIABLES LIKE 'gtid\_mode'

  5. 2019-09-17T19:01:41.311707+08:00 4 Query SELECT @@GLOBAL.GTID_EXECUTED

  6. 2019-09-17T19:01:41.312137+08:00 4 Query SELECT LOGFILE_GROUP_NAME, FILE_NAME, TOTAL_EXTENTS, INITIAL_SIZE, ENGINE, EXTRA FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'UNDO LOG' AND FILE_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IS NOT NULL GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE, TOTAL_EXTENTS, INITIAL_SIZE ORDER BY LOGFILE_GROUP_NAME

  7. 2019-09-17T19:01:41.313230+08:00 4 Query SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME

  8. 2019-09-17T19:01:41.313622+08:00 4 Query SHOW DATABASES

  9. 2019-09-17T19:01:41.364209+08:00 4 Query SHOW VARIABLES LIKE 'ndbinfo\_version'

  10. 2019-09-17T19:01:41.366871+08:00 4 Init DB mysql

  11. 2019-09-17T19:01:41.367012+08:00 4 Query SHOW CREATE DATABASE IF NOT EXISTS `mysql`

  12. 2019-09-17T19:01:41.368363+08:00 4 Query show tables

  13. 2019-09-17T19:01:41.369004+08:00 4 Query LOCK TABLES `columns_priv` READ /*!32311 LOCAL */,`db` READ /*!32311 LOCAL */,`engine_cost` READ /*!32311 LOCAL */,`event` READ /*!32311 LOCAL */,`func` READ /*!32311 LOCAL */,`gtid_executed` READ /*!32311 LOCAL */,`help_category` READ /*!32311 LOCAL */,`help_keyword` READ /*!32311 LOCAL */,`help_relation` READ /*!32311 LOCAL */,`help_topic` READ /*!32311 LOCAL */,`innodb_index_stats` READ /*!32311 LOCAL */,`innodb_table_stats` READ /*!32311 LOCAL */,`ndb_binlog_index` READ /*!32311 LOCAL */,`plugin` READ /*!32311 LOCAL */,`proc` READ /*!32311 LOCAL */,`procs_priv` READ /*!32311 LOCAL */,`proxies_priv` READ /*!32311 LOCAL */,`server_cost` READ /*!32311 LOCAL */,`servers` READ /*!32311 LOCAL */,`slave_master_info` READ /*!32311 LOCAL */,`slave_relay_log_info` READ /*!32311 LOCAL */,`slave_worker_info` READ /*!32311 LOCAL */,`tables_priv` READ /*!32311 LOCAL */,`time_zone` READ /*!32311 LOCAL */,`time_zone_leap_second` READ /*!32311 LOCAL */,`time_zone_name` READ /*!32311 LOCAL */,`time_zone_transition` READ /*!32311 LOCAL */,`time_zone_transition_type` READ /*!32311 LOCAL */,`user` READ /*!32311 LOCAL */

  14. 2019-09-17T19:01:41.472169+08:00 4 Query show table status like 'columns\_priv'

  15. 2019-09-17T19:01:41.472941+08:00 4 Query SET SQL_QUOTE_SHOW_CREATE=1

  16. 2019-09-17T19:01:41.473116+08:00 4 Query SET SESSION character_set_results = 'binary'

  17. 2019-09-17T19:01:41.473299+08:00 4 Query show create table `columns_priv`

  18. 2019-09-17T19:01:41.473484+08:00 4 Query SET SESSION character_set_results = 'utf8'

  19. 2019-09-17T19:01:41.473599+08:00 4 Query show fields from `columns_priv`

  20. 2019-09-17T19:01:41.474532+08:00 4 Query show fields from `columns_priv`

  21. 2019-09-17T19:01:41.474970+08:00 4 Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `columns_priv`

  22. 2019-09-17T19:01:41.475205+08:00 4 Query SET SESSION character_set_results = 'binary'

  23. 2019-09-17T19:01:41.475505+08:00 4 Query use `mysql`

  24. 2019-09-17T19:01:41.475609+08:00 4 Query select @@collation_database

  25. 2019-09-17T19:01:41.475741+08:00 4 Query SHOW TRIGGERS LIKE 'columns\_priv'

  26. 2019-09-17T19:01:41.476212+08:00 4 Query SET SESSION character_set_results = 'utf8'

复制

其中特别重要的信息:

  • Init DB mysql首先备份mysql库

  • Query LOCK TABLES...仔细分析了这段日志,发现mysqldump时首先备份了mysql库下29个表除了 general_log
    slow_log
    2个表未备份,而mysql系统库下一共有31个表。并且备份时是要锁表的。

3.2 第二种备份方式的general log

  1. 2019-09-17T19:29:26.789547+08:00 7 Connect root@localhost on using Socket

  2. 2019-09-17T19:29:26.933970+08:00 7 Query /*!40100 SET @@SQL_MODE='' */

  3. 2019-09-17T19:29:27.000215+08:00 7 Query /*!40103 SET TIME_ZONE='+00:00' */

  4. 2019-09-17T19:29:27.000563+08:00 7 Query FLUSH /*!40101 LOCAL */ TABLES

  5. 2019-09-17T19:29:27.014730+08:00 7 Query FLUSH TABLES WITH READ LOCK

  6. 2019-09-17T19:29:27.014959+08:00 7 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ

  7. 2019-09-17T19:29:27.015123+08:00 7 Query START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */

  8. 2019-09-17T19:29:27.015283+08:00 7 Query SHOW VARIABLES LIKE 'gtid\_mode'

  9. 2019-09-17T19:29:27.018264+08:00 7 Query SELECT @@GLOBAL.GTID_EXECUTED

  10. 2019-09-17T19:29:27.018433+08:00 7 Query SHOW MASTER STATUS

  11. 2019-09-17T19:29:27.105077+08:00 7 Query UNLOCK TABLES

  12. 2019-09-17T19:29:27.107326+08:00 7 Query SELECT LOGFILE_GROUP_NAME, FILE_NAME, TOTAL_EXTENTS, INITIAL_SIZE, ENGINE, EXTRA FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'UNDO LOG' AND FILE_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IS NOT NULL GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE, TOTAL_EXTENTS, INITIAL_SIZE ORDER BY LOGFILE_GROUP_NAME

  13. 2019-09-17T19:29:27.108179+08:00 7 Query SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME

  14. 2019-09-17T19:29:27.108675+08:00 7 Query SHOW DATABASES

  15. 2019-09-17T19:29:27.109221+08:00 7 Query SHOW VARIABLES LIKE 'ndbinfo\_version'

  16. 2019-09-17T19:29:27.110840+08:00 7 Init DB mysql

  17. 2019-09-17T19:29:27.112421+08:00 7 Query SHOW CREATE DATABASE IF NOT EXISTS `mysql`

  18. 2019-09-17T19:29:27.112586+08:00 7 Query SAVEPOINT sp

  19. 2019-09-17T19:29:27.112677+08:00 7 Query show tables

  20. 2019-09-17T19:29:27.113067+08:00 7 Query show table status like 'columns\_priv'

  21. 2019-09-17T19:29:27.113664+08:00 7 Query SET SQL_QUOTE_SHOW_CREATE=1

  22. 2019-09-17T19:29:27.113816+08:00 7 Query SET SESSION character_set_results = 'binary'

  23. 2019-09-17T19:29:27.113979+08:00 7 Query show create table `columns_priv`

  24. 2019-09-17T19:29:27.114157+08:00 7 Query SET SESSION character_set_results = 'utf8'

  25. 2019-09-17T19:29:27.114281+08:00 7 Query show fields from `columns_priv`

  26. 2019-09-17T19:29:27.115006+08:00 7 Query show fields from `columns_priv`

  27. 2019-09-17T19:29:27.115511+08:00 7 Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `columns_priv`

  28. 2019-09-17T19:29:27.115726+08:00 7 Query SET SESSION character_set_results = 'binary'

  29. 2019-09-17T19:29:27.115983+08:00 7 Query use `mysql`

  30. 2019-09-17T19:29:27.116112+08:00 7 Query select @@collation_database

  31. 2019-09-17T19:29:27.116261+08:00 7 Query SHOW TRIGGERS LIKE 'columns\_priv'

复制

其中特别重要的信息:

  • FLUSH *!40101 LOCAL */ TABLES   

Closes all open tables, forces all tables in use to be closed, and flushes the query cache,将所有打开的表都关闭,即所有的表在内存中的数据刷到磁盘上。

  • FLUSH TABLES WITH READ LOCK    

执行flush tables操作,并加一个全局读锁,很多童鞋可能会好奇,这两个命令貌似是重复的,为什么不在第一次执行flush tables操作的时候加上锁呢?   

看看官方解释:

  1. We do first a FLUSH TABLES. If a long update is running, the FLUSH TABLES

  2. will wait but will not stall the whole mysqld, and when the long update is

  3. done the FLUSH TABLES WITH READ LOCK will start and succeed quickly. So,

  4. FLUSH TABLES is to lower the probability of a stage where both mysqldump

  5. and most client connections are stalled. Of course, if a second long

  6. update starts between the two FLUSHes, we have that bad stall.

复制

意思是说,是为了避免较长的事务操作造成FLUSH TABLES WITH READ LOCK操作迟迟得不到锁,但同时又阻塞了其它客户端操作。

  • SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ   

设置当前会话的事务隔离等级为可重复读,可重复读是避免不可重复读和幻读的情况。

  • START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */ 

获取当前数据库的快照,这个是由mysqldump中 --single-transaction
决定的这个只适用于支持事务的表,在MySQL中,只有Innodb。

  1. 注意:

  2. START TRANSACTIONSTART TRANSACTION WITH CONSISTENT SNAPSHOT并不一样   

  3. START TRANSACTION WITH CONSISTENT SNAPSHOT是开启事务的一致性快照。

复制

START TRANSACTION WITH CONSISTENT SNAPSHOT 官方解释:

  1. The WITH CONSISTENT SNAPSHOT modifier starts a consistent read for storage engines that are capable of it. This applies only to InnoDB. The effect is the same as issuing a START TRANSACTION followed by a SELECT from any InnoDB table.

复制

意思就是开启事务并对所有表执行了一次SELECT操作,这样可保证备份时,在任意时间点执行select * from table得到的数据,和执行START TRANSACTION WITH CONSISTENT SNAPSHOT时的数据一致。  

  1. 注意:

  2. START TRANSACTION WITH CONSISTENT SNAPSHOT只在可冲服读(RR)事务隔离级别下有效。

复制
  • SHOW MASTER STATUS     

这个是由--master-data决定的,记录了开始备份时,binlog的状态信息,包括MASTERLOGFILE和MASTERLOGPOS。这个是用于将备份文件还原和主库构建主从时使用的。

  • UNLOCK TABLES     

释放锁。

两种备份方式日志对比:其中左边是第二种备份方式,右边是第一种备份方式


3.3 备份业务库的general log

  1. 2019-09-17T19:29:27.231985+08:00 7 Init DB test

  2. 2019-09-17T19:29:27.232148+08:00 7 Query SHOW CREATE DATABASE IF NOT EXISTS `test`

  3. 2019-09-17T19:29:27.232276+08:00 7 Query SAVEPOINT sp

  4. 2019-09-17T19:29:27.232385+08:00 7 Query show tables

  5. 2019-09-17T19:29:27.232640+08:00 7 Query show table status like 'flow\_order\_content'

  6. 2019-09-17T19:29:27.233285+08:00 7 Query SET SQL_QUOTE_SHOW_CREATE=1

  7. 2019-09-17T19:29:27.233379+08:00 7 Query SET SESSION character_set_results = 'binary'

  8. 2019-09-17T19:29:27.233463+08:00 7 Query show create table `flow_order_content`

  9. 2019-09-17T19:29:27.233595+08:00 7 Query SET SESSION character_set_results = 'utf8'

  10. 2019-09-17T19:29:27.233695+08:00 7 Query show fields from `flow_order_content`

  11. 2019-09-17T19:29:27.234165+08:00 7 Query show fields from `flow_order_content`

  12. 2019-09-17T19:29:27.234604+08:00 7 Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `flow_order_content`

  13. 2019-09-17T19:30:21.004710+08:00 7 Query SET SESSION character_set_results = 'binary'

  14. 2019-09-17T19:30:21.016030+08:00 7 Query use `test`

  15. 2019-09-17T19:30:21.018149+08:00 7 Query select @@collation_database

  16. 2019-09-17T19:30:21.018619+08:00 7 Query SHOW TRIGGERS LIKE 'flow\_order\_content'

  17. 2019-09-17T19:30:21.053800+08:00 7 Query SET SESSION character_set_results = 'utf8'

  18. 2019-09-17T19:30:21.054092+08:00 7 Query ROLLBACK TO SAVEPOINT sp

  19. 2019-09-17T19:30:21.054320+08:00 7 Query show table status like 't\_test\_01'

  20. 2019-09-17T19:30:21.069792+08:00 7 Query SET SQL_QUOTE_SHOW_CREATE=1

  21. 2019-09-17T19:30:21.070021+08:00 7 Query SET SESSION character_set_results = 'binary'

  22. 2019-09-17T19:30:21.070216+08:00 7 Query show create table `t_test_01`

  23. 2019-09-17T19:30:21.070441+08:00 7 Query SET SESSION character_set_results = 'utf8'

  24. 2019-09-17T19:30:21.070630+08:00 7 Query show fields from `t_test_01`

  25. 2019-09-17T19:30:21.071300+08:00 7 Query show fields from `t_test_01`

  26. 2019-09-17T19:30:21.071810+08:00 7 Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `t_test_01`

  27. 2019-09-17T19:30:21.072159+08:00 7 Query SET SESSION character_set_results = 'binary'

  28. 2019-09-17T19:30:21.072309+08:00 7 Query use `test`

复制

重要的信息:

  • 备份的核心 SELECT/*!40001 SQL_NO_CACHE */*FROM`flow_order_content
     语句。

该语句会查询到表flowordercontent的所有数据,在备份文件中会生成相应的insert语句. 其中SQLNOCACHE的作用是查询的结果并不会缓存到查询缓存中,所以mysqldump并不会消耗太多的内存。

  •  SHOW CREATE DATABASE IF NOT EXISTS test
     和show create table flow_order_content

生成创库语句和创表语句。

  • SHOW TRIGGERS LIKE 'flow_order_content'

可以看出,如果不加-R参数,默认是会备份触发器的。

  • 设置SAVEPOINT,然后备份完每个表后再回滚到该SAVEPOINT。   

前面通过START TRANSACTION WITH CONSISTENT SNAPSHOT开启的事务只能通过commit或者rollback来结束,而不是ROLLBACK TO SAVEPOINT sp。

不会阻塞在备份期间对已经备份表的ddl操作。

ROLLBACK TO SAVEPOINT的官方解释:

  1. ROLLBACK TO SAVEPOINT in --single-transaction mode to release metadata

  2. lock on table which was already dumped. This allows to avoid blocking

  3. concurrent DDL on this table without sacrificing correctness, as we

  4. won't access table second time and dumps created by --single-transaction

  5. mode have validity point at the start of transaction anyway.

  6. Note that this doesn't make --single-transaction mode with concurrent

  7. DDL safe in general case. It just improves situation for people for whom

  8. it might be working.

复制

四、总结

  • mysqldump的本质

是通过select * from tab来获取表的数据的。

  • mysqldump只备份mysql库和业务库

其中业务库是全部备份(备份全库时,如果指定备份某些当然只备份指定的表)。mysql库除了慢日志表和普通查询日志表以为所有的表都备份,并没有备份informationschema、sys和performanceschema三个系统库的。

  • 快照必须放到FLUSH TABLES WITH READ LOCK和UNLOCK TABLES之间

放到之前会造成快照和FTWAL之间执行的DML语句丢失。放到快照之后,会造成从库重复插入数据。

  • mysqldump只适合放到业务低峰期做

如果备份的过程中数据操作很频繁,会造成Undo表空间越来越大,undo表空间默认是放到共享表空间中的,而ibdata的特性是一旦增大,就不会收缩。

  • mysqldump的效率还是比较低

快照只能等到所有表备份完后才结束,其实效率比较高的做法是备份完一张表就提交一次,这样可尽快释放Undo表空间快照占用的空间。但这样做,就无法实现对所有表的一致性备份。

五、附录

5.1 mysqldump常用参数

  1. 参数说明

  2. --all-databases , -A

  3. 导出全部数据库。

  4. mysqldump -uroot -p --all-databases

  5. --databases, -B

  6. 导出几个数据库。参数后面所有名字参量都被看作数据库名。

  7. mysqldump -uroot -p --databases test mysql

  8. --events, -E

  9. 导出事件。

  10. mysqldump -uroot -p --all-databases --events

  11. --host, -h

  12. 需要导出的主机信息

  13. mysqldump -uroot -p --host=localhost --all-databases

  14. --ignore-table

  15. 不导出指定表。指定忽略多个表时,需要重复多次,每次一个表。每个表必须同时指定数据库和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ……

  16. --log-error

  17. 附加警告和错误信息到给定文件

  18. mysqldump -uroot -p --host=localhost --all-databases --log-error=/tmp/mysqldump_error_log.err

  19. --master-data

  20. 该选项将binlog的位置和文件名追加到输出文件中。如果为1,将会输出CHANGE MASTER 命令;如果为2,输出的CHANGE MASTER命令前添加注释信息。该选项将打开--lock-all-tables 选项,除非--single-transaction也被指定(在这种情况下,全局读锁在开始导出时获得很短的时间;其他内容参考下面的--single-transaction选项)。该选项自动关闭--lock-tables选项。

  21. mysqldump -uroot -p --host=localhost --all-databases --master-data=1;

  22. mysqldump -uroot -p --host=localhost --all-databases --master-data=2;

  23. --no-create-db, -n

  24. 只导出数据,而不添加CREATE DATABASE 语句。

  25. mysqldump -uroot -p --host=localhost --all-databases --no-create-db

  26. --no-create-info, -t

  27. 只导出数据,而不添加CREATE TABLE 语句。

  28. mysqldump -uroot -p --host=localhost --all-databases --no-create-inf

  29. --no-data, -d

  30. 不导出任何数据,只导出数据库表结构。

  31. mysqldump -uroot -p --host=localhost --all-databases --no-data

  32. --password, -p

  33. 连接数据库密码

  34. --port, -P

  35. 连接数据库端口号

  36. --routines, -R

  37. 导出存储过程以及自定义函数。

  38. --single-transaction

  39. 该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎,仅InnoDB。本选项和--lock-tables 选项是互斥的,因为LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用--quick 选项。

  40. mysqldump -uroot -p --host=localhost --all-databases --single-transaction

  41. --tables

  42. 覆盖--databases (-B)参数,指定需要导出的表名。

  43. mysqldump -uroot -p --host=localhost --databases test --tables test

  44. --triggers

  45. 导出触发器。该选项默认启用,用--skip-triggers禁用它。

  46. --user, -u

  47. 指定连接的用户名。

  48. --where, -w

  49. 只转储给定的WHERE条件选择的记录。请注意如果条件包含命令解释符专用空格或字符,一定要将条件引用起来。

  50. mysqldump -uroot -p --host=localhost --all-databases --where=” user=’root’”

复制
文章转载自程序猿读历史,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论