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
相关推荐
·薯条大王8 分钟前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
Dxy12393102161 小时前
Python 如何使用 MySQL 的事务
python·mysql
ZJH__GO3 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
小小、码农3 小时前
Linux进程控制:从fork到exec,手写一个简易Shell
linux·运维·服务器
不会就选b4 小时前
Linux之进程间通信(二)---模拟进程池
linux·运维·服务器
NeilYuen4 小时前
用UDP实现向DNS服务器请求IP地址
服务器·tcp/ip·udp
沫璃染墨6 小时前
《从零入门Linux系统篇(十五):系统工具篇·六——GDB调试器详解:从程序执行控制到高级调试技巧》
linux·运维·服务器·c语言·c++
xiaoye-duck6 小时前
MySQL 表约束全解:从基础约束到外键关联规则
数据库·mysql
AIgorithmGEEK6 小时前
Linux 环境变量完全指南:从入门到理解底层原理
linux·运维·服务器
迪康Defender7 小时前
从静态存储到动态流转:终端透明加密两种模式实战解析
运维·服务器·网络·数据库·其他