开启 binlog

检查是否已经开启了 binlog:

mysql> show variables like '%log_bin%’;

如果没有,则修改配置文件开启 binlog。
编辑 mysql 配置文件:

sudo vim /etc/my.cnf

添加 binlog 相关配置:

# 开启 binlog
# mysql 5.7 需要指定 server-id (随机指定一个不能和其他集群中机器重名的字符串)
server-id=byc01
log-bin=/var/lib/mysql/mysql-bin

配置完成后,重启 mysql 服务:

sudo systemctl restart mysqld.service 

查看 binlog 状态:

mysql> show variables like '%log_bin%';
+---------------------------------+--------------------------------+
| Variable_name                   | Value                          |
+---------------------------------+--------------------------------+
| log_bin                         | ON                             |
| log_bin_basename                | /var/lib/mysql/mysql-bin       |
| log_bin_index                   | /var/lib/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF                            |
| log_bin_use_v1_row_events       | OFF                            |
| sql_log_bin                     | ON                             |
+---------------------------------+--------------------------------+
6 rows in set (0.00 sec)

查看 binlog 文件:

[tony@kickoff mysql]$ sudo ls -lah | grep mysql-bin
-rw-r-----   1 mysql mysql  154 1月   5 23:34 mysql-bin.000001
-rw-r-----   1 mysql mysql   32 1月   5 23:34 mysql-bin.index

定时全量备份

定时备份脚本:

# 每天备份
now=$(date "+%Y%m%d")
filepath=/path/to/backup/dbname_${now}.sql
/usr/bin/mysqldump -uroot -p'password' dbname --ignore-table=table_name >${filepath}
zip -m ${filepath}.zip ${filepath}

注意 --ignore-table 表示忽略掉的表。
最后 zip 压缩,可以大大节省存储空间。
zip -m 参数表示压缩完成后删除原文件。

linux cron 定时任务:

# 每天凌晨零点半备份 dbname 数据库
30 0 * * * /bin/bash /path/to/scripts/db_backup_daily.sh >> /tmp/db_backup_daily.log

标签: none