Mysql备份数据库

Mysql备份数据库

全量备份

  • 备份

#备份数据库
#mysqldump 的时候会锁住整个库,所以备份是完整的,但会影响数据库的访问,产生卡顿
#备份并压缩数据库
#在运行的时候提醒输入密码
mysqldump -u root -p <database_name> | gzip > backup.sql.gz
#直接写密码到命令中「安全性比较差」
mysqldump -u root -p[password] <database_name> | gzip > backup.sql.gz
  • 恢复

#从压缩文件中恢复数据库
#恢复是先删除原来数据库中的表,然后创建表,再插入数据
gunzip < backup.sql.gz | mysql -u root -p <database_name>

增量备份

  • 步骤:

    • 开启binlog「mysql 8.0 默认开启, 保留时间是30天」

    • 刷新日志「刷新日志会保存日志文件,并开启一个新的日志文件,也就是拷贝新生成日志文件以前的日志文件就可以了」

      -- sql语句
      
      -- 检查binlog是否开启
      SHOW VARIABLES LIKE 'log_bin';
      
      -- 刷新二进制日志(创建新日志文件)
      FLUSH BINARY LOGS;
      
      -- 或使用你的命令(效果类似,但推荐上面的)
      FLUSH LOGS;
      
      -- 显示当前 binlog 文件名称
      SHOW MASTER STATUS;
      
      -- 显示日志文件保存的目录
      SHOW VARIABLES LIKE 'log_bin_basename';
      
      # bash
      # 备份从上一个备份点到最新点的所有 binlog 文件
      # 例如:备份 mysql-bin.000010 到 mysql-bin.000015
      cp /var/lib/mysql/mysql-bin.* /backup/binlog/
    • 恢复数据

      # 只恢复某个数据库的操作
      mysqlbinlog --database=myapp mysql-bin.000002 | mysql -u root -p myap
      
      # 查看日志内容 -v 使用文本显示sql语句
      mysqlbinlog -v binlog.000015
      
      

# Mysql备份数据库

## 全量备份

- 备份

```bash
#备份数据库
#mysqldump 的时候会锁住整个库,所以备份是完整的,但会影响数据库的访问,产生卡顿
#备份并压缩数据库
#在运行的时候提醒输入密码
mysqldump -u root -p <database_name> | gzip > backup.sql.gz
#直接写密码到命令中「安全性比较差」
mysqldump -u root -p[password] <database_name> | gzip > backup.sql.gz

```

- 恢复

```bash
#从压缩文件中恢复数据库
#恢复是先删除原来数据库中的表,然后创建表,再插入数据
gunzip < backup.sql.gz | mysql -u root -p <database_name>
```

## 增量备份

- 步骤:
  - 开启binlog「mysql 8.0 默认开启, 保留时间是30天」
  - 刷新日志「刷新日志会保存日志文件,并开启一个新的日志文件,也就是拷贝新生成日志文件以前的日志文件就可以了」
    ```
    -- sql语句

    -- 检查binlog是否开启
    SHOW VARIABLES LIKE 'log_bin';

    -- 刷新二进制日志(创建新日志文件)
    FLUSH BINARY LOGS;

    -- 或使用你的命令(效果类似,但推荐上面的)
    FLUSH LOGS;

    -- 显示当前 binlog 文件名称
    SHOW MASTER STATUS;

    -- 显示日志文件保存的目录
    SHOW VARIABLES LIKE 'log_bin_basename';

    # bash
    # 备份从上一个备份点到最新点的所有 binlog 文件
    # 例如:备份 mysql-bin.000010 到 mysql-bin.000015
    cp /var/lib/mysql/mysql-bin.* /backup/binlog/
    ```
  - 恢复数据
    ```
    # 只恢复某个数据库的操作
    mysqlbinlog --database=myapp mysql-bin.000002 | mysql -u root -p myap

    # 查看日志内容 -v 使用文本显示sql语句
    mysqlbinlog -v binlog.000015


    ```