• Mysql的备份与恢复




    部分内容原文地址:
    博客园:逆月翎:Mysql备份与恢复(2)—逻辑备份



    1.mysqldump逻辑备份

    mysqldump是mysql自带的一个简单的备份工具,由于操作简单而且对不同的存储引擎通用,所以比较受欢迎。逻辑备份实际上是将数据库的数据被分成一个sql文件,然后恢复数据时只需要用图形化工具导入这个sql文件或者dos下使用source命令引入就可恢复数据。首先我们先看下mysqldump的基本语法:

    mysqldump -uroot -proot -h127.0.0.1 -P3306 test test> test.sql
    

    参数:

    • –all-databases:备份全部数据库。
    • -t:不导出创建表的语句。
    • -d:不导出数据。
    • -R:导出存储过程和函数。
    • –default-character-set:指定编码
    • –result-file:指定导出文件路径及文件名。
    • –skip-triggers:不导出触发器。

    2.数据备份

    使用mysqldump是可以进行多种不同方案的备份的。

    (1) 全库备份:使用全库备份会将所有数据库中的数据全部备份到同一个sql文件中。

    mysqldump -uroot -proot -h49.235.28.88 -P3306 --all-databases> /usr/local/all.sql
    

    (2) 备份单个数据库:将lxy数据库中的数据备份到sql文件lxy.sql中。

    mysqldump -uroot -proot -h49.235.28.88 -P3306 lxy> /usr/local/lxy.sql
    

    (3) 备份lxy数据库中的users表到user_test.sql文件。

    mysqldump -uroot -proot -h49.235.28.88 -P3306 lxy users> /usr/local/user_test.sql
    

    (4) 只备份lxy数据库的表结构,不备份数据到lxy1.sql文件中。

    mysqldump -uroot -proot -h49.235.28.88 -P3306 lxy -d> /usr/local/lxy1.sql
    

    (5) 备份lxy数据库的表结构和存储过程,不备份数据到lxy2.sql中。

    mysqldump -uroot -proot -h49.235.28.88 -P3306 lxy -d -R> /usr/local/lxy2.sql
    

    (6) 不备份表结构,只备份数据到lxy3.sql。

    mysqldump -uroot -proot -h49.235.28.88 -P3306 lxy -t> /usr/local/lxy3.sql
    

    3.数据恢复

    3.1表级恢复

    (1) 登录mysql,选择对应的数据库,然后设置编码。

    (2) 使用source命令导入备份数据。

    source /usr/local/all.sql
    

    3.2单库恢复

    (1) 登录Mysql,删除要恢复的旧数据库。

    (2) 使用source命令导入备份数据。

    3.3全库恢复

    (1) 退出mysql,使用mysql命令恢复数据。

    mysql < /usr/local/all.sql -p
    

    然后在控制台输入密码,密码不会显示别以为没有输入成功。

    4.mysqldump全量备份 + mysqlbinlog增量备份

    使用mysqldump进行数据备份会存在一个问题:恢复数据时会丢失掉从备份点开始的更新数据,所以我们需要结合mysqlbinlog进行二进制日志增量备份,首先修改/etc/my.cnf文件,在[mysqld]下启用二进制日志:

    log_bin=mysql-bin
    

    开启二进制日志,数据库的任何更新操作都会记录到二进制日志中。接下来看下mysqldump全量备份 + mysqlbinlog增量备份如何进行操作:

    首先进行全量备份,添加–flush-logs参数生成新的二进制日志文件:

    mysqldump --single-transaction --flush-logs --master-data=2 > /usr/local/all1.sql
    

    所以说实际上备份有两个文件:mysqldump全量备份生成的/usr/local/all1.sql以及二进制日志文件/var/lib/mysql/mysql-bin.000003文件。所以恢复数据时,我们需要分成两部分去进行恢复数据:

    先恢复全量备份的数据:

    mysql < /usr/local/all1.sql -p
    

    然后输入密码确认恢复数据。

    然后恢复增量备份:

    mysqlbinlog /var/lib/mysql/mysql-bin.000003 | mysql -p
    

    这样就可以将数据恢复到恢复点时的数据。而且mysqlbinlog可以通过时间间隔来精确地恢复某个时刻的数据,我们看看bonlog几个可传参数:

    • –start-datetime:从某个时间点开始恢复数据
    • –stop-datetime:恢复截止到某个时间内的数据
    • –start-position:开始恢复数据的位置信息,位置信息可以从日志文件的log_pos中获取。
    • –end-position:截止恢复数据的位置信息,位置信息可以从日志文件的log_pos中获取。

    比如我们需要恢复2019-01-01到2019-09-09的数据,我们在恢复增量日志时就可以这么书写mysqlbinlog命令:

    mysqlbinlog --start-datetime="2019-01-01 00:00:00" --stop-datetime="2019-09-09 23:59:59" /var/lib/mysql/mysql-bin.000003 | mysql -p
    

    5.备份脚本Demo1

    cronbash:

    #!/bin/bash
    cmd='docker exec -i mysql-database bash /home/mybackup-test.sh'
    eval $cmd
    

    mybackup-test.sh:

    #!/bin/bash
    DATE=`date +%Y%m%d%H%M`                #every minute
    DATABASE=database              #database name
    DB_USERNAME=root                       #database username
    DB_PASSWORD=xxxxxx                   #database password
    BACKUP_PATH=/home/backup          #backup pathhome/backup
    mysqldump database > /home/backup/database _${DATE}.sql
    #mysqldump mysql> /home/backup/mysql_${DATE}.sql
    
  • 相关阅读:
    TypeScript 源码详细解读(3)词法2-标记解析
    TypeScript 源码详细解读(2)词法1-字符处理
    TypeScript 源码详细解读(1)总览
    7年编程语言设计精华总结——写给想创造或正在创造一门新编程语言的同学
    我为什么开发新语言
    CLR值类型和引用类型
    运行时内存模型
    IronPython之基本类型
    .NET 应用程序域?
    .NET程序如何启动?
  • 原文地址:https://www.cnblogs.com/aixing/p/13327214.html
Copyright © 2020-2023  润新知