MySQL备份

MySQL备份

完全备份

  • 冷备:使用cp命令或者tar等命令都可以进行冷备

使用tar命令将数据库目录/var/lib/mysql/*进行备份

shell 复制代码
[root@mysql ~]# systemctl stop mysqld
[root@mysql ~]# tar -zcPf /opt/mysql.tar.gz /var/lib/mysql		#备份失败
[root@mysql ~]# rm -rf /var/lib/mysql							#模拟数据丢失
shell 复制代码
[root@mysql ~]# tar -xPf /opt/mysql.tar.gz						#还原数据
[root@mysql ~]# systemctl start mysqld							#启动mysqld服务
使用SQLyog可以正常连接
  • 逻辑备份
    • mysqldump -h主机 -u用户 -p'密码' [-B 选项] > /路径/xx.sql
    • -A,--all-databases:备份所有数据
    • -B:备份单个库或者多个库
    • 备份单张表时,库名、表名使用空格隔开

备份单张表

  • 备份tedugame.ylgy表至/opt/ylgy.sql
shell 复制代码
 ~]# mysqldump -hlocalhost -uroot -p'123qqq...A'  tedugame ylgy > /opt/ylgy.sql
  • 模拟数据丢失,删除tedugame.ylgy表
shell 复制代码
[root@mysql ~]# mysql -uroot -p123qqq...A
mysql> USE tedugame;								#切换至tedugame库
mysql> SHOW TABLES ;								#查看表
mysql> DROP TABLE tedugame.ylgy;					#删除tedugame.ylgy表
mysql> SHOW TABLES ;								#确认tedugame.ylgy表被删除
+--------------------+
| Tables_in_tedugame |
+--------------------+
| submarine          |
+--------------------+
mysql> EXIT;										#退出数据库
  • 使用/opt/ylgy.sql文件还原
shell 复制代码
[root@mysql ~]# mysql -hlocalhost -uroot -p'123qqq...A' tedugame < /opt/ylgy.sql
[root@mysql ~]# mysql -uroot -p123qqq...A
mysql> USE tedugame;
mysql> SHOW TABLES ;
+--------------------+
| Tables_in_tedugame |
+--------------------+
| submarine          |
| ylgy               |
+--------------------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM tedugame.ylgy;					#查看数据已还原
+------+------+----------+
| id   | name | goldcoin |
+------+------+----------+
|    1 | jack |    10000 |
|    2 | sam  |    10540 |
|    3 | lucy |    88888 |
|    4 | mark |    66666 |
+------+------+----------+
4 rows in set (0.00 sec)

备份单个库

  • 备份tedugame库
shell 复制代码
~]# mysqldump -hlocalhost -uroot -p123qqq...A -B tedugame > /opt/tedugame.sql
  • 模拟数据丢失,删除tedugame库
shell 复制代码
[root@mysql ~]# mysql -uroot -p123qqq...A
mysql> DROP DATABASE tedugame;
mysql> SHOW DATABASES;									
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
mysql> EXIT;
  • 使用/opt/tedugame.sql还原tedugame库
shell 复制代码
[root@mysql ~]# mysql -uroot -p123qqq...A < /opt/tedugame.sql
[root@mysql ~]# mysql -uroot -p123qqq...A 
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| tedugame           |
+--------------------+
mysql> SHOW TABLES FROM tedugame;
+--------------------+
| Tables_in_tedugame |
+--------------------+
| submarine          |
| ylgy               |
+--------------------+
mysql> SELECT * FROM tedugame.submarine;
+------+--------+-------+-----------+
| id   | name   | level | zone      |
+------+--------+-------+-----------+
|    1 | mark   |     1 | Beijing   |
|    2 | sam    |     2 | Shanghai  |
|    3 | PaoPao |     2 | Shanghai  |
|    4 | Lucy   |     3 | Chengdu   |
|    5 | jack   |     4 | Chongqing |
|    6 | wwc    |     6 | Beijing   |
+------+--------+-------+-----------+
6 rows in set (0.00 sec)

mysql> SELECT * FROM tedugame.ylgy;
+------+------+----------+
| id   | name | goldcoin |
+------+------+----------+
|    1 | jack |    10000 |
|    2 | sam  |    10540 |
|    3 | lucy |    88888 |
|    4 | mark |    66666 |
+------+------+----------+
4 rows in set (0.00 sec)

备份所有库

  • 备份所有数据(所有库,所有表)

mysql主机操作

shell 复制代码
[root@mysql ~]# mysqldump -hlocalhost -uroot -p123qqq...A -A > /opt/all.sql
[root@mysql ~]# scp /opt/all.sql root@192.168.8.61:/opt/	#将备份文件拷贝至backup主机

backup主机操作

shell 复制代码
[root@backup ~]# dnf -y install mysql-server mysql
[root@backup ~]# systemctl start mysqld
[root@backup ~]# systemctl enable mysqld
[root@backup ~]# ss -nutlp | grep :3306
[root@backup ~]# mysql < /opt/all.sql					#使用备份文件还原(此刻还没有密码)
[root@backup ~]# systemctl restart mysqld 				#重启服务
[root@backup ~]# mysql -hlocalhost -uroot -p123qqq...A	#连接测试
mysql> SHOW DATABASES ;									#数据已还原
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| tedugame           |
+--------------------+
5 rows in set (0.00 sec)
mysql> SHOW TABLES FROM tedugame;						#查看tedugame库中的表
+--------------------+
| Tables_in_tedugame |
+--------------------+
| submarine          |
| ylgy               |
+--------------------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM tedugame.submarine;				#查看tedugame.submarine中的数据
+------+--------+-------+-----------+
| id   | name   | level | zone      |
+------+--------+-------+-----------+
|    1 | mark   |     1 | Beijing   |
|    2 | sam    |     2 | Shanghai  |
|    3 | PaoPao |     2 | Shanghai  |
|    4 | Lucy   |     3 | Chengdu   |
|    5 | jack   |     4 | Chongqing |
|    6 | wwc    |     6 | Beijing   |
+------+--------+-------+-----------+
6 rows in set (0.01 sec)
mysql> SELECT * FROM tedugame.ylgy;						#查看tedugame.ylgy中的数据
+------+------+----------+
| id   | name | goldcoin |
+------+------+----------+
|    1 | jack |    10000 |
|    2 | sam  |    10540 |
|    3 | lucy |    88888 |
|    4 | mark |    66666 |
+------+------+----------+
4 rows in set (0.01 sec)

xtrabackup完全备份与恢复

  • xtrabackup一款强大的在线热备份工具
  • 备份过程中不锁库表,适合生产环境
  • 由专业组织Percona提供(改进MySQL分支)
主机 IP地址 配额
mysql 192.168.8.60 2G内存1CPU
backup 192.168.8.61 2G内存1CPU
shell 复制代码
[root@mysql ~]# dnf -y install lrzsz

将2024-AI大模型Java全链路工程师环境资料/第四模块/percona-xtrabackup-80-8.0.32-25.1.el8.x86_64.rpm上传至虚拟机mysql的/root

mysql主机操作,安装percona-xtrabackup(libev是依赖包)

shell 复制代码
[root@mysql ~]# dnf -y install libev
[root@mysql ~]# dnf -y localinstall  percona-xtrabackup-80-8.0.32-25.1.el8.x86_64.rpm

完全备份

  • 命令格式

    • xtrabackup --backup --user=用户名 --password=密码 --databases="库名"

      --target-dir=备份文件的存储目录

  • 如有报错请执行:OPTIMIZE TABLE 库名.表名;

在mysql主机将所有数据库进行备份

shell 复制代码
[root@mysql ~]# mkdir /db_all
[root@mysql ~]# xtrabackup --backup --user=root --password="123qqq...A"  \
--target-dir=/db_all

将备份目录拷贝至backup

shell 复制代码
[root@mysql ~]# scp -r /db_all root@192.168.8.61:/

完全恢复

步骤如下

1、systemctl stop mysqld #停止数据库服务

2、rm -rf /var/lib/mysql/* #清空数据库目录

3、xtrabackup --prepare --target-dir=/备份目录 #准备恢复数据

4、xtrabackup --copy-back --target-dir=/备份目录 #恢复数据

5、chown -R mysql:mysql /var/lib/mysql #修改所有者和组

6、systemctl start mysqld #启动服务

在backup主机安装软件包

shell 复制代码
[root@mysql ~]# dnf -y install lrzsz

将2024-AI大模型Java全链路工程师环境资料/第四模块/percona-xtrabackup-80-8.0.32-25.1.el8.x86_64.rpm上传至虚拟机backup的/root

shell 复制代码
[root@backup ~]# dnf -y install libev
[root@backup ~]# dnf -y install percona-xtrabackup-80-8.0.32-25.1.el8.x86_64.rpm 

恢复数据

shell 复制代码
[root@backup ~]# systemctl stop mysqld
[root@backup ~]# rm -rf /var/lib/mysql/*
[root@backup ~]# xtrabackup --prepare --target-dir=/db_all		#准备恢复数据
[root@backup ~]# xtrabackup --copy-back --target-dir=/db_all	#恢复数据
[root@backup ~]# chown -R mysql:mysql /var/lib/mysql

启动服务验证

shell 复制代码
[root@backup ~]# systemctl restart mysqld
[root@backup ~]# mysql -uroot -p123qqq...A
mysql> SHOW DATABASES;								#数据已回复

增量备份

  • 增量备份:备份上次备份后,新产生的数据。
    • 增量备份时,必须先有一次备份,通常是完全备份
    • 例如:周一完全备份 , 周二~周日增量备份
  • 增量备份格式

    • xtrabackup --backup --user=用户名 --password=密码 --target-dir=/增量备份目录 \

      --incremental-basedir=/上一次备份目录

mysql主机新增数据

sql 复制代码
mysql> CREATE DATABASE game;						#创建库
mysql> CREATE TABLE game.t1(id INT,name CHAR(10));	#创建表
mysql> INSERT INTO game.t1 VALUES(1, "zhangsan");	#插入数据

mysql增量备份

shell 复制代码
[root@mysql ~]# mkdir /db_firstinc							#创建备份目录
[root@mysql ~]# xtrabackup --backup  --user=root --password='123qqq...A' \
--target-dir=/db_firstinc --incremental-basedir=/db_all			#增量备份
[root@mysql ~]# scp -r /db_firstinc/ root@192.168.8.61:/	#将增量备份拷贝至备份服务器

增量恢复

  1. xtrabackup --prepare --apply-log-only --target-dir=目标目录

    #将最新的全量备份恢复到指定的目录

  2. xtrabackup --prepare --apply-log-only --target-dir=目标目录 --incremental-dir=增量备份目录1 #指的是第一个增量备份文件所在的目录

  3. systemctl stop mysqld

  4. rm -rf /var/lib/mysql/*

  5. xtrabackup --prepare --target-dir=目标目录 #准备恢复数据

  6. xtrabackup --copy-back --target-dir=目标目录 #恢复数据

  7. chown -R mysql:mysql /var/lib/mysql/

  8. systemctl start mysqld

backup主机恢复操作

shell 复制代码
#将最新的全量备份恢复到指定的目录
[root@backup ~]# xtrabackup --prepare --apply-log-only --target-dir=/db_all   

#将增量备份数据恢复到指定的目录
#--incremental-dir=/db_firstinc指的是第一个增量备份文件所在的目录 
[root@backup ~]# xtrabackup --prepare --apply-log-only --target-dir=/db_all \ --incremental-dir=/db_firstinc
shell 复制代码
[root@backup ~]# systemctl  stop mysqld
[root@backup ~]# rm  -rf  /var/lib/mysql/*
shell 复制代码
[root@backup ~]# xtrabackup --prepare --target-dir=/db_all	 #准备恢复数据
[root@backup ~]# xtrabackup --copy-back --target-dir=/db_all #恢复数据
[root@backup ~]# chown -R  mysql:mysql  /var/lib/mysql/
[root@backup ~]# systemctl  start mysqld

验证

shell 复制代码
[root@backup ~]# mysql -hlocalhost -uroot -p123qqq...A
mysql> SHOW DATABASES ;								#查看库,多出了game
+--------------------+
| Database           |
+--------------------+
| game               |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| tedugame           |
+--------------------+
6 rows in set (0.00 sec)

mysql> SHOW TABLES FROM game;
+----------------+
| Tables_in_game |
+----------------+
| t1             |
+----------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM game.t1;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
+------+----------+
1 row in set (0.00 sec)
相关推荐
15Moonlight1 小时前
06-MySQL基础查询
数据库·c++·mysql·1024程序员节
nzxzn1 小时前
MYSQL第三次作业
数据库·mysql
m0_674031431 小时前
GitHub等平台形成的开源文化正在重也有人
java·windows·mysql
m0_674031432 小时前
GitHub等平台形成的开源文化正在重塑林语堂
windows·mysql·spring
聆风吟º3 小时前
【Spring Boot 报错已解决】别让端口配置卡壳!Spring Boot “Binding to target failed” 报错解决思路
android·java·spring boot
像风一样!9 小时前
MySQL Galera Cluster部署如何实现负载均衡和高可用
数据库·mysql
非专业程序员Ping10 小时前
HarfBuzz概览
android·ios·swift·font
Jeled11 小时前
「高级 Android 架构师成长路线」的第 1 阶段 —— 强化体系与架构思维(Clean Architecture 实战)
android·kotlin·android studio·1024程序员节
周杰伦fans12 小时前
Navicat - 连接 mysql 、 sqlserver 数据库 步骤与问题解决
数据库·mysql·sqlserver
csdn_aspnet12 小时前
如何在 Ubuntu 24.04/22.04/20.04 上安装 MySQL 8.0
linux·mysql·ubuntu