MySQL 数据库备份(binlog + cron 定时全量备份)
开启 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