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

  • 相关阅读:
    团队作业—第二阶段08
    团队作业—第二阶段07
    java--Map使用实现模拟斗地主洗牌发牌
    课程作业08 MVC框架具体使用
    课程作业 MVC框架
    课堂作业06_23种设计模式
    课堂作业05 《6种质量属性战术》
    课堂作业04
    课堂作业03
    架构漫谈阅读笔记
  • 原文地址:https://www.cnblogs.com/allenhu320/p/11310205.html
Copyright © 2011-2022 走看看