温馨提示×

Ubuntu SQLAdmin更新后如何迁移数据

小樊
44
2025-12-31 17:48:42
栏目: 云计算

Ubuntu 上 SQLAdmin 更新后的数据迁移指南

一 概念澄清与总体思路

  • SQLAdmin通常是用于管理MySQL/MariaDB的第三方 Web 管理工具,更新它并不会自动迁移数据库内容。所谓“迁移”,本质是迁移底层的MySQL/MariaDB 数据(库、表、用户权限等)。常见做法有两类:
    • 逻辑迁移:用mysqldump导出为 .sql 并在目标库导入,适合跨版本、跨主机、跨平台。
    • 物理迁移:拷贝数据目录(如 /var/lib/mysql)到新位置或新主机,适合同版本原地/同构迁移,停机更短。
  • 无论采用哪种方式,务必先做完整备份,并在非生产环境演练验证。

二 方案一 逻辑迁移 mysqldump 通用稳妥

  • 步骤
    1. 备份与校验
      • 全量备份:sudo mysqldump --single-transaction --routines --triggers --hex-blob --set-gtid-purged=OFF --all-databases > backup.sql
      • 校验一致性:mysqlcheck --all-databases 或抽样查询重要表。
    2. 传输到目标
      • 本机/内网:rsync -avz backup.sql user@target:/path/
      • 公网:scp backup.sql user@target:/path/
    3. 目标库准备
      • 安装同版本 MySQL/MariaDB;创建同名库(若使用 --databases 导出可省略逐库建库)。
      • 如跨版本升级,建议先在测试环境验证兼容性。
    4. 导入
      • mysql -u root -p < backup.sql
    5. 验证
      • 登录检查:mysql -u root -p -e “SHOW DATABASES; SELECT COUNT(*) FROM mysql.user;”
      • 核对表数量、数据量、主外键、触发器/存储过程、视图可执行性。
  • 适用场景
    • 跨版本、跨主机、跨操作系统;对停机时间不极端敏感;需要可读的 .sql 存档。

三 方案二 物理迁移 同版本数据目录拷贝

  • 步骤
    1. 准备与一致性
      • 建议停机窗口:sudo systemctl stop mysql(或 mariadb)
      • 备份原目录:sudo cp -a /var/lib/mysql /var/lib/mysql.bak_$(date +%F)
    2. 拷贝数据
      • 新位置:sudo rsync -av /var/lib/mysql/ /new_storage/mysql/
    3. 配置与权限
      • 编辑配置文件(如 /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
    4. 启动与验证
      • sudo systemctl start mysql
      • 登录检查数据完整性与错误日志(/var/log/mysql/error.log)。
  • 适用场景
    • 同版本、同架构的原地或同机不同磁盘迁移;追求更短停机时间;对文件系统拷贝性能有信心。

四 方案三 使用 SQLAdmin 的导入导出功能

  • 步骤
    1. 在原服务器登录 SQLAdmin,选择目标数据库,执行“导出”生成 .sql 文件并下载/保存。
    2. 在目标服务器(或新实例)登录 SQLAdmin,先创建同名空库(如有必要),选择“导入”,上传 .sql 并执行。
    3. 导入后核对对象与数据。
  • 适用场景
    • 图形化操作、环境受限无法直接使用命令行;小中型库快速迁移。

五 迁移后验证与常见问题处理

  • 必做验证
    • 版本: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 等工具做在线变更。

0