数据库备份、数据库容灾,开启binlog
开启数据库定时备份
-
创建备份目录
mkdir /data/sqldump cd sqldump
-
创建备份的shell脚本
把databaseName换成自己的数据库名
vim databaseName.sh
输入以下内容
mysqldump -uusername -ppassword databaseName > /data/sqldump/DatabaseName_$(date +%Y%m%d_%H%M%S).sql
对备份进行压缩:
mysqldump -uusername -ppassword databaseName | gzip > /data/sqldump/databaseName_$(date +%Y%m%d_%H%M%S).sql.gz
把 username 替换为实际的用户名;
把 password 替换为实际的密码;
把 databaseName 替换为实际的数据库名;
-
添加可执行权限
chmod u+x databaseName.sh
添加可执行权限之后先执行一下,看看脚本有没有错误,能不能正常使用;
./databaseName.sh
-
添加计划任务
crontab -e
输入以下内容
*/1 * * * * /data/sqldump/databaseName.sh
这是core表达式,代表每一分钟执行一次,每一个*依次代表分钟、小时、日期、月份、星期几
-
测试任务是否执行
tail -f /var/log/cron
也可以去对应的文件夹目录下查看有没有生成对应的sql文件
开启binlog
- 查看binlog是否开启的命令:
show variables like 'log_bin';
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ngFcIgxy-1722507810469)(https://i-blog.csdnimg.cn/direct/5999c95464724611bdc851c37fe1cf63.png#pic_center)]
on代表开启了,off表示还未开启
-
修改配置文件
vim /etc/my.cnf
在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 文件的自动清理时间(单位:天)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Mc9Tqoo-1722507810470)(https://i-blog.csdnimg.cn/direct/634510001aa840beac763ce1d377d8f9.png#pic_center)]
binlog-format
: 指定 binlog 的记录格式。常用的有三种:ROW
: 记录每一行的数据变化,数据恢复更精确。STATEMENT
: 记录每一条 SQL 语句,节省空间,但可能有精度问题。MIXED
: 自动在ROW
和STATEMENT
之间切换,基于上下文。
-
重启MySQL
systemctl stop mysqld; systemctl start mysqld;
-
再次查看binlog是否开启,ON表示已开启
show variables like 'log_bin';
-
binlog默认存放的位置
一般存放在/var/lib/mysql下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mdEVFGOy-1722507810471)(https://i-blog.csdnimg.cn/direct/32bfb771f4d64e648347eed8f5732aa3.png#pic_center)]
mysql-bin.000001
:
- 这是一个实际的二进制日志文件。
- 文件名中的
.000001
部分是文件的序号,随着新日志文件的创建,这个序号会递增。 - 二进制日志文件保存了数据库变更的详细信息,可以用于数据恢复、数据复制等。
mysql-bin.index
:
- 这是一个索引文件,列出了当前所有的二进制日志文件。
- 每当创建新的 binlog 文件时,MySQL 会更新这个索引文件。