Debian MariaDB数据库迁移方法
导读:Debian 上 MariaDB 迁移实操指南 一 迁移总览与版本选择 迁移常见两类:同机就地替换(MySQL → MariaDB)与跨机迁移(导出 SQL 再导入)。MariaDB 与 MySQL 命令工具通用,迁移以 mysqldum...
Debian 上 MariaDB 迁移实操指南
一 迁移总览与版本选择
- 迁移常见两类:同机就地替换(MySQL → MariaDB)与跨机迁移(导出 SQL 再导入)。MariaDB 与 MySQL 命令工具通用,迁移以 mysqldump 导出/导入为主,适合绝大多数场景。
- 就地替换时建议按版本匹配进行升级,减少不兼容风险:
- MySQL 5.6 → MariaDB 10.0+
- MySQL 5.7 → MariaDB 10.2+
- MySQL 8.0+ → 建议用 mysqldump 逻辑迁移(避免存储引擎/特性差异带来的问题)
- 就地替换完成后,执行 mysql_upgrade 完成系统表升级;跨机迁移则导入后再校验权限与数据一致性。
二 同机就地替换 MySQL 为 MariaDB(Debian)
- 准备与备份
- 全量逻辑备份(含存储过程/触发器/事件,关闭 GTID 信息以减少跨版本问题):
- 仅库结构与数据:
- mysqldump -uroot -p --databases 你的库1 你的库2 --routines --triggers --events --single-transaction --hex-blob --set-gtid-purged=OFF > backup.sql
- 全实例(含用户与权限):
- mysqldump -uroot -p --all-databases --routines --triggers --events --single-transaction --hex-blob --set-gtid-purged=OFF > backup.sql
- 仅库结构与数据:
- 备份配置文件:sudo cp -a /etc/mysql /etc/mysql.bak
- 全量逻辑备份(含存储过程/触发器/事件,关闭 GTID 信息以减少跨版本问题):
- 安装 MariaDB(两种做法)
- 使用发行版仓库(推荐):sudo apt update & & sudo apt install mariadb-server mariadb-client
- 需要更新版本时,先导入 MariaDB 官方仓库,再安装对应版本(以官网工具生成源条目为准)。
- 替换与启动
- 停止旧服务:sudo systemctl stop mysql
- 如采用覆盖安装,安装过程会替换包;安装完成后启动:sudo systemctl start mariadb
- 升级系统表与权限
- 执行升级:sudo mysql_upgrade -u root -p
- 重启:sudo systemctl restart mariadb
- 验证
- 登录检查:mysql -uroot -p -e “SELECT VERSION(); SHOW DATABASES; ”
- 抽样校验表数量/数据量,确认应用可正常连接。
三 跨机迁移或同机换目录的数据迁移
- 导出
- 单库:mysqldump -h 源主机 -u 用户 -p 数据库名 --single-transaction --hex-blob --set-gtid-purged=OFF > dump.sql
- 多库/全库:mysqldump -h 源主机 -u 用户 -p --databases 库1 库2 … 或 --all-databases … > dump.sql
- 传输
- scp dump.sql 目标主机:/tmp/
- 在目标 Debian 主机导入
- 方法 A:mysql -uroot -p < /tmp/dump.sql
- 方法 B:mysql -uroot -p 登录后执行:SOURCE /tmp/dump.sql;
- 字符集与 GTID
- 建议导出时显式指定字符集(如 utf8mb4),并在跨版本导入时关闭 GTID 信息(–set-gtid-purged=OFF),避免目标端报错。
四 配置文件与数据目录迁移要点
- 配置文件
- Debian 上 MariaDB 配置可能分散在多个目录,使用:mariadb --help | grep “Default options” 查看读取顺序;常见位置含 /etc/mysql/ 与 /etc/mysql/mariadb.conf.d/。迁移后按需合并原有 my.cnf 配置项(如 innodb_buffer_pool_size、max_connections、log_error 等)。
- 数据目录
- 确认当前 datadir:mysql -uroot -p -e “SHOW GLOBAL VARIABLES LIKE ‘%datadir%’; ”
- 迁移步骤(示例将 /var/lib/mysql 迁至 /data/mysql):
- 停服务:sudo systemctl stop mariadb
- 备份并迁移:sudo rsync -av /var/lib/mysql/ /data/mysql/
- 备份原目录:sudo mv /var/lib/mysql /var/lib/mysql.bak
- 配置 datadir=/data/mysql(在 /etc/mysql/mariadb.conf.d/50-server.cnf 的 [mysqld] 段)
- 启动:sudo systemctl start mariadb
- 验证:再次执行 SHOW GLOBAL VARIABLES LIKE ‘%datadir%’; 并检查错误日志。
五 常见问题与排错
- root 免密或无法用密码登录
- 检查认证插件:SELECT user,host,plugin FROM mysql.user WHERE user=‘root’;
- 如需密码登录:ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘新密码’; FLUSH PRIVILEGES;
- 如需保持 socket 免密:UPDATE mysql.user SET plugin=‘unix_socket’ WHERE user=‘root’; FLUSH PRIVILEGES; (并在配置中确保加载 auth_socket 插件)。
- 服务启动超时或 AppArmor 拦截
- 检查端口占用:ss -lntp | grep 3306 或 lsof -i:3306
- 视情况处理 AppArmor/旧 SysV 脚本冲突(如禁用冲突脚本或调整 AppArmor 策略),再重启服务。
- 导入时报 GTID 相关错误
- 重新导出时加上:–set-gtid-purged=OFF,再导入目标库。
- 字符集乱码
- 导出与导入统一使用 utf8mb4,并在连接参数中指定字符集。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian MariaDB数据库迁移方法
本文地址: https://pptw.com/jishu/789750.html
