MySQL切换服务器数据迁移记录

老服务器性能不足,计划迁移数据至新服务器

一、查询 MySQL 数据库 / 表数据量大小

1、查询所有数据库的总大小

sql 复制代码
SELECT
  CONCAT(ROUND(SUM(data_length + index_length) / 1024 / 1024, 2), ' MB') AS total_database_size,
  CONCAT(ROUND(SUM(data_length + index_length) / 1024 / 1024 / 1024, 2), ' GB') AS total_database_size_gb
FROM information_schema.TABLES;

2、查询单个数据库的大小

把 your_database 替换成你的库名:

sql 复制代码
SELECT
  table_schema AS database_name,
  CONCAT(ROUND(SUM(data_length + index_length) / 1024 / 1024, 2), ' MB') AS database_size
FROM information_schema.TABLES
WHERE table_schema = 'your_database'
GROUP BY table_schema;

3、查询某个库下所有表的大小(按大小排序)

sql 复制代码
SELECT
  table_name AS 表名,
  CONCAT(ROUND(data_length / 1024 / 1024, 2), ' MB') AS 数据大小,
  CONCAT(ROUND(index_length / 1024 / 1024, 2), ' MB') AS 索引大小,
  CONCAT(ROUND((data_length + index_length) / 1024 / 1024, 2), ' MB') AS 总大小,
  table_rows AS 行数
FROM information_schema.TABLES
WHERE table_schema = 'your_database'  -- 替换成你的库名
ORDER BY (data_length + index_length) DESC;

4、查询所有数据库的大小排名

sql 复制代码
SELECT
  table_schema AS database_name,
  CONCAT(ROUND(SUM(data_length + index_length) / 1024 / 1024, 2), ' MB') AS total_size
FROM information_schema.TABLES
GROUP BY table_schema
ORDER BY SUM(data_length + index_length) DESC;

字段说明

data_length:数据文件大小

index_length:索引文件大小

table_rows:表行数(近似值)

总大小 = 数据大小 + 索引大小

二、备份恢复

1.本地备份恢复

1.1 MySQL 全库导出语句(备份)

sql 复制代码
mysqldump -u用户名 -p 数据库名 > 导出文件路径.sql

1.2 MySQL 全库导入语句(恢复)

sql 复制代码
mysql -u用户名 -p 目标数据库名 < 备份文件路径.sql

2.带编码、防乱码的完整版导出 / 导入

2.1 导出(不乱码、包含结构 + 数据)

sql 复制代码
mysqldump -u用户名 -p --default-character-set=utf8mb4 数据库名 > 备份.sql

2.2 导入

sql 复制代码
mysql -u用户名 -p --default-character-set=utf8mb4 数据库名 < 备份.sql

3.所有数据库备份恢复(整台 MySQL)

3.1 导出

sql 复制代码
mysqldump -u用户名 -p --all-databases > all_databases.sql

3.2导入全部数据库

sql 复制代码
mysql -u用户名 -p < all_databases.sql

4.直接导出到另一台 Linux 服务器

适用场景:

你现在在 服务器 A,要把 MySQL 备份直接发到 服务器 B

4.1 导出

sql 复制代码
mysqldump -uroot -p mydb | ssh root@192.168.1.100 "cat > /backup/mydb_backup.sql"

带压缩的版本(大数据库必备)

数据库大的时候一定要压缩,速度快 10 倍以上:

sql 复制代码
mysqldump -u用户名 -p 数据库名 | gzip | ssh 用户名@另一台IP "cat > /路径/备份.sql.gz"

或者

sql 复制代码
mysqldump -uroot -pAAAAA --all-databases --single-transaction --quick --lock-tables=false --default-character-set=utf8mb4 | gzip | ssh root@10.10.100.42 "cat > /opt/all.sql.gz"

解压命令(备用):

sql 复制代码
gzip -d 备份文件.sql.gz

5 xtrabackup 物理备份迁移

5.1 安装 xtrabackup

powershell 复制代码
1.先安装 Percona 源(必须)
yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
2.启用 xtrabackup 80 仓库
percona-release enable-only tools release
3.安装 xtrabackup 8.0(支持 MySQL 8.0)
yum install -y percona-xtrabackup-80
4.验证是否安装成功
xtrabackup --version
出现版本信息 = 安装成功

5.2 源库 MySQL8.0.20 热备(不停业务)

powershell 复制代码
# 全量备份到/opt/mysql_backup
xtrabackup --user=root --password=VQaRUYH_o5 \
--backup --target-dir=/opt/mysql_backup

# 备份完成必须执行:事务日志预提交(恢复必备)
xtrabackup --prepare --target-dir=/opt/mysql_backup

5.3 打包传到新服务器

powershell 复制代码
# 压缩备份
tar -zcf mysql80_bak.tar.gz /opt/mysql_backup

# 传到新MySQL机器
scp mysql80_bak.tar.gz root@10.10.100.42:/opt/

5.4 目标机器 MySQL8.0.45 恢复步骤

powershell 复制代码
1. 停止 mysql
systemctl stop mysqld
2.清空原有数据目录(重要!提前确认无有用数据)
rm -rf /var/lib/mysql/*
3.解压备份包
tar -zxf /opt/mysql80_bak.tar.gz -C /opt/
4.执行数据恢复
xtrabackup --copy-back --target-dir=/opt/mysql_backup
5.修复权限
chown -R mysql:mysql /var/lib/mysql
chmod -R 700 /var/lib/mysql
6.启动 MySQL
systemctl start mysqld
systemctl enable mysqld

5.5 关键注意点(8.0.20→8.0.45 必看)

大版本一致都是 8.0,物理恢复完全兼容,权限、库表、存储过程、事件全部原样迁移

恢复后root 密码、用户账号全部和原库一模一样,不用重新建用户

迁移完成建议执行一次升级适配:

sql 复制代码
mysql_upgrade -uroot -pAAAA
相关推荐
你想考研啊2 分钟前
mysql数据库导出导入
数据库·mysql·oracle
mounter62514 分钟前
现代 Linux 内存管理的演进与变革:从传统 LRU 到多代架构 MGLRU
linux·服务器·kernel
十年编程老舅1 小时前
Linux DRM:底层逻辑与实践架构
数据库·mysql
The Sheep 20231 小时前
Vue复习
linux·服务器·数据库
源图客2 小时前
Minio配置HTTPS服务
服务器·网络协议·https
修炼室2 小时前
外网环境原生直连校内服务器:基于内网穿透 + SSH 密钥认证的完整实践指南
服务器·ssh·php
Titan20243 小时前
Linux动静态库
linux·服务器·c++
AOwhisky3 小时前
MySQL 学习笔记(第六期):MySQL 备份与恢复
运维·数据库·笔记·学习·mysql·云计算
qq21084629534 小时前
【数据库】TDengine 清理旧数据
数据库·oracle·tdengine
j_xxx404_4 小时前
MySQL表操作硬核解析:从 CREATE TABLE 到磁盘文件、ALTER TABLE 与 DDL 风险
运维·服务器·数据库·c++·mysql·adb·ai