步骤1:修改配置文件
修改my.cnf,添加log_bin=mysql-bin,然后重启服务: Service mysqld restart
步骤2:进行完全备份
执行语句:mysqldump -u root --single-transaction --master-data=2 --databases 数据库名> /mysqlBackup/数据库名_`date +%F`.sql -p
或者
执行语句:mysqldump -u admin --single-transaction --set-gtid-purged=OFF --master-data=2 --databases 数据库名> /home/oper/数据库名.sql -p
PS:在gtid模式下,mysqldump默认会记录GTID_PURGED信息,还会输出以下信息;假如mysqldump时设置了--set-gtid-purged=OFF,则在备份文件中不会打印以上信息;
--single-transaction: 基于此选项能实现热备InnoDB表;因此,不需要同时使用--lock-all-tables;
--master-data=2 记录备份那一时刻的二进制日志的位置,并且注释掉,1是不注释的
--databases 数据库名 指定备份的数据库名
使用--no-create-info
这个选项会跳过创建表(包括结构)和删除表的语句。
使用--skip-add-drop-table
这个选项仅跳过添加DROP TABLE语句,而仍然包括创建表的语句。如果你只需要跳过删除表的语句,可以使用
如果没有设置密码的话就不加-p,有密码的话加-p,然后输入密码。
生成下图文件代表备份成功
步骤3:更新数据
可以使用Navicat创建一个表,然后写几条数据,或者直接在命令行操作创建一个表,
命令:mysql -u 用户名 -p ,use 数据库名
create table 表名(字段名 类型); 创建表
insert into 表名values 数值;(实在不会写,请自行百度MySQL插入语句)
步骤4:查看记录位置
执行命令:cat gfsatellite_2020-07-30.sql |less,查看二进制日志记录位置,下图标红数字记住,下面增量备份的起始位置如下:
结束位置如下:
执行命令:
mysql -u 用户名 -p
show master status;
步骤5:进行增量备份
执行命令:mysqlbinlog --start-position=120 --stop-position=980 /usr/local/mysql/data/mysql-bin.000002 > /backup/gfsatellite_`date +%F_%H`.sql
mysqlbinlog --start-position=188583309 --stop-position=188584451 --skip-gtids=true /home/mysql/mysqldata/binlog/mysql-bin.000007 > /home/oper/dm_0819_2.sql
如果执行命令报以下错误,把my.cnf里面的default-character-set=utf8暂时注释,不用重启服务,备份结束后记得去掉注释就行。
注意:/usr/local/mysql/data为my.cnf里面的datadir的配置,起始位置和终止位置如上述步骤所示;
成功后如下图所示:
步骤6:日志导出
首先在刚才的表中再插入几条数据,然后导出这次操作的日志,然后show master(上面有命令)看下最后操作位置
然后导出日志
mysqlbinlog --start-position=980 --stop-position=1003 /usr/local/mysql/data/mysql-bin.000002 > /backup/gfsatellite.sql
mysqlbinlog --start-position=188583309 --stop-position=188584451 --skip-gtids=true /home/mysql/mysqldata/binlog/mysql-bin.000007 >/backup/gfsatellite.sql
列表如下则操作成功:
步骤7:操作验证
drop database 数据库名;
此时已经没有这个数据库,下面我们依次按照 完全---增量----日志进行数据库恢复
mysql < gfsatellite_2020-07-30.sql -p
mysql < gfsatellite_2020-07-30_11.sql -p
mysql < gfsatellite.sql -p
测试之后,数据库恢复到增加表和增加数据的状态,