Root Only

подайте на пропитание, бывшему админу бывшего локалхоста

Menu
  • Администрирование
  • Программирование
  • Монетизация
  • Продвижение
  • Хлам
Menu

Как разбить упакованный дамп базы mysql на упакованные дампы таблиц используя все доступные ядра cpu по максимуму?

А вот как!

Приведённый ниже python-код разбивает дамп базы mysql на несколько дампов таблиц. Нужно это бывает как правило для его параллельного потабличного импорта, так как импорт в варианте с дампом всех таблиц в одном файле выполняется на одном ядре, то есть, в один поток. Исправим-же это досадное недоразумение.

#!/usr/bin/env python

""" mysql dump splitter by table """

import sys
from subprocess import Popen, PIPE

begin_table_tag = (b'-- Table structure for table `',
                   b'-- Temporary table structure f')

with sys.stdin.buffer as IN:
    OUT = None
    FILE = None
    HEAD = b''
    for i in IN:
        if i[0:30] in begin_table_tag:
            TABLE = i.decode().split('`', 2)[1]
            if OUT:
                OUT.communicate()
                FILE.close()
            FILE = open(f"{TABLE}.sql.bz2", 'wb')
            OUT = Popen(['lbzip2','-c'], stdin=PIPE, stdout=FILE)
            OUT.stdin.write(HEAD)
        if OUT:
            OUT.stdin.write(i)
        else:
            HEAD += i
    OUT.communicate()
    FILE.close()

Для корректной работы потребуется утилиты lbzip2, и pv (опционально).

Пример использования:

mkdir z && cd z && pv ../mydump.sql.bz2 | lbzip2 -cd | ../mysqldump-splitter.py

где,

mydump.sql.bz2 — файл дампа mysql, созданный командой mysqldump --add-drop-table --force --complete-insert --single-transaction dbname

mysqldump-splitter.py — приведенный выше код python

z — папка, в которую будут сохранены дампы таблиц.

Но как же импортировать созданные таким образом дампы таблиц в наш mysql-сервер?

Очень просто, импортировать все наши файлы в 16 потоков можно вот так:

for n in *.bz2; do echo "bzcat $n | mysql && rm -v $n"; done | xargs -P16 -I{} bash -c "{}"

Поиск

Метки

adb antiddos bash bubble cache console ddos debian docker eclipse elasticsearch elk ffmpeg fs gentoo glusterfs grafana healthcheck hicam ipcam jquery jscript mail mysql mysqldump nginx nodejs php putty python redirect replication RSS serial socat ssh ssh-agent sysfs systemd tinymce uart usb vim vnc windows

Безопасность

© 2025 Root Only