• 数据库备份和恢复


    mysqldump命令备份:逻辑备份将数据库中的数据备份成一个文本文件,表结构和表中的数据将存储在生成的文本中。

    ->工作原理:先查出需要备份的表结构,再在文本文件中生成一个create语句,然后将所有记录转换为一条insert语句。create语句和insert语句都是为了以后恢复时使用。

    ->备份和恢复都在linux的root权限下进行,注意不是mysql下。

    ->语法: mysqldump -h主机名  -P端口 -u用户名 -p密码 (–database) 数据库名 > 文件名.sql

       例子: mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql

    ->还原MySQL数据库的命令
                  mysql -hhostname -uusername -ppassword databasename < backupfile.sql     注意数据库名必须要存在,即需要先建好数据库,因为备份只备份表结构create和表数据insert

    ->备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
       mysqldump --add-drop-table -uusername -ppassword databasename > backupfile.sql

    ->直接将MySQL数据库压缩备份
       mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz

    ->还原压缩的MySQL数据库
        gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename

    或者先解压,再导入

    ->备份MySQL数据库某个(些)表
       mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql

    ->同时备份多个MySQL数据库
    备份:   mysqldump -uusername -ppassword --databases databasename1 databasename2 databasename3 > multibackupfile.sql

    恢复:   mysql  -uusername -ppassword  < multibackupfile.sql   

       --databases, -B: 用于备份多个数据库,如果没有该选项,mysqldump把第一个名字参数作为数据库名,后面的作为表名。使用该选项,

    ->仅仅备份数据库结构
       mysqldump --no-data --databases databasename1 databasename2 databasename3 > structurebackupfile.sql

    ->备份服务器上所有数据库? 
       mysqldump -uroot  -p123lqh -A  > allbackupfile.sql            mysqldump -uroot  -p123lqh -A  -d> allbackupfile.sql  备份所有数据库但只备份表结构    

    ->将数据库转移到新服务器

       mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename

     ->简洁的查看数据库备份文件内容: egrep    -v     "#|*|--|"$"       /opt/...  .sql

                                                                                                没有用的过滤掉   文件地址

     ->数据库中的 参数 -e  可以对sql语句进行增删给查操作。比如

    mysql -uroot -p123lqh -e  "select * from 数据库名.表名;"

    mysql -uroot -p123lqh -e  "use 数据库名;drop table 表名;"

    -> 数据库中的参数 -B  除了连接多个数据库之外,还增加了创建数据库以及连接数据库的命令。所以加了-B 的数据库备份,如果数据库中没有创建数据库名,也是可以运行成功的。比如:

    备份: mysqldump -hhostname -uusername -ppassword  -B  databasename > backupfile.sql  (当只备份一个数据库时,要加上-B)

    恢复: mysql  -uusername -ppassword  < backupfile.sql       (dump,-B,数据库名也去掉)

    ===================================分库备份==========================================================

    意义:企业的数据库会有多个库,但出问题的可能是某一个库,如果备份时把所有库都备份成一个文件,恢复某个库的数据就比较麻烦了。

     参数:--compat 去掉注释,适合调试输出,生产不用

               --master-data 增加binlog日志文件名及对应位置点

              -l  只读锁表

              -d 只备份表结构

             -t 只备份数据

             -x 锁所有的表

             --single-transaction 适合innodb事务数据库备份,保证备份的一致性,实际上是设置本次会话的隔离级别,在dump的时候其他数据再提交,这次会话也看不到,从而确保本次会话一致性。

    myisam:

    mysqldump -uroot -p123lqh -A -B --master-data=2 -x|gzip>/opt/all.mysql.gz

    innodb:推荐使用

    mysqldump -uroot -p123lqh -A -B --master-data=2  --single-transaction|gzip

      >/opt/all.mysql.gz

    mysql下查看系统路径:system ls /opt 

    ->使用source 恢复 :

     方式一: source  要恢复的sql文件路径 (前提是文件中有建库语句)

        比如:source /opt/mysql_bak_B.sql

        system ls 相对目录  ,如果相对目录里面有文件,则可以直接source

    方式二: 如果没有建库语句,则 use 数据库,然后再 source 文件路径

    ======================================分表分库备份恢复

    通过脚本读指定的库和表,调用mysql命令恢复

    for  dbname  in 'ls * .sql|sed 's#_bak.sql##g';do mysql -uroot -p123lqh <${dbname}_bak.sql;done

    ===========================mysql在线修改重要参数

    任何地方都可以执行:

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

    mysql -uroot -p123lqh -e "set names utf-8;use database;select * from 表;"

    mysql -uroot -p123lqh -e "show  full  processlist;"查看正在运行的sql语句

    mysql -uroot -p123lqh -e "show  variables;"|grep log_bin 查看log_bin是否打开

    grep log-bin /etc/my.cnf

    mysql -uroot -p123lqh -e "show global status;"查看整个数据库运行状态,很重要,要分析并做好监控

    mysql -uroot -p123lqh -e "show global status;"|grep sel 查看包含sel的状态

    mysql -uroot -p123lqh -e "show global status;"|less  慢慢看

    在mysql下  set global key_buffer_size=1024*1024*32; 缓冲索引大小,不重启数据库直接生效,重启失效

    show varibles 查看数据库参数信息,例如my.cnf里参数生效情况

  • 相关阅读:
    5种排序算法
    Numpy 基础
    Git 帮助
    SpringBoot巧用 @Async 提升API接口并发能力
    延时队列实现的方式总结
    Spring Boot 进行优雅的字段校验
    分布式搜索引擎Elasticsearch的架构分析
    Redis 使用规范
    Intellij IDEA远程debug线上项目记录
    领域驱动设计:领域接口化设计
  • 原文地址:https://www.cnblogs.com/linqiuhua/p/7449824.html
Copyright © 2020-2023  润新知