MySQL日志
开启bin-log日志
// vim 打开 mysql 配置文件
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
找到 以下两个配置项 用x删除'#'号(单个)dd(删除当前行)
log_bin的地址记住
server-id = 123456 log_bin = /var/lib/mysql/mysql-bin 把注释打开 改完后 保存推出
重启
mysql sudo service mysql restart 进入 cd
logbin的地址 ls查询当前目录
cd /var/lib/ #修改 mysql权限 #sudo chmod 777 mysql 查看bin-log日志: mysql>
show binary logs;
进入 cd
logbin的地址 ls查询当前目录
cd /var/lib/mysql ls 查看是否存在mysql日志文件 mysql>reset master;
清空所有的bin-log日志
执行查看bin-log日志 备份数据: mysqldump -uroot -pwei test -l -F '/tmp/test.sql'
其中:-F即flush logs,可以重新生成新的日志文件,当然包括log-bin日志
数据库的恢复
删库不一定非得跑路,在跑路前你需要做的是数据恢复
前提是开启了bin-log日志,并定期备份
以下模拟了一次删库和数据恢复的过程
-- 刷新 日志 mysql>
reset master
; Query OK, 0 rows affected (0.39 sec) mysql> create database ops; Query OK, 1 row affected (0.28 sec) mysql> use ops; Database changed create table customers( id int not null auto_increment, name char(20) not null, age int not null, primary key(id) )engine=InnoDB; insert into customers values(1,"wangbo","24"),(2,"guohui","22"),(3,"zhangheng","27"); mysql> select * from customers; +----+-----------+-----+ | id | name | age | +----+-----------+-----+ | 1 | wangbo | 24 | | 2 | guohui | 22 | | 3 | zhangheng | 27 | +----+-----------+-----+ 3 rows in set (0.00 sec) -- (2)
现在进行全备份 mysqldump -uroot -p -B -F -R -x --master-data=2 ops >/home/yc/ops.sql
----------------- 参数说明: -B:指定数据库 -F:刷新日志 -R:备份存储过程等 -x:锁表 --master-data:在备份语句里添加CHANGE MASTER语句以及binlog文件及位置点信息 -- 再
添加新的数据
insert into customers values(4,"liupeng","21"),(5,"xiaoda","31"),(6,"fuaiai","26"); mysql> select * from customers; +----+-----------+-----+ | id | name | age | +----+-----------+-----+ | 1 | wangbo | 24 | | 2 | guohui | 22 | | 3 | zhangheng | 27 | | 4 | liupeng | 21 | | 5 | xiaoda | 31 | | 6 | fuaiai | 26 | +----+-----------+-----+ 6 rows in set (0.00 sec) -- (4)此时
误操作,删除了test数据库
drop database ops; mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | python4 | | sys | | wx | +--------------------+ 6 rows in set (0.00 sec) 将
binlog文件导出sql文件,并 vi 编辑它删除其中的drop语句
[root@vm-002 backup]# mysqlbinlog -d ops /var/lib/mysql/mysql-bin.000002> /home/yc/002bin.sql sudo mysqlbinlog -d ops /var/lib/mysql/mysql-bin.000002> /home/yc/002bin.sql [root@vm-002 backup]# ls 002bin.sql mysql-bin.000002 ops_2016-09-25.sql [root@vm-002 backup]# vi 002bin.sql #
删除里面的drop语句 :qw!保存并退出
-- 首先
导入备份的数据文件
mysql -uroot -p < /home/yc/ops.sql 再导入
删除 drop语句后的 binlog日志文件
mysql -uroot -p ops < /home/yc/002bin.sql