实验:基于LVM快照,用cp命令备份数据库,结合binlog恢复

2020-03-31  本文已影响0人  Simon_Ye

备份

第一步:

服务器加读锁,并切换日志;记录二进制日志文件名和 position

MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH LOGS;                 
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> SHOW MASTER LOGS;                 
+--------------------+-----------+
| Log_name           | File_size |
+--------------------+-----------+
| mariadb-bin.000001 |    161342 |
| mariadb-bin.000002 |     23480 |
| mariadb-bin.000003 |    111391 |
| mariadb-bin.000004 |     38801 |
| mariadb-bin.000005 |       245 |
+--------------------+-----------+
5 rows in set (0.00 sec)

第二步:

创建快照:
lvcreate -L 3G -n data_snap -s -p r /dev/mariadb/data

第三步:

解锁服务器:

MariaDB [(none)]> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)

挂载快照逻辑卷(xfs文件系统需要加 nouuid,norecovery):
mount -o nouuid,norecovery /dev/mariadb/data_snap /mnt

第四步:

打包存档快照后内容到备份目录

[root@mariadb-server ~]# tar Jcf /backup/data_backup_all_$(date +%F).tar.xz /mnt/*
[root@mariadb-server ~]# ls /backup/
data_backup_all_2020-03-31.tar.xz

第五步:

cp命令直接备份二进制日志


恢复

第一步:

复制二进制日志文件到需要恢复的主机上:

[root@node6 ~]# scp /mariadb/bin_log/mariadb-bin.000005 172.16.0.16:/root

导出二进制日志文件为sql脚本:

[root@node6 ~]# mysqlbinlog --start-position=245 mariadb-bin.000005 > bin.sql

解压数据库文件:

[root@node6 ~]# tar xvf data_backup_all_2020-03-31.tar.xz -C /var/lib/mysql

第二步:

修改配置文件,让用户暂时无法访问数据库,并启动数据库:

[root@node6 ~]# vim /etc/my.cnf
[mysqld]
# 添加一行禁用网络
skip-networking
[root@node6 ~]# systemctl restart mariadb.service

导入sql脚本:

[root@node6 /var/lib/mysql]# mysql -uroot -pcentos < /root/bin.sql

第三步:

删除skip-networking,并重启服务

[root@node6 ~]# vim /etc/my.cnf
[mysqld]

[root@node6 ~]# systemctl restart mariadb.service
上一篇下一篇

猜你喜欢

热点阅读