数据库备份、数据库容灾,开启binlog

开启数据库定时备份
  • 创建备份目录

    mkdir /data/sqldump
    cd sqldump
    
    • 1.
    • 2.
  • 创建备份的shell脚本

    把databaseName换成自己的数据库名

    vim databaseName.sh
    
    • 1.

    输入以下内容

    mysqldump -uusername -ppassword databaseName > /data/sqldump/DatabaseName_$(date +%Y%m%d_%H%M%S).sql
    
    • 1.

    对备份进行压缩:

    mysqldump -uusername -ppassword databaseName | gzip > /data/sqldump/databaseName_$(date +%Y%m%d_%H%M%S).sql.gz
    
    • 1.

    把 username 替换为实际的用户名;

    把 password 替换为实际的密码;

    把 databaseName 替换为实际的数据库名;

  • 添加可执行权限

    chmod u+x databaseName.sh
    
    • 1.

    添加可执行权限之后先执行一下,看看脚本有没有错误,能不能正常使用;

    ./databaseName.sh

  • 添加计划任务

    crontab -e
    
    • 1.

    输入以下内容

    */1 * * * * /data/sqldump/databaseName.sh
    
    • 1.

    这是core表达式,代表每一分钟执行一次,每一个*依次代表分钟、小时、日期、月份、星期几

  • 测试任务是否执行

    tail -f /var/log/cron
    
    • 1.

    也可以去对应的文件夹目录下查看有没有生成对应的sql文件

开启binlog
  • 查看binlog是否开启的命令:
show variables like 'log_bin';
  • 1.

数据库备份、数据库容灾,开启binlog,定时备份_sql

on代表开启了,off表示还未开启

  • 修改配置文件

    vim /etc/my.cnf
    
    • 1.

    在mysqld下面新增

    log-bin=mysql-bin   binlog文件名
    server-id=1         配置唯一id,不配置会导致MySQL无法启动
    binlog_format=ROW   binlog日志格式
    
    可选
    max_binlog_size = 100m  binlog每个日志文件大小
    expire-logs-days = 7    设置 binlog 文件的自动清理时间(单位:天)
    
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.

    数据库备份、数据库容灾,开启binlog,定时备份_mysql_02

    binlog-format: 指定 binlog 的记录格式。常用的有三种:

    • ROW: 记录每一行的数据变化,数据恢复更精确。
    • STATEMENT: 记录每一条 SQL 语句,节省空间,但可能有精度问题。
    • MIXED: 自动在 ROWSTATEMENT 之间切换,基于上下文。
  • 重启MySQL

    systemctl stop mysqld;
    systemctl start mysqld;
    
    • 1.
    • 2.
  • 再次查看binlog是否开启,ON表示已开启

    show variables like 'log_bin';
    
    • 1.
  • binlog默认存放的位置

    一般存放在/var/lib/mysql下

数据库备份、数据库容灾,开启binlog,定时备份_mysql_03

mysql-bin.000001:

  • 这是一个实际的二进制日志文件。
  • 文件名中的 .000001 部分是文件的序号,随着新日志文件的创建,这个序号会递增。
  • 二进制日志文件保存了数据库变更的详细信息,可以用于数据恢复、数据复制等。

mysql-bin.index:

  • 这是一个索引文件,列出了当前所有的二进制日志文件。
  • 每当创建新的 binlog 文件时,MySQL 会更新这个索引文件。