一,实时备份
(启用mysql
服务的binlog
日志实现)
binlog
日志介绍
也叫二进制日志
是MySQL
服务日志文件的一种,
记录在数据库服务器上执行的除查询之外的sql命令,
启用日志能够达到对数据做备份的目的,
搭建MySQL
主从同步存储结构的必要条件 ,
默认MySQL
服务没有启用binlog
日志 。
Binlog
日志管理
1.启用 binlog 日志
启用host50(192.168.88.50)主机的binlog日志文件
host50]# vim /etc/my.cnf
[mysqld]
server_id = 50
log_bin
:wq
host50]# systemctl restart mysqld
host50]# mysql -uroot -p123456
mysql> show master status ; # 查看binlog日志信息
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| host50-bin.000001 | 154 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> system ls /var/lib/mysql/host50* #binlog日志默认存储在数据库目录下
/var/lib/mysql/host50-bin.000001 /var/lib/mysql/host50-bin.index #(记录当前已有的binlog日志文件)
mysql> system cat /var/lib/mysql/host50-bin.index
./host50-bin.000001
自定义日志存放目录和日志文件名
host50]# vim /etc/my.cnf
[mysqld]
server_id = 50
log_bin=/mylog/db50 # 定义 binlog 日志存放的目录
:wq
[root@host50 ~]# mkdir /mylog
[root@host50 ~]# chown mysql /mylog
[root@host50 ~]# setenforce 0
setenforce: SELinux is disabled
[root@host50 ~]# systemctl restart mysqld
[root@host50 ~]# mysql -uroot -p密码
#查看正在使用binlog日志名和偏移量
MySQL> show master status;
+-------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------+----------+--------------+------------------+-------------------+
| db50.000001 | 154 | | | |
+-------------+----------+--------------+------------------+-------------------+
[root@host50 ~]# ls /mylog/
db50.000001 db50.index
[root@host50 ~]# cat /mylog/db50.index
/mylog/db50.000001
例子:
测试 binlog日志 记录的命令类型
-
(日志 记录除查询之外的所有
sql
命令)
mysql> select * from tarena.user;
mysql> desc tarena.user;
# 查看日志名和偏移量
mysql> show master status;
mysql> insert into tarena.user(name) values("boba");
# 查看日志名和偏移量
mysql> show master status;
mysql> insert into tarena.user(name) values("boba");
# 查看日志名和偏移量
mysql> show master status;
2.创建新的binlog
日志文件
-
默认情况下日志文件保存的
sql
命令 让文件容量大于1G
时数据服务 会自动创建新的日志文件 文件编号顺延。 -
也可以手动创建新的
binlog
日志文件
更改binlog日志文件存储容量的大小
mysql> show variables like "%binlog%"; # 执行命令,查找与binlog日至文件容量存储大小相关的变量(max_binlog_size),将这个变量写在配置文件中,就可以更改binlog日至文件存储容量的大小
[root@host50 ~]# vim /etc/my.cnf
[mysqld]
max_binlog_size=500m #binlog日至文件存储容量的大小改为500M
创建新的binlog日志文件的方法
方法一:重启mysql服务
host50]# systemctl restart mysqld # 重启服务
方法二:完全备份后会创建新的日志文件
[root@host50 ~]# mysqldump -uroot -p密码 --flush-logs -B tarena
> /bakdir/tarena.sql
方法3: 数据库管理员root 执行 创建新日志文件的命令
mysql> flush logs;
# 在mysql中 flush logs 操作会生成一个新的binlog文件。
如果在从库执行flush logs 不仅会生成一个新的binlog文件,而且会生成一个新的relaylog文件。
3.binlog
日志相关管理命令
#查看数据库服务器当前已有全部 binlog 日志文件
mysql> show binary logs;
#删除编号之前的所有日志文件
mysql> purge master logs to "db50.000004";
#删除当前所有的日志文件重新创建新日志文件和索引文件
mysql> reset master ;
4.查看日志文件内容
# 方法1 使用系统命令 mysqlbinlog 查看
[root@host50 ~]# mysqlbinlog /mylog/db50.000001
# 方法2 使用数据库命令查看
mysql> show binlog events in "db50.000001" ;
5.使用binlog
日志文件恢复数据
# 命令 : binlog 日志恢复数据
host50]# mysqlbinlog /目录名/日志文件名 | mysql -uroot -p密码
# 例子
# 完全备份 tarena 库 并在完成备份 后 创建新的日志文件
[root@host50 ~]# mysqldump -uroot -p密码 --flush-logs -B tarena > /bakdir/`date +%F`_tarena.sql
[root@host50 ~]# mysql -uroot -p密码
Mysql>show master status' 查看新日志文件名
+-------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------+----------+--------------+------------------+-------------------+
| db50.000002 | 154 | | | |
+-------------+----------+--------------+------------------+-------------------+
# 完全备份后管理员root登陆
[root@host50 ~]# mysql -uroot -p密码
mysql>
# 继续插入新的记录
insert into tarena.user(name,uid)values("a",1111);
insert into tarena.user(name,uid)values("aa",1111);
insert into tarena.user(name,uid)values("aaa",1111);
insert into tarena.user(name,uid)values("ab",1111);
insert into tarena.user(name,uid)values("ac",1111);
# 查看日志文件的偏移量发生了改变
mysql> show master status;
# 拷贝备份文件给 host51
把备份文件拷贝给51
[root@host50 ~]# scp /bakdir/2021-10-18_tarena.sql 192.168.4.51:/root/
把日志文件拷贝给 51
[root@host50 ~]# scp /mylog/db50.000002 192.168.4.51:/root/
## 在 Host51 恢复数据
查看拷贝文件 在 51 本机的位置和名字
[root@host51 ~]# ls /root/*.sql
/root/2021-10-18_tarena.sql
[root@host51 ~]# ls /root/db50*
/root/db50.000002
使用完全备份恢复数据
[root@host51 ~]# mysql -uroot -p123456 < /root/2021-10-18_tarena.sql
使用日志文件恢复数据
[root@host51 ~]# mysqlbinlog /root/db50.000002 | mysql -uroot -p密码
管理员登录后可以看到库和表记录
[root@host51 ~]# mysql -uroot -p密码
Mysql> show databases;