• MySQL的备份


    MySQL的备份

    开启MySQL的log_bin

    执行查看mysqllog_bin状态

     

    > show variables like 'log_bin%';
    
    +---------------------------------+--------------------------------+
    
    | Variable_name                   | Value                          |
    
    +---------------------------------+--------------------------------+
    
    | log_bin                         | OFF                             |
    
    | log_bin_basename                |                           |
    
    | log_bin_index                   |                            |
    
    | log_bin_trust_function_creators | OFF                            |
    
    | log_bin_use_v1_row_events       | OFF                            |
    
    +---------------------------------+--------------------------------+

     

    开启log_bin日志

          打开mysql配置文件:

        root@ubuntu:~# vi /etc/mysql/mysql.conf.d/mysqld.cnf

      开启log_bin日志

        server-id               = 1

        log_bin                 = /var/log/mysql/mysql-bin.log

      server-id表示单个结点的id,这里由于只有一个结点,所以可以把id随机指定为一个数,这里将id设置成1。若集群中有多个结点,则id不能相同。

      第二句是指定binlog日志文件的名字为mysql-bin,以及其存储路径。

    重启MySQL:

              service mysql restart

    重新查看log_bin状态:

    > show variables like 'log_bin%';
    
    +---------------------------------+--------------------------------+
    
    | Variable_name                   | Value                          |
    
    +---------------------------------+--------------------------------+
    
    | log_bin                         | ON                             |    # log_bin日志开启
    
    | log_bin_basename                | /var/log/mysql/mysql-bin       |
    
    | log_bin_index                   | /var/log/mysql/mysql-bin.index |
    
    | log_bin_trust_function_creators | OFF                            |
    
    | log_bin_use_v1_row_events       | OFF                            |
    
    +---------------------------------+--------------------------------+

    log_bin日志操作的常用命令

    查看日志文件:

    > show master status;
    
    +------------------+----------+--------------+------------------+-------------------+
    
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    
    +------------------+----------+--------------+------------------+-------------------+
    
    | mysql-bin.000003 |      154 |              |                  |                   |
    
    +------------------+----------+--------------+------------------+-------------------+

    创建新的日志文件:

     

    > flush logs;    # 创建一个新的日志文件用于记录
    
    Query OK, 0 rows affected (0.01 sec)
    
    > show master status;
    
    +------------------+----------+--------------+------------------+-------------------+
    
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    
    +------------------+----------+--------------+------------------+-------------------+
    
    | mysql-bin.000004 |      154 |              |                  |                   |
    
    +------------------+----------+--------------+------------------+-------------------+

     

    查看日志文件个数:

    > show binary logs;
    
    +------------------+-----------+
    
    | Log_name         | File_size |
    
    +------------------+-----------+
    
    | mysql-bin.000001 |       177 |
    
    | mysql-bin.000002 |       177 |
    
    | mysql-bin.000003 |       201 |
    
    | mysql-bin.000004 |       154 |
    
    +------------------+-----------+

    重置日志文件:

    > reset master;    # 重置日志文件后,日志文件恢复为最初的一个
    
    Query OK, 0 rows affected (0.01 sec)
    
    > show binary logs;
    
    +------------------+-----------+
    
    | Log_name         | File_size |
    
    +------------------+-----------+
    
    | mysql-bin.000001 |       154 |
    
    +------------------+-----------+

    MySQL数据的备份与恢复(通过log_bin日志)

      向mydb数据库的stu表中插入数据:

    > insert into stu values(1, '张三'),
    
        -> (2, '李四');
    
    Query OK, 2 rows affected (0.01 sec) Records: 2  Duplicates: 0  Warnings: 0

    查看log_bin日志文件

      因为log_bin日志文件是二进制文件,普通方式打开会乱码,用mysql自带的mysqlbinlog命令打开。重定向到more分页显示。

        root@ubuntu:/var/log/mysql#mysqlbinlog mysql-bin.000001 | more

      解码查看日志文件

        root@ubuntu:/var/log/mysql# mysqlbinlog --base64-output=decode-rows -v mysql-bin.000001    # 日志文件中记录着增删改的操作

    备份mydb数据库:

      root@ubuntu:~# mysqldump -u root -p mydb>mydb.sql

    # 继续增删改操作:
    
    > insert into stu values(3, '王舞');    # 增
    
    Query OK, 1 row affected (0.00 sec)
    
    > update stu set name='张三2' where id=1;    # 改
    
    Query OK, 1 row affected (0.00 sec)
    
    # 误操作删库:
    
    > delete from stu;
    
    Query OK, 3 rows affected (0.00 sec)
    
    # 先通过导入备份数据恢复到最近一次备份的时候的数据:
    
    root@ubuntu:~# mysql -u root -p mydb<mydb.sql    # 恢复最近的备份数据
    
    > select * from stu;    # 恢复了最近的备份数据
    
    +----+--------+
    
    | id | name   |
    
    +----+--------+
    
    |  1 | 张三   |
    
    |  2 | 李四   |
    
    +----+--------+

    然后再备份log_bin日志:

      root@ubuntu:/var/log/mysql# mysqlbinlog --stop-position=882 mysql-bin.000003 | mysql -u root -p    # 备份log_bin日志,停止点在删除前的位置点882

    > select * from stu;    # 数据库备份后执行的增、改操作的内容恢复
    
    +----+---------+
    
    | id | name    |
    
    +----+---------+
    
    |  1 | 张三2   |
    
    |  2 | 李四    |
    
    |  3 | 王舞    |
    
    +----+---------+
  • 相关阅读:
    使用BigQuery分析GitHub上的C#代码
    ASP.NET Core 处理 404 Not Found
    C# 7 局部函数剖析
    调试 ASP.NET Core 2.0 源代码
    Entity Framework Core Like 查询揭秘
    ASP.NET Core Razor 视图组件
    Thread 1 cannot allocate new log引起的宕机事故(转载)
    docker默认网段和主机网段冲突解决
    docker安装异常以及网络问题总结
    max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
  • 原文地址:https://www.cnblogs.com/wgbo/p/10112852.html
Copyright © 2020-2023  润新知