作者:网赚交流大厅算_817 | 来源:互联网 | 2020-10-01 19:54
可以看到它是ON状态的,表示已开启,如果它是OFF状态的话,在my.cnf中[mysqld]
后添加配置后重启mysql服务来开启。
# my.cnf文件
[mysqld]
log-bin=mysql-bin
server-id=1
2.查看binlog日志
确保开启binlog日之后,可以通过命令来查看binlog日志状态。
# 查看binlog日志的目录show master status;
# 进入存储binlog日志的文件木了,可以通过这条命令查看详情
mysqlbinlog --base64-output=decode-rows -v mysql-bin.000002;
# 将binlog日志转为txt导出
mysqlbinlog --base64-output=decode-rows -v mysql-bin.000002 > sql.txt
3.恢复数据
binlog日志恢复数据的话,常用的有命令行恢复,或者是把binlog日志拷贝出来,用读取binlog的工具来转成.sql文件,然后把里面的需要用到的sql都复制出来然后再跑一遍,这里主要讲的是命令行恢复的方法。
命令行恢复主要是通过排查binlog日志,确认要恢复的起始点和结束点后,输入命令进行恢复。或者是预估一下自己误操作失误的时间,通过一个时间段来恢复数据。
# 通过起始点和结束点恢复
mysqlbinlog --start-position="582" --stop-position="9414" mysql-bin.000002 | mysql -uroot -proot;
# 通过起始时间和结束时间来恢复,传入的时间可以是一个yyyy-MM-dd HH:mm:ss 的时间格式,也可以是一个时间戳
mysqlbinlog --start-datetime="2020-9-1 8:25:04" --stop-datetime="2020-9-1 20:00:00" mysql-bin.000002 | mysql -uroot -proot
可以看到,在输入恢复命令后,我清空的数据库数据又回来了。
4.问题
binlog日志虽然可以恢复数据,但是也存在问题,当binlog日志在不断增大后,会进行自动删除,那就导致已经删除的那部分日志的数据就恢复不了了。
不过binlog日志的大小和保存时间都是在可以在mysql中进行设置的。不过还是推荐做好每日的备份,这样可保万无一失。
# 设置文件大小,单位是字节,下面换算是100Mset global max_binlog_size=104857600;
# 设置文件保存天数,下面是保存7天,默认值为0,表示"没有自动删除"set global expire_logs_days = 7;
每日备份
对于线上环境来说,做好每日备份和binlog一起用才是王道。线上一般都是部署在linux上的,所以这里就简单列一下linux的定时备份方法。
1.检查是否安装定时任务,安装crontab
yum install crontabs
2.设置定时任务
/var/spool/cron/root 此文件为crontab定时任务,可通过crontab -e
或者直接修改此文件修改.
crontab -l
查看定时任务.
3.创建一个shell脚本
touch xxx.sh
mysqldump -uroot -p"密码" 数据库名 > /mysql/person_`date +%Y%m%d`.sql
4.修改文件权限
chmod 777 xxx.sh
5.打开定时任务文件
crontab -e
每天凌晨2点执行
00 2 * * * /xxx.sh
完结!
想了解更多编程学习,敬请关注php培训栏目!
以上就是悲伤的故事,当不小心删了线上的数据库的详细内容,更多请关注 第一PHP社区 其它相关文章!