数据库备份与恢复(2)

备份方法

备份方法一Mysqldump

sql 复制代码
# 导出
mysqldump [options] > dump.sql
# 导⼊
mysql [options] < backup-file.sql

简单示例

原始数据

sql 复制代码
-- 选择数据库
use testdb
-- 查看所有表
Database changed
show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| t1 |
+------------------+
1 row in set (0.00 sec)
-- 写⼊数据
INSERT INTO `t1` VALUES (109,'bit109'),(110,'bit110'),(111,'bit111');
-- 查看表中的数据
select * from t1;
+-----+--------+
| id | name |
+-----+--------+
| 101 | bit101 |
| 102 | bit102 |
| 103 | bit103 |
| 109 | bit109 |
| 110 | bit110 |
| 111 | bit111 |
+-----+--------+
6 rows in set (0.01 sec)
sql 复制代码
# 导出本地testdb数据库中的所有数据到磁盘
mysqldump -uroot -p -h127.0.0.1 -P3306 -B testdb > /backup/mysql/dump.sql
# 备份⽂件按当前时间命名
mysqldump -uroot -p -h127.0.0.1 -P3306 -B testdb > /backup/mysql/`date
+%Y%m%d`.sql

常用选项

恢复数据

sql 复制代码
# ⽅式⼀:在命令⾏通过mysql客⼾⼯具直接恢复
mysql -uroot -p < /backup/mysql/dump.sql
# ⽅式⼆:登录mysql客⼾端导⼊SQL⽂件
msyql -uroot -p
password:
mysql> source /backup/mysql/dump.sql

备份执行流程

存在问题

1.其他操作处于等待过程,影响其他操作的执行

2.会导致数据不一致的情况

解决一致性问题

收集信息

这几个库是系统自带的,需要排除

查看数据库和表信息
存储过程、触发器和调度事件
sql 复制代码
-- 查看是否存在存储过程
SELECT count(*) FROM information_schema.routines;
+----------+
| count(*) |
+----------+
| 48 |
+----------+
1 row in set (0.01 sec)
-- 查看是否存在触发器、调度事件
SELECT count(*) FROM information_schema.TRIGGERS;
+----------+
| count(*) |
+----------+
| 2 |
+----------+
1 row in set (0.00 sec)
-- 查看是否存在调度事件
SELECT count(*) FROM information_schema.EVENTS;
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.00 sec)
查看字符集
sql 复制代码
-- 查看字符集
show variables like 'character%';
查看限制信息

创建备份用户

生产环境单库备份

单表多表备份

按条件备份

导出表结构

只备份数据

数据导入

1.通过mysql客户工具直接恢复

2.使用source命令导入

3.流式导入

流程

监控恢复进度

复制代码
# 安装PV⼯具
# Debian/Ubuntu 系统
sudo apt-get install pv
# Red Hat/CentOS 系统
sudo yum install pv
# 导⼊并查看进度
pv -L1000 /backup/mysql/dump6.sql | mysql -uroot -p123456 -h192.168.100.237 -
P3306
pv -L1000 /backup/mysql/dump6.sql | mysql -uroot -p123456 -h127.0.0.1 -P3306

备份方法二SQL语句导入导出

特点

语法

mysqlimport

示例

导出

导入

导出导入时字段顺序

使用mysqlimport进行导入

可以看到,如果文件名字和表名字不同,则会导致导入失败,所以我们前面建议导出文件名字和表名字相同

备份方法三物理备份工具-Xtrabackup

介绍

下载

