Ubuntu 上 SQLAdmin 更新后的数据迁移指南
一 概念澄清与总体思路
- SQLAdmin通常是用于管理MySQL/MariaDB的第三方 Web 管理工具,更新它并不会自动迁移数据库内容。所谓“迁移”,本质是迁移底层的MySQL/MariaDB 数据(库、表、用户权限等)。常见做法有两类:
- 逻辑迁移:用mysqldump导出为 .sql 并在目标库导入,适合跨版本、跨主机、跨平台。
- 物理迁移:拷贝数据目录(如 /var/lib/mysql)到新位置或新主机,适合同版本原地/同构迁移,停机更短。
- 无论采用哪种方式,务必先做完整备份,并在非生产环境演练验证。
二 方案一 逻辑迁移 mysqldump 通用稳妥
- 步骤
- 备份与校验
- 全量备份:sudo mysqldump --single-transaction --routines --triggers --hex-blob --set-gtid-purged=OFF --all-databases > backup.sql
- 校验一致性:mysqlcheck --all-databases 或抽样查询重要表。
- 传输到目标
- 本机/内网:rsync -avz backup.sql user@target:/path/
- 公网:scp backup.sql user@target:/path/
- 目标库准备
- 安装同版本 MySQL/MariaDB;创建同名库(若使用 --databases 导出可省略逐库建库)。
- 如跨版本升级,建议先在测试环境验证兼容性。
- 导入
- mysql -u root -p < backup.sql
- 验证
- 登录检查:mysql -u root -p -e “SHOW DATABASES; SELECT COUNT(*) FROM mysql.user;”
- 核对表数量、数据量、主外键、触发器/存储过程、视图可执行性。
- 适用场景
- 跨版本、跨主机、跨操作系统;对停机时间不极端敏感;需要可读的 .sql 存档。
三 方案二 物理迁移 同版本数据目录拷贝
- 步骤
- 准备与一致性
- 建议停机窗口:sudo systemctl stop mysql(或 mariadb)
- 备份原目录:sudo cp -a /var/lib/mysql /var/lib/mysql.bak_$(date +%F)
- 拷贝数据
- 新位置:sudo rsync -av /var/lib/mysql/ /new_storage/mysql/
- 配置与权限
- 编辑配置文件(如 /etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/mysql/my.cnf):
- [mysqld] 下设置:datadir = /new_storage/mysql
- 权限:sudo chown -R mysql:mysql /new_storage/mysql
- AppArmor(Ubuntu 常见):编辑 /etc/apparmor.d/usr.sbin.mysqld,将 /var/lib/mysql/** 的权限规则替换为 /new_storage/mysql/**,然后:sudo systemctl reload apparmor
- 启动与验证
- sudo systemctl start mysql
- 登录检查数据完整性与错误日志(/var/log/mysql/error.log)。
- 适用场景
- 同版本、同架构的原地或同机不同磁盘迁移;追求更短停机时间;对文件系统拷贝性能有信心。
四 方案三 使用 SQLAdmin 的导入导出功能
- 步骤
- 在原服务器登录 SQLAdmin,选择目标数据库,执行“导出”生成 .sql 文件并下载/保存。
- 在目标服务器(或新实例)登录 SQLAdmin,先创建同名空库(如有必要),选择“导入”,上传 .sql 并执行。
- 导入后核对对象与数据。
- 适用场景
- 图形化操作、环境受限无法直接使用命令行;小中型库快速迁移。
五 迁移后验证与常见问题处理
- 必做验证
- 版本:mysql -V;服务:sudo systemctl status mysql/mariadb
- 数据:SHOW DATABASES; SELECT COUNT(*) FROM information_schema.tables WHERE table_schema NOT IN (‘information_schema’,‘mysql’,‘performance_schema’,‘sys’);
- 权限:SELECT user,host FROM mysql.user; 业务账号可正常连接。
- 应用:核心业务回归,检查慢查询、主外键、触发器、视图、存储过程。
- 常见问题
- 字符集/排序规则不一致:导出时显式指定 --default-character-set=utf8mb4,导入前确认库/表/连接字符集一致。
- AppArmor/SELinux 拒绝:核对新 datadir 的权限与策略(Ubuntu 常见为 AppArmor,需重载策略)。
- 版本不兼容:跨大版本不建议物理迁移,优先逻辑迁移并在测试环境验证。
- 大表导入慢:关闭自动提交、分批导入、临时调大 innodb_buffer_pool_size,必要时使用 pt-online-schema-change 等工具做在线变更。