备份方法
备份方法一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