Перейти к содержимому
davidka.net > 💻 🧠 Код 1001 > Базы данных > Миграция с MySQL на MariaDB > ГЛАВА 5: Импорт данных из MySQL

ГЛАВА 5: Импорт данных из MySQL

  • автор:

Цель главы: Восстановить данные из MySQL бэкапа в MariaDB

← Предыдущая глава | Назад к оглавлению | Следующая глава →


1. Подготовка дампа

1.1 Распаковка и проверка

#!/bin/bash
# prepare_dump.sh

DUMP_FILE="/backup/mysql/full_backup_20251101.sql.gz"
WORK_FILE="/tmp/import.sql"

# Распаковать
gunzip -c "$DUMP_FILE" > "$WORK_FILE"

# Проверить размер
ls -lh "$WORK_FILE"

# Проверить содержимое
head -n 50 "$WORK_FILE"

1.2 Очистка DEFINER

# Удалить все DEFINER из дампа
sed -i 's/  ]*//g' /tmp/import.sql

# Или заменить на current user
sed -i 's/  ]*/  /tmp/import.sql

2. Импорт данных

2.1 Базовый импорт

# Простой импорт
mariadb -u root -p < /tmp/import.sql

# С логированием
mariadb -u root -p < /tmp/import.sql 2>&1 | tee import.log

2.2 Импорт с прогрессом

# Установить pv
sudo apt install pv -y

# Импорт с прогресс-баром
pv /tmp/import.sql | mariadb -u root -p

3. Оптимизация импорта

3.1 Временные настройки

-- Перед импортом
SET GLOBAL innodb_flush_log_at_trx_commit = 0;
SET GLOBAL foreign_key_checks = 0;
SET GLOBAL unique_checks = 0;
SET GLOBAL sql_log_bin = 0;

-- Импортировать
SOURCE /tmp/import.sql;

-- Вернуть настройки
SET GLOBAL innodb_flush_log_at_trx_commit = 1;
SET GLOBAL foreign_key_checks = 1;
SET GLOBAL unique_checks = 1;
SET GLOBAL sql_log_bin = 1;

4. Обработка ошибок

4.1 Частые ошибки

ERROR 1227: Access denied

# Решение: удалить DEFINER
sed -i 's/  ]*//g' /tmp/import.sql

ERROR 1215: Cannot add foreign key

SET FOREIGN_KEY_CHECKS=0;
SOURCE /tmp/import.sql;
SET FOREIGN_KEY_CHECKS=1;

5. Проверка целостности

5.1 Проверка баз данных

SELECT 
    table_schema AS 'Database',
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)',
    COUNT(*) AS 'Tables'
FROM information_schema.tables
GROUP BY table_schema
ORDER BY SUM(data_length + index_length) DESC;

5.2 Сравнение с оригиналом

-- Количество записей в ключевых таблицах
SELECT COUNT(*) FROM production_db.users;
SELECT COUNT(*) FROM production_db.orders;

-- Проверка дат
SELECT 
    MIN(created_at) AS oldest,
    MAX(created_at) AS newest
FROM production_db.users;

6. Обновление системных таблиц

6.1 Запуск mariadb-upgrade

# Обновить системные таблицы
sudo mariadb-upgrade -u root -p

# С подробным выводом
sudo mariadb-upgrade -u root -p --verbose

# Принудительно
sudo mariadb-upgrade -u root -p --force

Чек-лист

  • [ ] Дамп подготовлен
  • [ ] DEFINER очищен
  • [ ] Данные импортированы
  • [ ] Ошибок нет
  • [ ] Целостность проверена
  • [ ] mariadb-upgrade выполнен

→ ГЛАВА 6: Миграция пользователей

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *