zoukankan      html  css  js  c++  java
  • mysqldump原理及实战

    使用mysqldump命令行工具创建逻辑备份:

    注意mysqldump的版本和路径
    mysqldump命令创建的是逻辑备份,结果集有两种格式:一种是将数据转换成标准的SQL语句(一堆CREATE,DROP,INSERT等语句),另一种是将数据按照指定分隔符,输出成定界格式的平面文件。
    [root@mydb1 ~]# mysqldump
    usage: mysqldump [OPTIONS] database [tables]
    OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
    OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
    For more options, use mysqldump –help
     

    mysqldump 参数详解:

    --single-transaction
    用于保证innodb备份数据一致性,配合RR隔离级别使用;当发起事务,读取一个快照版本,直到备份结束时,都不会读取到本事务开始之后提交的数据;(很重要)
    -q, --quick
    加 SQL_NO_CACHE 标示符来确保不会读取缓存里的数据-l
    --lock-tables
    发起 READ LOCAL LOCK锁,该锁不会阻止读,也不会阻止新的数据插入
    --master-data
    两个值 1和2,如果值等于1,就会添加一个CHANGE MASTER语句(后期配置搭建主从架构)
    如果值等于2,就会在CHANGE MASTER语句前添加注释(后期配置搭建主从架构)
    -c, --complete-insert;
    导出完整sql语句
    -d,--no-data;
    不导出数据,只导表结构
    -t,--no-create-info;
    只导数据,不导表结构
    -w, --where=name ;
    按条件导出想要的数据
    --set-gtid-purged,在gtid环境中使用
    备份数据库:
    备份单个数据库或单个数据库中的指定表:
    mysqldump [OPTIONS] database [tb1] [tb2]…
    备份多个数据库:
    mysqldump [OPTIONS] –databases
    [OPTIONS] DB1 [DB2 DB3...]
    备份所有数据库:
    mysqldump [OPTIONS] –all-databases
    [OPTIONS]
    利用mysql命令恢复数据:
    mysql -uroot -proot23 db_name < table_name.sql
     
    通过--where选项导出满足条件的数据
    mysqldump -uroot -p --single-transaction --master-data --where='id < 10' test02 goods_code_info > TableConditon.sql
    备注:--where等号的后面的条件,必须要用括号扩起来.上面的语句的作用,导出test02库下goods_code_info表中满足id<10这个条件的记录.

    注意sql_log_bin和gtid_purged
    time /usr/local/mysql/bin/mysqldump -uroot -pmsds007 --single-transaction --master-data=2 -A -S /app/mysqldata/3306/mysql.sock > db3306-`date +%Y%m%d`.sql
    time /usr/local/mysql/bin/mysqldump -uroot -pmsds007 --single-transaction --master-data=2 --set-gtid-purged=off mytest -S /app/mysqldata/3306/mysql.sock > db3306-`date +%Y%m%d`_mytest.sql
    time /usr/local/mysql/bin/mysql -uroot -pmsds007 -S /app/mysqldata/3306/mysql.sock < db3306-20170710.sql
    每次导完数据,尽量flush privileges;一下
    使用mysqlbinlog恢复--skip-gtids 忽略gtid信息
     

    查看导出的文件,是先drop表再create表,再看有没有乱码,注意字符集

    打开general log执行

    time /usr/local/mysql/bin/mysqldump -uroot -pmsds007 --single-transaction --master-data=2 -A -S /app/mysqldata/3306/mysql.sock > db3306-`date +%Y%m%d`.sql

    看general log的详细信息 

    原理图

    图片转载https://blog.51cto.com/yanzongshuai/2044403

  • 相关阅读:
    什么是线程组,为什么在 Java 中不推荐使用?
    什么是 FutureTask?使用 ExecutorService 启动任务?
    Java 中用到的线程调度算法是什么?
    什么是阻塞队列?阻塞队列的实现原理是什么?如何使用 阻塞队列来实现生产者-消费者模型?
    说说对 SQL 语句优化有哪些方法?(选择几条)
    什么是 Executors 框架?
    Java Concurrency API 中的 Lock 接口(Lock interface) 是什么?对比同步它有什么优势?
    什么是原子操作?在 Java Concurrency API 中有哪些原 子类(atomic classes)?
    Java 中你怎样唤醒一个阻塞的线程?
    你将如何使用 thread dump?你将如何分析 Thread dump?
  • 原文地址:https://www.cnblogs.com/allenhu320/p/11310205.html
Copyright © 2011-2022 走看看