复制代码
# 安装软件源
dpkg -i percona-xtrabackup-80_8.0.35-31-1.jammy_amd64.deb
# 更新源
apt update
# 安装xtrabackup
apt install percona-xtrabackup-80
# 如果提⽰缺少依赖运⾏以下命令安装
apt-get install -f
# 如果之前修改过MySQL的配置⽂件会有以下提⽰,保留当前的配置选择N
Configuration file '/etc/mysql/mysql.cnf'
==> Modified (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer ''s version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
The default action is to keep your current version.
** mysql.cnf (Y/I/N/O/D/Z) [default=N] ? N
# 更新源
apt update
# 重新安装xtrabackup
apt install percona-xtrabackup-80
# 验证是否成功
xtrabackup --version
2024-11-27T18:32:13.374176+08:00 0 [Note] [MY-011825] [Xtrabackup] recognized
server arguments: --datadir=/var/lib/mysql --log_bin=/var/lib/mysql/binlog
xtrabackup version 8.0.35-31 based on MySQL server 8.0.35 Linux (x86_64)
(revision id: 55ec21d7)

全备份

恢复

物理全量备份常用指令

复制代码
# 停⽌MySQL服务
systemctl stop mysql
# 查看MySQL服务是否停⽌
systemctl status mysql
# 移动或删除原来的数据⽬录
mv /var/lib/mysql /var/lib/mysql-old
# 创建数据⽬录同名的空⽬录
mkdir -p /var/lib/mysql
# 准备
xtrabackup --prepare --target-dir=/backup/mysql/full
# 恢复数据
xtrabackup --defaults-file=/etc/mysql/my.cnf \
--copy-back --parallel=2 --target-dir=/backup/mysql/full
# 为恢复⽬录授权
chown -R mysql:mysql /var/lib/mysql
# 启动MySQL服务
systemctl start mysql
# 查看MySQL服务
systemctl status mysql

增量备份

复制代码
# 全备
xtrabackup --defaults-file=/etc/mysql/my.cnf \
--host=localhost --port=3306 --user=backup_user --password=123456 \
--use-memory=1G --parallel=2 \
--backup --target-dir=/backup/mysql/full
# 查看检查点信息
cat /backup/mysql/full/xtrabackup_checkpoints
# 为当前增量备份指定保存备份的⽬录,以及全量备份的⽬录
xtrabackup --host=localhost --port=3306 --user=backup_user --password=123456
\
--backup \
--target-dir=/backup/mysql/inc1 \
--incremental-basedir=/backup/mysql/full
# 查看检查点信息
cat /backup/mysql/xtrabackup-inc1/xtrabackup_checkpoints
# 为当前增量备份指定保存备份的⽬录,以及上⼀次增备的⽬录
xtrabackup --host=localhost --port=3306 --user=backup_user --password=123456 \
--backup \
--target-dir=/backup/mysql/inc2 \
--incremental-basedir=/backup/mysql/inc1
# 查看检查点信息
cat /backup/mysql/xtrabackup-inc2/xtrabackup_checkpoints
复制代码
# 恢复数据
xtrabackup --copy-back --parallel=2 --target-dir=/backup/mysql/full
# 为恢复⽬录授权
chown -R mysql:mysql /var/lib/mysql
# 启动MySQL服务
systemctl start mysql
# 查看MySQL服务
systemctl status mysql
相关推荐
lhrimperial2 小时前
MongoDB核心技术深度解析题
数据库·mongodb
宠..2 小时前
为单选按钮绑定事件
运维·服务器·开发语言·数据库·c++·qt·microsoft
宠..2 小时前
对单选按钮分组
开发语言·数据库·c++·qt·安全·安全性测试
Ashley_Amanda2 小时前
SAP ABAP 开发全攻略:从核心编程到最佳实践
大数据·数据库·sql
黎相思2 小时前
附录:SQLite介绍
数据库·sqlite
毕设十刻2 小时前
基于Vue的新生入学报道管理系统(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
Vic101012 小时前
Redis防重复点击与分布式锁
java·数据库·redis·分布式
罗政3 小时前
mybatis-plus插件解决sql报错:this is incompatible with sql_mode=only_full_group_by ”
数据库·sql·mybatis
leo_qiu_s3 小时前
MERGE INTO语句
数据库