• MySQL 备份和恢复


    方案:
    Full backups are necessary, but it is not always convenient to create them. They produce large backup files and take time to generate. They are not optimal in the sense that each successive full backup includes all data, even that part that has not changed since the previous full backup. It is more efficient to make an initial full backup, and then to make incremental backups. The incremental backups are smaller and take less time to produce. The tradeoff is that, at recovery time, you cannot restore your data just by reloading the full backup. You must also process the incremental backups to recover the incremental changes.
     
     
    步骤:
    1,启用bin-log
    关闭数据库,编辑/usr/my.cnf,my.ini,增加配置:
    [mysqld]
    log-bin=mysql-bin
    # server-id=1 # replication时用到
    
    innodb_flush_log_at_trx_commit=1
    
    sync_binlog=1
    
    重启mysql
     
    2,给当前数据库做一个full backup
    首先查看mysql的data目录,看看有没有以mysql-bin.000* 开头的文件,这些都是bin-log,记下当前最大的number号,如:mysql-bin.000005
     
    执行full backup
    shell> mysqldump --single-transaction --flush-logs --master-data=2 
             --all-databases > backup_sunday_1_PM.sql
    执行完之后,目录下多了一个bin-log文件:mysql-bin.000006,因为--flush-logs会让mysql flush,
    --master-data=2会在输出的sql文件中添加下面2行注释,(在replication中,你可以拿上面的.sql去初始化slave数据库,然后告诉slave从master上mysql-bin.000006文件的位置4开始replication;当然,如果你配置好了master,你也可以执行SHOW MASTER STATUS获取这些信息)
    -- Position to start replication or point-in-time recovery from
    -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000006',MASTER_LOG_POS=4; 
    
    • 输出的.sql文件包含mysql-bin.000006之前所有的数据库改变。

    • 在这次full backup之后,所有的数据库改变都将会记录到mysql-bin.000006以及后续number的bin-log中。

    3,定期增量备份
    保存好上面的.sql文件,以后每天使用以下命令做一个增量备份,
    shell> mysqladmin flush-logs
    就会生成mysql-bin.000007文件,当天所有的log都在mysql-bin.000006中,把mysql-bin.000006文件保存好。
    明天再执行上面的命令生成08文件,明天所有的log都07中,把07文件保存好。
     
    4,Recovery
    当有一天,你的数据库服务器down掉了或者磁盘坏了,你需要restore数据库时,先执行上面的.sql文件,然后从mysql-bin.000006文件开始,依次按照序号restore数据即可。
    shell> mysql < backup_sunday_1_PM.sql
    shell> mysqlbinlog mysql-bin.000006 mysql-bin.000007 | mysql
     
    5,查看某个bin-log文件中的sql语句,sql执行时间,postion等信息
    shell> mysqlbinlog mysql-bin.000006 | more
    
    
    shell> mysqlbinlog mysql-bin.000006 > temp.sql
    
    
    # at 199
    
    #141213  3:12:15 server id 1
    use `test`/*!*/;
    SET TIMESTAMP=1418469135/*!*/;
    insert into user_list (name, age) values ('haha', 50)
     
    6,按时间点恢复
    shell> mysqlbinlog --stop-datetime="2012-12-12 12:12:12" mysql-bin.000006 | mysql
    shell> mysqlbinlog --start-datetime="2012-12-12 12:12:12" mysql-bin.000006 | mysql
     
    7,按postion恢复
    shell> mysqlbinlog --stop-position=120 mysql-bin.000006 | mysql
    shell> mysqlbinlog --start-position=100 mysql-bin.000006 | mysql
     
    8,参考资料:
     
    9,
  • 相关阅读:
    第四周JSP作业
    jsp第二次作业
    3.4软件管理与测试作业
    jsp3月3日作业
    课后listview作业
    安卓sql
    activity带数据跳转
    answers
    阿里云ESC无法使用python发送邮件的问题
    Ubuntu 更改时区
  • 原文地址:https://www.cnblogs.com/java-koma/p/4161935.html
Copyright © 2020-2023  润新知