• mysqldump命令之常用选项


    ===============================================
    mysqldump常用选项
    -h, --host=name:服务器IP
    -u, --user=name:登录名
    -p, --password[=name]:登录密码
    -A, --all-databases:导出所有数据库
    -B, --databases:导出指定的数据库,多个数据库名使用空格分割
    --tables:导出指定表
    -d, --no-data:仅导出表结构,不导出数据
    -t, --no-create-info:不导出表创建语句
    -n, --no-create-db:不导出CREATE DATABASE IF EXISTS语句
    -e, --extended-insert:将多条记录合并成一条INSERT语句来提高插入效率
    --add-drop-table:在创建表之前加入DROP TABLE语句
    --hex-blob :将二进制的数据以16进制导出
    -R, --routines:导出存储过程和存储函数
    --triggers:导出触发器
    --master-data[=#]:导出CHANGE MASTER命令,当设置为1时,CHANGE命令正常导出,当设置为2时,CHANGE命令以注释模式导出
                        master-data开启时,会默认启用--lock-all-tables选项,并自动禁用--lock-tables选项
    --dump-slave:在从库上执行时,dump-slave用来导出当前主库上的位置信息
    --single-transaction:单实例模式运行
    --lock-all-tables,-x:在导出前对所有表加全局只读锁,并自动关闭--single-transaction 和 --lock-tables 选项
    --lock-tables :在导出当前表数据前才对表进行加锁,该选项指使用与MyISAM表。--lock-tables无法保证所有表数据在数据库级别一致。
    --default-character-set=charset:设置导出时使用的字符集
    --quick,-q :在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。


    ===============================================

    --quick与--skip-quick选项

    --quick选项会在导出的SELECT语句中加入/*!40001 SQL_NO_CACHE */,避免对查询结果进行缓存而污染缓冲池中热数据。

    PS:在MySQL 5.7版本中使用--skip-quick选项,导出的SELECT语句中仍包含/*!40001 SQL_NO_CACHE */,不明原因。

    ===============================================
    master-data与dump-slave的区别:

    参数--dump-slave导出的是当前从库所复制的主库的binlog信息

    参数--master-data导出的是当前服务器上的binlog信息

    假设现在有A-->B的复制,现在想新增从库C实现A-->C的复制

    如果在A上进行备份,则使用master-data选项来获取备份时间点时A的binlog位置

    如果在B上进行备份,这使用dump-slave选项来获取备份时间点时A的binlog的位置

     

    ===============================================
    mysqldump与gtid-purged

    当使用--all-databases + --triggers --routines --events导出脚本时,会在导出脚本中包含:

    SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
    SET @@SESSION.SQL_LOG_BIN= 0;
    
    --
    -- GTID state at the beginning of the backup
    --
    
    SET @@GLOBAL.GTID_PURGED='3a8d8f51-feab-11e8-99ec-fa166946750e:17-768,
    865cca62-feac-11e8-baec-fa075be7f38b:1-16';

     

    如果使用--databases 'database_name'+--triggers --routines --events导出脚本时,会提示:

    Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.


    而如果使用 --set-gtid-purged选项,则不会导出下面两个命令:

    SET @@SESSION.SQL_LOG_BIN= 0;
    SET @@GLOBAL.GTID_PURGED='xxxx'

     

    踩坑案例:

    当前有复制A(主)->B(从),现需要将C中数据全部迁移到A上,使用mysqldump --all-databases在C上导出所有数据并导入到A上,发现A上数据没有复制到B上。

    问题原因:在mysqldump导出的命令中包含"SET @@SESSION.SQL_LOG_BIN= 0;",导致数据导入到A上时不会生成binlog,无法传递到其从库。

     

    ===============================================

    --opt与--skip-opt区别

    官方解释:https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump
    --opt: Shorthand for --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset. --skip-opt: Turn off options set by --opt

    使用--skip-opt参数,会关闭默认--opt选项,导致:

    1、导出脚本中缺少DROP TABLE IF EXISTS语句

    2、导出脚本中CREATE TABLE语句中缺少存储引擎设置

    3、导出脚本中CREATE TABLE语句中缺少默认字符集设置

    3、导出脚本中CREATE TABLE语句中缺少自增列和自增初始值设置。

    因此强烈建议谨慎使用--skip-opt参数

     

  • 相关阅读:
    [LeetCode]230. 二叉搜索树中第K小的元素(BST)(中序遍历)、530. 二叉搜索树的最小绝对差(BST)(中序遍历)
    【二叉树-所有路经系列(根->叶子)】二叉树的所有路径、路径总和 II、路径总和、求根到叶子节点数字之和(DFS)
    [LeetCode]1083. 销售分析 II(Mysql,having+if)
    [LeetCode]196. 删除重复的电子邮箱(delete)
    [LeetCode]面试题62. 圆圈中最后剩下的数字(数学)
    [算法]十进制整数转八进制
    [LeetCode]534. 游戏玩法分析 III(Mysql)
    [LeetCode]Mysql小本本
    [LeetCode]Mysql系列5
    Java 冒泡排序的实现
  • 原文地址:https://www.cnblogs.com/gaogao67/p/10482973.html
Copyright © 2020-2023  润新知