mysqldump----2019-08-24

       mysqldump备份后,需要在数据库启动时倒入数据,倒入数据后数据库密码将变成备份时所使用的数据库密码,而不是现在所使用的数据库密码。

语法:mysqldump  -h服务器  -u用户  -p密码  数据库名  >备份文件.sql

参数:-A , --all-databases 所有库                                                                                                                         

          database1  数据库名                                                                                                                           

          database2  table1 table2  数据库database2的两个表                                                                 

          -B ,--databases  database1  database2  database3  多个数据库                                                                   

          --single-transaction    innoDB一致性  服务可用性                                                       

          --master-data=1|2  该选项会记录binlog的日志位置与文件名并追加到文件中                     

          --flush-logs  备份之前刷新日志,截断日志

      --master-data  这个选项可以把备份到什么时候的binlog的位置和文件名添加到输出中,mysqldump在导出数据时,当--master-data=1时,就会打印成一个change  master  to命令,后跟位置和文件名,--master-data=2时,会将change  master to命令加上注释。同时--master-data会自动打开--lock-all-tables选项,此时就需要配合--single-transaction选项。(简单来说,--master-data命令是帮我们将备份到什么位置的信息自动写入到master.info文件中,如果不加这个选项,就需要我们自己手动去锁表,查看binlog所备份到的位置和文件名,然后我们通过change  master to命令写入master.info文件中。)

==备份

        #mysqldump  -udumpuser  -pdumppassword  \

        --all-databases  --single-transaction \

        --master-data  --flush-logs \

        > /backup/`data +%F-%H`-mysql.sql

        此时备份的只是现在这个时间段数据库中的数据,之后到数据库损坏的数据需要通过二进制日志来恢复。

        #vim   /backup/xxx-mysql.sql   查看二进制日志截断的位置。

       CHANGE MASTER TO MASTER_LOG_FILE='localhost-bin.000004', MASTER_LOG_POS=154;

        cp  /var/lib/mysql/*bin*   ~     复制二进制日志到当前目录下,若二进制日志过多,也可只复制上边观察到的截断和截断之后的二进制日志。

==恢复(需要启动数据库)

        ①删除损坏数据库的数据和日志或者使用新的数据库,启动数据库修改初始密码。

        mysql  -uroot  -p'newpassword'   < /backup/xxx-mysql.sql

        mysql  -uroot   -p'newpassword'  -e  'flush privileges'

        此时数据库密码已经变成旧密码了。新密码已经登录不上去了。

        ②上述方式恢复时会产生二进制日志,可以通过这种方式避免产生二进制日志。

        在数据库中执行以下命令。

        set  sql_log_bin=0    暂时关闭二进制日志

        source  /backup/xxx-mysql.sql

        set  sql_log_bin=1   开启二进制日志文件

==二进制恢复备份到数据库损坏时候的数据

        mysqlbinlog  localhost-bin.0000004   localhost-bin.0000005   --start-position=154   |               mysql  -udumpuser   -pdumppassword

        此处的日志文件需要把备份之后所产生的文件都要写上。--start-position是之前备份文件中观察到的。此时就恢复到数据库损坏的时候了。

你可能感兴趣的:(mysqldump----2019-08-24)