MySql 数据库的备份与恢复(二)

一,实时备份

(启用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;

猜你喜欢

转载自blog.csdn.net/ysy910203/article/details/128297402