zoukankan      html  css  js  c++  java
  • (3.1)mysql备份与恢复之mysqldump

     我的相关文章:https://www.cnblogs.com/gered/p/10817309.html

    目录:

    1.单实例联系

      1.1、备份单个数据库联系多种参数使用

        【1】mysqldump命令备份演示  【2】查看备份文件  【3】用备份文件还原

      1.2、mysqldump 各类参数释义

        【1】--default-character-set=utf8    #默认使用该字符集导出  【2】-B  #加上建库与库使用   

        【3】--compact  #减少备份文件垃圾信息(但会丢数据,生产不可用)  【4】数据库名|gzip  #压缩备份文件

        【5】-d    #只备份表结构    【6】-t  #只备份表数据  【7】 -A  #all-database的意思,备份所有数据库(以及表、用户等等所有数据)

        【8】-F  #重新生成binlog日志  【9】-R  #备份存储过程、触发器

      1.3、多个库备份

        【1】备份多个数据库合并到一个备份文件:mysqldump -uroot -p -B test1 test|gzip > /opt/mutil.sql.gz

        【2】多个数据库备份出对应的多个备份文件:直接用mysqldump 一个库一个库的备份。如果库多,可以使用show databases;再配合grep、sed等命令动态获取所有库,详情见本节相关内容; 或者使用for循环备份~分库分表

      附录1:使用MySQLhotcopu工具快速备份MyIsam引擎下的数据库数据

      附录2:mysqldump 参数释义大全

            1.备份库
                    mysqldump -uroot -p test -B --default-character-set=UTF8> /mysql/bak/bak_mysql_test.sql
            
            2.备份表(这里不能加-B,否则就会默认都是数据库        )
                    mysqldump -uroot -p  test test1  --default-character-set=UTF8> /mysql/bak/bak_testdb_test1.sql 

         3.备份多个数据库 【1--databases:mysqldump -uroot -p --databases test test_1 --default-character-set=UTF8> /mysql/bak/bak_multidb_test_1.sql2-B:mysqldump -uroot -p -B test test_1 --default-character-set=UTF8> /mysql/bak/bak_multidb_test_2.sql 效果一样~ 4.备份所有数据库 【1--all-databases: mysqldump -uroot -p123456 --all-databases > /mysql/bak/all_mysql.sql1-A: mysqldump -uroot -p123456 -A > /mysql/bak/all_mysql.sql

    基本语法形式:

      mysqldump -uroot -p123456 db_name> 备份的文件名

    1.单实例练习

    1.1备份单个数据库联系多种参数使用

    (1)mysqldump备份基本演示

        备份目标对象如图:

        

    --开始备份test数据库到 /opt/mysql_test_bak.sql
    mysqldump -uroot -p test1 >/opt/mysql_test_bak.sql

    #这里可以加参数,--default-character-set=utf8 ,用其来做字符集导出
    mysqldump -uroot -p --default-character-set=utf8 test1 >/opt/mysql_test_bak.sql

      【1】#查看是否备份成功
           

      【2】#看看备份文件里面的内容,其实是把现有的所有东西都删除掉,用sql重新插入一遍。。但直接cat查看有很多乱七八糟的东西。

      

      【2】egrep -v "#|*|--|^$" /opt/mysql_test_bak.sql

      #另外一个简便命令查看备份文件内容,去掉乱七八糟的东西

         

     (2)还原

    #还原命令,这里只是通过 mysqldump -uroot -p test1 >/opt/mysql_test_bak.sql  来备份,如果test1库不存在,这里就会还原失败,因为没有建库、切换到这个库的操作;
    mysql -uroot -p123456 test1 </opt/mysql_test_bak.sql

    总结:

      【1】备份:备份是把现有表结构,表数据,全都以sql的方式体现。但是注意,如果直接用mysqldump就不会有判断是否存在库,也不会使用库(见上图)。要有的话加-B参数;

      【2】还原: 就是删除老的同名库和表,然后再新建库、表,插入表数据。

    1.2各类参数释义

    【1】--default-character-set=utf8    #默认使用该字符集导出,案例语句: mysqldump -uroot -p --default-character-set=utf8 test1 >/opt/mysql_test_bak.sql

    【2】-B  #加上建库与库使用,案例语句:mysqldump -uroot -p --default-character-set=utf8 -B test1>/opt/mysql_test_B_bak.sql

      如图:

       

     【3】--compact  #减少备份文件垃圾信息,一般用来测试(因为加这个参数,会把里面很多东西干掉,比如锁)案例语句:mysqldump -uroot -p --default-character-set=utf8 --compact -B test1>/opt/mysql_test_B_bak.sql

      

    【4】数据库名|gzip  #压缩备份文件,案例语句:mysqldump -uroot -p --default-character-set=utf8  -B test1|gzip>/opt/mysql_test.bak.sql.gz

      

      压缩前后大小很明显。

    【5】-d  #只备份表结构

      

    【6】-t  #只备份表数据

    总结:使用mysqldump其实算是逻辑备份(逻辑备份:就是把数据生成sql语句的备份,物理备份:直接打包压缩备份数据文件的备份)

    【1】备份用:mysqldump -uroot -p db_name > 备份文件                        #这里只会有数据sql,不会产生建库、使用库

    【2】还原:mysql -uroot -p db_name< 备份文件            #如果是使用【1】备份的备份文件,那么备份时的库名必须存在否则报错。如果使用【3】备份的备份文件,那么实例中无论是否存在db_name数据库,也可以还原。

    【3】-B:备份文件里加上create database语句与 usedr database语句; 

    【4】db_name|gzip :压缩备份文件 ,输出文件名后缀因为gz;

    1.3多个库备份

    【1】备份多个数据库合并到一个备份文件

      mysqldump -uroot -p -B test1 test|gzip > /opt/mutil.sql.gz  #直接库与库之间加空格即可

      查看情况如下;用gzip -d解压gz文件。

      然后查看:egrep -v "#|*|--|^$" /opt/mutil.sql

      

     【2】多个数据库备份出对应的多个备份文件

      (1)查看数据库

        mysql -uroot -p123456 -e "show databases;"

        

      (2)排除系统数据库及其他信息,取出想要的数据库名

        mysql -uroot -p123456 -e "show databases;"|grep -Evi "database|infor|perfor"

        

      (3)前后加命令字符

        mysql -uroot -p123456 -e "show databases;"|grep -Evi "database|infor|perfor"|sed 's#/^mysqldump -uroot -p123456 -B#g'

        

      (4)前后追加命令字符生成完整脚本

        

      (5)再完善,整体效果查看(这里额外新建了个目录专门放入备份文件/opt/bak  ,备份语句里面也加了个--events )

        

     【2】for循环方式备份多个数据库成多个备份文件;

      进入/u01/my3306/scripts/ 目录下(这个是我mysql的安装目录),新建 vi fenku.sh

      代码如下

    #for dbname in `mysql -uroot -p123456 -e "show databases;"|grep -Evi "database|infor|perfor"`
    for dbname in `mysql -uroot -p123456 -N -e'show databases;'`
    do mysqldump -root -p123456 --events -B ${dbname}|gzip >/opt/bak/${dbname}_bak.sql.gz done

      (1)删除备份目录下所有备份以便我实验

        rm -f /opt/bak/*

      (2)运行脚本

        sh fenku.sh

      

    附录1:使用MySQLhotcopu工具快速备份MyIsam引擎下的数据库数据

     

          

    附录2:mysqldump 参数释义大全
    mysqldump详细参数参考表:https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html

     

  • 相关阅读:
    linux 环境变量恢复默认值
    怎么查看Eclipse的版本信息
    掌握HDFS的Java API接口访问
    【代理】代理概念
    【DbUtils】轻量级的ORM学习
    【mysql】相关记录
    JWT(JSON Web Tokens)
    将jar包安装到本地仓库
    Spring集成rabbitmq
    spring-rabbit包的引入需要注意的事项
  • 原文地址:https://www.cnblogs.com/gered/p/9721696.html
Copyright © 2011-2022 走看看