Bỏ qua đến nội dung chính
Thứ 2 – Thứ 6: 8:00 – 17:30
Công cụ & Tài liệu

Hướng dẫn MyDumper/MyLoader: backup và restore MySQL an toàn

Hướng dẫn đầy đủ cài MyDumper/MyLoader trên Ubuntu, Debian, AlmaLinux, Rocky, RHEL, CentOS, Fedora và macOS; kèm backup, restore, checksum và xử lý lỗi.

31/10/2026 15 phút đọc Kim Trien
Hướng dẫn MyDumper/MyLoader: backup và restore MySQL an toàn
Nội dung bài viết
  1. MyDumper và MyLoader là gì?
  2. Chuẩn bị trước khi backup
  3. Cài đặt MyDumper/MyLoader chi tiết trên Linux và macOS
  4. Cài trên Ubuntu 20.04, 22.04, 24.04 hoặc 26.04
  5. Cài trên Debian 10, 11, 12 hoặc 13
  6. Cài trên AlmaLinux, Rocky Linux, RHEL và CentOS Stream
  7. Cài trên CentOS 7
  8. Cài trên Fedora
  9. Cài trên macOS bằng Homebrew
  10. Biên dịch từ mã nguồn trên Debian/Ubuntu
  11. Biên dịch từ mã nguồn trên AlmaLinux/Rocky/RHEL/CentOS/Fedora
  12. Kiểm tra nhanh kết nối sau khi cài
  13. Nâng cấp MyDumper/MyLoader
  14. Xử lý lỗi cài đặt thường gặp
  15. Tạo tài khoản backup với quyền tối thiểu
  16. Backup một database bằng MyDumper
  17. Ý nghĩa các tùy chọn quan trọng
  18. Backup một số bảng hoặc nhiều database
  19. Kiểm tra bản backup trước khi restore
  20. Restore an toàn bằng MyLoader
  21. Restore ghi đè database đang có
  22. Kiểm tra sau khi restore
  23. Dùng tệp cấu hình thay cho lệnh dài
  24. Lỗi thường gặp và cách xử lý
  25. Checklist vận hành production
  26. Tài liệu tham khảo

MyDumper và MyLoader giúp sao lưu, khôi phục MySQL/MariaDB theo cơ chế đa luồng, phù hợp khi cơ sở dữ liệu lớn khiến quy trình tuần tự mất nhiều thời gian. Bài viết này đi từ cài đặt, phân quyền, backup, restore đến kiểm tra tính toàn vẹn bằng các lệnh có thể áp dụng ngay.

Tóm tắt nhanh

  • mydumper xuất schema và dữ liệu thành nhiều tệp, cho phép nhiều worker xử lý đồng thời.
  • myloader đọc thư mục backup và nhập dữ liệu song song vào máy chủ đích.
  • Dùng --ask-password khi chạy thủ công; không đặt mật khẩu trực tiếp trong lịch sử lệnh.
  • Ưu tiên restore thử vào database mới, kiểm tra checksum và ứng dụng trước khi thay thế dữ liệu thật.
  • Không dùng --sync-thread-lock-mode=NO_LOCK nếu bạn cần một bản sao lưu nhất quán.

MyDumper và MyLoader là gì?

MyDumper là công cụ backup logic cho MySQL, MariaDB, Percona Server và một số hệ tương thích. Thay vì tạo một tệp SQL lớn theo cách tuần tự, MyDumper có thể chia dữ liệu thành nhiều phần và xuất chúng bằng nhiều luồng. MyLoader là công cụ đi kèm để phục hồi các tệp này theo cách tương tự.

Điểm mạnh

  • Backup và restore đa luồng.
  • Chia bảng lớn thành nhiều chunk.
  • Hỗ trợ gzip, zstd và checksum.
  • Có thể lọc database, bảng hoặc bản ghi.

Điểm cần lưu ý

  • Backup logic vẫn tạo tải đọc trên máy chủ.
  • Cần chọn chế độ khóa phù hợp để giữ tính nhất quán.
  • Restore ghi đè có thể làm mất dữ liệu hiện có.
  • Phải kiểm tra tương thích phiên bản và DEFINER.

Nếu bạn cần hiểu rộng hơn về chiến lược sao lưu website, hãy đọc thêm bài Backup là gì? Hướng dẫn cách backup cho website.

Chuẩn bị trước khi backup

  • Máy chủ còn đủ dung lượng cho thư mục backup và tệp log.
  • Tài khoản backup có đúng quyền cần thiết, không dùng tài khoản ứng dụng nếu không cần.
  • Đã xác định database, bảng, engine lưu trữ và cửa sổ vận hành phù hợp.
  • Đã kiểm tra phiên bản công cụ bằng mydumper --version và myloader --version.
  • Đã thống nhất nơi lưu bản sao thứ hai ngoài máy chủ nguồn.

Cài đặt MyDumper/MyLoader chi tiết trên Linux và macOS

Gói mydumper cài đồng thời cả hai chương trình mydumper và myloader. Nên dùng repository chính thức thay vì gói cũ có sẵn trong repository mặc định của hệ điều hành.

Hệ điều hànhPhiên bản có repository/gói chính thứcTrình quản lý gói
Ubuntu20.04 Focal, 22.04 Jammy, 24.04 Noble, 26.04 ResoluteAPT
Debian10 Buster, 11 Bullseye, 12 Bookworm, 13 TrixieAPT
AlmaLinux, Rocky Linux, RHEL, CentOS StreamChọn repository theo major version 8, 9 hoặc 10DNF
CentOS 7Có gói EL7 nhưng hệ điều hành đã hết vòng đờiYUM
FedoraDùng repository YUM chính thức; nếu release mới chưa có gói, biên dịch từ mã nguồnDNF
macOSCác bản còn được Homebrew hỗ trợHomebrew

Trước khi cài

Không trộn gói từ nhiều nguồn. Nếu máy đã cài MyDumper từ repository mặc định, hãy kiểm tra apt policy mydumper hoặc dnf info mydumper để biết nguồn và phiên bản trước khi chuyển sang repository chính thức.

Cài trên Ubuntu 20.04, 22.04, 24.04 hoặc 26.04

Khối lệnh sau cài công cụ phụ trợ, tạo keyring, tự đọc codename của Ubuntu, thêm repository chính thức rồi cài MyDumper/MyLoader:

sudo apt update
sudo apt install -y ca-certificates wget gnupg

sudo install -d -m 0755 /etc/apt/keyrings

wget -qO- \
  'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x1D357EA7D10C9320371BDD0279EA15C0E82E34BA&exact=on' \
  | sudo tee /etc/apt/keyrings/mydumper.asc >/dev/null

. /etc/os-release
CODENAME="$VERSION_CODENAME"

printf '%s\n' \
  "deb [signed-by=/etc/apt/keyrings/mydumper.asc] https://mydumper.github.io/mydumper/repo/apt/ubuntu $CODENAME main" \
  | sudo tee /etc/apt/sources.list.d/mydumper.list >/dev/null

sudo apt update
sudo apt install -y mydumper

Kiểm tra repository và hai chương trình vừa cài:

apt-cache policy mydumper
command -v mydumper
command -v myloader
mydumper --version
myloader --version

Kết quả apt-cache policy nên hiển thị nguồn mydumper.github.io. Nếu CODENAME trống, xem codename bằng . /etc/os-release && echo "$UBUNTU_CODENAME", sau đó thay thủ công bằng focal, jammy, noble hoặc resolute.

Cài trên Debian 10, 11, 12 hoặc 13

Quy trình Debian gần giống Ubuntu nhưng URL repository dùng nhánh debian:

sudo apt update
sudo apt install -y ca-certificates wget gnupg

sudo install -d -m 0755 /etc/apt/keyrings

wget -qO- \
  'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x1D357EA7D10C9320371BDD0279EA15C0E82E34BA&exact=on' \
  | sudo tee /etc/apt/keyrings/mydumper.asc >/dev/null

. /etc/os-release
CODENAME="$VERSION_CODENAME"

printf '%s\n' \
  "deb [signed-by=/etc/apt/keyrings/mydumper.asc] https://mydumper.github.io/mydumper/repo/apt/debian $CODENAME main" \
  | sudo tee /etc/apt/sources.list.d/mydumper.list >/dev/null

sudo apt update
sudo apt install -y mydumper

Kiểm tra sau khi cài:

apt-cache policy mydumper
mydumper --version
myloader --version

Codename tương ứng là buster cho Debian 10, bullseye cho Debian 11, bookworm cho Debian 12 và trixie cho Debian 13.

Cài trên AlmaLinux, Rocky Linux, RHEL và CentOS Stream

Các hệ điều hành họ Enterprise Linux dùng chung repository YUM. Đoạn lệnh dưới đây tự chọn dnf; nếu máy cũ chỉ có yum thì tự chuyển sang yum.

if command -v dnf >/dev/null 2>&1; then
  PM=dnf
else
  PM=yum
fi

sudo "$PM" install -y ca-certificates wget

wget -O /tmp/GPG-KEY-MyDumper \
  'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x79EA15C0E82E34BA'

sudo rpm --import /tmp/GPG-KEY-MyDumper
rm -f /tmp/GPG-KEY-MyDumper

sudo tee /etc/yum.repos.d/mydumper.repo >/dev/null <<'EOF'
[mydumper]
name=MyDumper
baseurl=https://mydumper.github.io/mydumper/repo/yum/$releasever
enabled=1
gpgcheck=1

[mydumper-testing]
name=MyDumper Testing
baseurl=https://mydumper.github.io/mydumper/repo/yum/$releasever/testing/
enabled=0
gpgcheck=1
EOF

sudo "$PM" clean metadata
sudo "$PM" makecache
sudo "$PM" install -y mydumper

Kiểm tra package, đường dẫn binary và phiên bản:

rpm -qi mydumper
command -v mydumper
command -v myloader
mydumper --version
myloader --version

AlmaLinux/Rocky/RHEL dùng bản nào?

AlmaLinux 8, Rocky 8 và RHEL 8 dùng nhánh EL8; các bản 9 dùng EL9; các bản 10 dùng EL10. Biến $releasever trong DNF/YUM sẽ tự chọn major version tương ứng. CentOS Stream cũng dùng major version của hệ điều hành.

Cài trên CentOS 7

CentOS 7 đã hết vòng đời và không nên dùng cho hệ thống mới. Nếu vẫn phải vận hành máy cũ, dùng repository trên với yum:

sudo yum install -y ca-certificates wget

wget -O /tmp/GPG-KEY-MyDumper \
  'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x79EA15C0E82E34BA'

sudo rpm --import /tmp/GPG-KEY-MyDumper
rm -f /tmp/GPG-KEY-MyDumper

sudo tee /etc/yum.repos.d/mydumper.repo >/dev/null <<'EOF'
[mydumper]
name=MyDumper
baseurl=https://mydumper.github.io/mydumper/repo/yum/$releasever
enabled=1
gpgcheck=1
EOF

sudo yum clean metadata
sudo yum makecache
sudo yum install -y mydumper

mydumper --version
myloader --version

Khuyến nghị

Nên lập kế hoạch nâng CentOS 7 lên AlmaLinux, Rocky Linux, RHEL hoặc CentOS Stream còn được hỗ trợ. Cài được MyDumper không làm cho hệ điều hành hết vòng đời trở nên an toàn.

Cài trên Fedora

Fedora cũng dùng DNF và cấu hình repository giống nhóm RHEL/CentOS:

sudo dnf install -y ca-certificates wget

wget -O /tmp/GPG-KEY-MyDumper \
  'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x79EA15C0E82E34BA'

sudo rpm --import /tmp/GPG-KEY-MyDumper
rm -f /tmp/GPG-KEY-MyDumper

sudo tee /etc/yum.repos.d/mydumper.repo >/dev/null <<'EOF'
[mydumper]
name=MyDumper
baseurl=https://mydumper.github.io/mydumper/repo/yum/$releasever
enabled=1
gpgcheck=1
EOF

sudo dnf makecache
sudo dnf install -y mydumper

dnf info mydumper
mydumper --version
myloader --version

Nếu Fedora vừa phát hành và repository chưa có thư mục tương ứng với $releasever, không tắt kiểm tra GPG và không ép cài RPM EL khác phiên bản. Hãy dùng quy trình biên dịch từ mã nguồn ở phần dưới.

Cài trên macOS bằng Homebrew

brew update
brew install mydumper

command -v mydumper
command -v myloader
mydumper --version
myloader --version

Máy Apple Silicon thường đặt cấu hình trong /opt/homebrew/etc; máy Intel thường dùng /usr/local/etc. Kiểm tra prefix thực tế bằng:

brew --prefix
brew --prefix mydumper

ls -la "$(brew --prefix)/etc/mydumper.cnf" 2>/dev/null || true

Nếu muốn chỉ rõ tệp cấu hình:

mydumper --defaults-file="$(brew --prefix)/etc/mydumper.cnf" --version
myloader --defaults-file="$(brew --prefix)/etc/mydumper.cnf" --version

Biên dịch từ mã nguồn trên Debian/Ubuntu

Dùng cách này khi phiên bản Linux hoặc kiến trúc CPU chưa có package chính thức, hoặc bạn cần build mới nhất:

sudo apt update
sudo apt install -y \
  build-essential cmake git pkg-config \
  libglib2.0-dev libpcre3-dev libssl-dev \
  default-libmysqlclient-dev zlib1g-dev

git clone --depth 1 https://github.com/mydumper/mydumper.git
cd mydumper

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel "$(nproc)"
sudo cmake --install build
sudo ldconfig

/usr/local/bin/mydumper --version
/usr/local/bin/myloader --version

Biên dịch từ mã nguồn trên AlmaLinux/Rocky/RHEL/CentOS/Fedora

sudo dnf install -y \
  cmake gcc gcc-c++ git make pkgconf-pkg-config \
  glib2-devel pcre-devel openssl-devel \
  mariadb-connector-c-devel zlib-devel

git clone --depth 1 https://github.com/mydumper/mydumper.git
cd mydumper

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel "$(nproc)"
sudo cmake --install build
sudo ldconfig

/usr/local/bin/mydumper --version
/usr/local/bin/myloader --version

Nếu hệ điều hành không có mariadb-connector-c-devel, thử package mariadb-devel hoặc mysql-devel tương ứng với thư viện client đang dùng. Chỉ cài một bộ thư viện phát triển MySQL/MariaDB để tránh CMake chọn nhầm.

Kiểm tra nhanh kết nối sau khi cài

Sau khi xác nhận phiên bản, kiểm tra công cụ có đọc được cấu hình và kết nối tới database hay không. --dry-run không thực thi truy vấn backup:

mydumper \
  --host=127.0.0.1 \
  --port=3306 \
  --user=backup_user \
  --ask-password \
  --database=app_db \
  --dry-run \
  --verbose=3

Nếu chưa tạo backup_user, hoàn thành phần phân quyền ngay bên dưới rồi chạy lại lệnh kiểm tra.

Nâng cấp MyDumper/MyLoader

Vì hai chương trình nằm trong cùng package, chỉ cần nâng cấp package mydumper:

# Ubuntu/Debian
sudo apt update
sudo apt install --only-upgrade mydumper

# AlmaLinux/Rocky/RHEL/CentOS/Fedora
sudo dnf upgrade mydumper

# macOS
brew update
brew upgrade mydumper

Sau nâng cấp, luôn kiểm tra lại:

mydumper --version
myloader --version
mydumper --help | head -n 30
myloader --help | head -n 30

Xử lý lỗi cài đặt thường gặp

APT báo NO_PUBKEY hoặc không xác minh được chữ ký?

Xóa và tải lại /etc/apt/keyrings/mydumper.asc bằng đúng lệnh ở trên, kiểm tra file không rỗng với sudo test -s /etc/apt/keyrings/mydumper.asc, rồi chạy lại sudo apt update. Không dùng trusted=yes để bỏ qua kiểm tra chữ ký.

APT báo repository không có Release file hoặc lỗi 404?

Chạy . /etc/os-release && echo "$ID $VERSION_CODENAME". URL phải dùng ubuntu hoặc debian và codename nằm trong bảng hỗ trợ ở đầu phần cài đặt. Nếu bản phân phối chưa được hỗ trợ, dùng quy trình biên dịch từ mã nguồn.

DNF/YUM báo GPG check FAILED?

Tải lại khóa vào /tmp/GPG-KEY-MyDumper, chạy sudo rpm --import /tmp/GPG-KEY-MyDumper, sau đó sudo dnf clean all && sudo dnf makecache. Không đặt gpgcheck=0.

DNF báo No match for argument: mydumper?

Kiểm tra cat /etc/yum.repos.d/mydumper.repo, dnf repolist và rpm -E '%{rhel}'. Nếu Fedora hoặc Enterprise Linux mới chưa có gói tương ứng, biên dịch từ mã nguồn thay vì ép cài RPM của major version khác.

Cài từ mã nguồn xong nhưng báo command not found?

Binary thường nằm trong /usr/local/bin. Chạy trực tiếp /usr/local/bin/mydumper --version. Nếu thành công, thêm /usr/local/bin vào biến PATH của shell.

Đã cài nhưng phiên bản vẫn quá cũ?

Dùng apt-cache policy mydumper hoặc dnf info mydumper để xem package đang đến từ repository nào. Đảm bảo repository mydumper.github.io được bật và có độ ưu tiên phù hợp, sau đó chạy nâng cấp package.

Tạo tài khoản backup với quyền tối thiểu

Ví dụ sau dành cho tài khoản chỉ kết nối từ chính máy chủ database. Hãy đổi tên database và mật khẩu trước khi sử dụng:

CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'MatKhauRatManh';

GRANT FLUSH_TABLES, PROCESS, REPLICATION CLIENT ON *.*
TO 'backup_user'@'localhost';

GRANT SELECT, SHOW VIEW, EVENT, TRIGGER ON `app_db`.*
TO 'backup_user'@'localhost';

GRANT SHOW_ROUTINE ON *.* TO 'backup_user'@'localhost';

Tùy chế độ khóa, loại đối tượng và phiên bản MySQL/MariaDB, tài khoản có thể cần thêm LOCK TABLES, BACKUP_ADMIN hoặc quyền liên quan. Đối chiếu mục User Privileges thay vì cấp ALL PRIVILEGES theo thói quen.

Backup một database bằng MyDumper

Quy trình backup dữ liệu song song bằng mydumper
MyDumper chia dữ liệu thành các phần và xử lý đồng thời bằng nhiều worker.

Lệnh dưới đây tạo một thư mục riêng theo thời gian, backup database app_db bằng 8 luồng, chia bảng lớn thành các chunk khoảng 100.000 dòng, nén zstd và tạo checksum:

BACKUP_ROOT="/srv/backups"
STAMP="$(date +%Y%m%d-%H%M%S)"
BACKUP_DIR="$BACKUP_ROOT/app_db-$STAMP"
LOG_FILE="$BACKUP_ROOT/app_db-$STAMP.mydumper.log"

sudo install -d -m 0750 \
  -o "$(id -u)" \
  -g "$(id -g)" \
  "$BACKUP_ROOT"

mydumper \
  --host=127.0.0.1 \
  --port=3306 \
  --user=backup_user \
  --ask-password \
  --database=app_db \
  --outputdir="$BACKUP_DIR" \
  --threads=8 \
  --rows=100000 \
  --compress=zstd \
  --trx-tables \
  --triggers \
  --events \
  --routines \
  --checksum-all \
  --check-row-count \
  --logfile="$LOG_FILE" \
  --verbose=3

Vì sao logfile phải nằm ngoài BACKUP_DIR?

MyDumper yêu cầu thư mục truyền vào --outputdir phải chưa tồn tại hoặc đang rỗng. Nếu đặt --logfile bên trong thư mục này, MyDumper có thể tạo file log trước khi kiểm tra và dừng với lỗi Directory is not empty (use --clear, --dirty or --merge). Lệnh trên chỉ tạo BACKUP_ROOT; MyDumper tự tạo BACKUP_DIR, còn LOG_FILE được đặt cùng cấp với thư mục backup.

Ý nghĩa các tùy chọn quan trọng

Tùy chọnTác dụngKhi nào điều chỉnh?
--threads=8Số worker chạy song song.Giảm nếu CPU, I/O hoặc replica lag tăng cao.
--rows=100000Chia bảng lớn thành các chunk theo số dòng mục tiêu.Tăng hoặc giảm sau khi đo thời gian và kích thước tệp.
--compress=zstdNén tệp đầu ra bằng zstd.Đảm bảo bản MyDumper đang dùng hỗ trợ zstd.
--trx-tablesTối ưu quy trình khi tất cả bảng cần backup là transactional.Không dùng nếu có MyISAM hoặc bảng không transactional.
--checksum-allTạo checksum cho dữ liệu và các đối tượng liên quan.Nên dùng cho migration hoặc các bản backup sẽ kiểm thử.
--check-row-countĐếm và đối chiếu số dòng trong lúc dump.Tăng độ tin cậy nhưng có thể tạo thêm tải.

Lưu ý về tính nhất quán

MyDumper mặc định tự chọn chế độ đồng bộ phù hợp. Chỉ dùng --trx-tables khi toàn bộ bảng liên quan là transactional. Chế độ --sync-thread-lock-mode=NO_LOCK có thể tạo bản backup không nhất quán; nếu buộc phải hạn chế lock, hãy nghiên cứu SAFE_NO_LOCK và kiểm thử trên hệ thống của bạn.

Backup một số bảng hoặc nhiều database

Chỉ backup hai bảng cụ thể:

mydumper \
  --host=127.0.0.1 \
  --user=backup_user \
  --ask-password \
  --tables-list=app_db.users,app_db.orders \
  --outputdir=/srv/backups/app-db-selected \
  --threads=4

Backup nhiều database, phân tách bằng dấu phẩy:

mydumper \
  --host=127.0.0.1 \
  --user=backup_user \
  --ask-password \
  --database=app_db,analytics_db \
  --outputdir=/srv/backups/multi-db \
  --threads=8

Kiểm tra bản backup trước khi restore

  1. Kiểm tra mã thoát
    Lệnh MyDumper phải kết thúc thành công; với script tự động, dừng quy trình ngay khi mã thoát khác 0.
  2. Đọc log
    Tìm các dòng Critical, Error, bảng bị bỏ qua hoặc lỗi checksum trong mydumper.log.
  3. Kiểm tra tệp metadata
    Thư mục dump phải có metadata và các tệp schema/data tương ứng với phạm vi đã chọn.
  4. Kiểm tra dung lượng
    So sánh với các bản backup gần đây để phát hiện thay đổi bất thường, nhưng không dùng dung lượng làm tiêu chí duy nhất.
  5. Sao chép ra nơi khác
    Không để bản backup duy nhất cùng máy chủ với dữ liệu nguồn.
test -s "$BACKUP_DIR/metadata" || {
  echo "Khong tim thay metadata hop le" >&2
  exit 1
}

du -sh "$BACKUP_DIR"
tail -n 100 "$LOG_FILE"

Restore an toàn bằng MyLoader

Quy trình restore và kiểm tra dữ liệu bằng myloader
Ưu tiên restore vào database mới, kiểm tra đầy đủ rồi mới chuyển ứng dụng sang dữ liệu đã phục hồi.

Cách an toàn nhất là khôi phục vào một database mới. Trước tiên, tạo database đích và cấp quyền cần thiết cho tài khoản restore:

CREATE DATABASE `app_db_restore`
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

GRANT INSERT, CREATE, DROP, REFERENCES, ALTER,
      CREATE VIEW, CREATE ROUTINE, ALTER ROUTINE, SELECT
ON `app_db_restore`.* TO 'restore_user'@'localhost';

Sau đó chạy MyLoader:

myloader \
  --host=127.0.0.1 \
  --port=3306 \
  --user=restore_user \
  --ask-password \
  --directory=/srv/backups/app_db-20261031-020000 \
  --database=app_db_restore \
  --threads=8 \
  --checksum=fail \
  --skip-definer \
  --logfile=/srv/backups/myloader-restore.log \
  --verbose=3

--checksum=fail yêu cầu MyLoader dừng khi checksum không khớp. --skip-definer hữu ích khi user DEFINER của view, trigger hoặc routine không tồn tại trên máy chủ đích; nếu cần giữ nguyên DEFINER, hãy chuẩn bị đúng tài khoản và quyền thay vì dùng tùy chọn này.

Restore ghi đè database đang có

Cảnh báo

--drop-table=DROP xóa bảng hiện có trước khi tạo lại. Hãy dừng ghi dữ liệu từ ứng dụng, tạo thêm một bản backup, kiểm tra đúng máy chủ và đúng database trước khi chạy.

myloader \
  --host=127.0.0.1 \
  --user=restore_user \
  --ask-password \
  --directory=/srv/backups/app_db-20261031-020000 \
  --database=app_db \
  --threads=8 \
  --drop-table=DROP \
  --checksum=fail \
  --verbose=3

Các chế độ hiện hành của --drop-table gồm FAIL, NONE, DROP, TRUNCATE và DELETE. Mặc định là FAIL, phù hợp cho restore thử vì công cụ sẽ không tự ý ghi đè bảng đã tồn tại.

Kiểm tra sau khi restore

  • MyLoader kết thúc với mã thoát 0 và log không có lỗi nghiêm trọng.
  • Checksum được xử lý ở chế độ fail và không báo sai lệch.
  • Số bảng, view, trigger, event và routine khớp với phạm vi backup.
  • Các bảng quan trọng có số dòng và dữ liệu mẫu hợp lý.
  • Ứng dụng chạy smoke test: đăng nhập, đọc/ghi thử, tác vụ nền và báo cáo.
  • Múi giờ, collation, character set và quyền truy cập đúng với môi trường đích.
SELECT COUNT(*) FROM `app_db_restore`.`users`;
SELECT COUNT(*) FROM `app_db_restore`.`orders`;

CHECK TABLE `app_db_restore`.`users`,
            `app_db_restore`.`orders`;

Mẹo

Một quy trình backup chỉ đáng tin khi restore đã được kiểm thử. Nên tự động khôi phục định kỳ vào môi trường tách biệt, chạy kiểm tra dữ liệu và cảnh báo khi thời gian restore vượt ngưỡng vận hành của bạn.

Dùng tệp cấu hình thay cho lệnh dài

MyDumper mặc định đọc /etc/mydumper.cnf. Bạn cũng có thể tạo tệp riêng và truyền bằng --defaults-extra-file. Ví dụ:

[mydumper]
host = 127.0.0.1
port = 3306
user = backup_user
database = app_db
threads = 8
rows = 100000
compress = zstd
trx-tables = true
triggers = true
events = true
routines = true
checksum-all = true

[myloader]
host = 127.0.0.1
port = 3306
user = restore_user
threads = 8
checksum = fail
chmod 600 /etc/mydumper-app.cnf

mydumper \
  --defaults-extra-file=/etc/mydumper-app.cnf \
  --ask-password \
  --outputdir=/srv/backups/app-db-manual

Với tác vụ tự động, hãy lấy mật khẩu từ cơ chế quản lý secret của hệ thống. Nếu buộc phải đặt thông tin đăng nhập trong tệp cấu hình, giới hạn owner và quyền đọc ở mức tối thiểu; tuyệt đối không commit tệp đó vào Git.

Lỗi thường gặp và cách xử lý

MyDumper báo thiếu quyền FLUSH, PROCESS hoặc LOCK TABLES?

Kiểm tra chế độ khóa đang dùng và cấp đúng quyền theo tài liệu chính thức. Không vội chuyển sang NO_LOCK, vì lựa chọn này có thể đánh đổi tính nhất quán của bản backup.

Restore lỗi do DEFINER không tồn tại?

Dùng --skip-definer nếu việc loại bỏ DEFINER phù hợp với môi trường đích, hoặc tạo user/role tương ứng và cấp quyền cần thiết để giữ nguyên định nghĩa.

Backup làm tăng tải I/O hoặc replica lag?

Giảm --threads, điều chỉnh kích thước chunk, chuyển lịch chạy sang giờ thấp điểm và theo dõi CPU, I/O, Threads_running cùng độ trễ replica trong khi thử nghiệm.

MyLoader gặp bảng đã tồn tại?

Mặc định --drop-table=FAIL sẽ dừng để bảo vệ dữ liệu. Nếu chủ đích là ghi đè, xác nhận đúng database, tạo bản backup bổ sung rồi mới dùng --drop-table=DROP, TRUNCATE hoặc DELETE theo nhu cầu.

Nên chọn bao nhiêu threads?

Không có một con số đúng cho mọi hệ thống. Bắt đầu với mặc định 4, tăng dần khi CPU, I/O và database đích còn dư năng lực. Nhiều luồng hơn không luôn đồng nghĩa nhanh hơn.

Checklist vận hành production

  • Dùng tài khoản backup/restore riêng và nguyên tắc quyền tối thiểu.
  • Không truyền mật khẩu trực tiếp bằng --password=... trên dòng lệnh.
  • Mã hóa bản backup khi lưu trữ và khi truyền sang máy khác.
  • Giữ nhiều phiên bản backup, có ít nhất một bản nằm ngoài máy chủ nguồn.
  • Ghi nhận thời gian backup, dung lượng, mã thoát, log và checksum.
  • Restore thử định kỳ; không chờ đến sự cố mới kiểm tra.
  • Thử toàn bộ quy trình trên staging trước khi migration production.
  • Xác định rõ RPO/RTO và đo thời gian khôi phục thực tế.

Tài liệu tham khảo

Cần hỗ trợ backup hoặc migration cơ sở dữ liệu?

Newnet có thể hỗ trợ đánh giá hệ thống, xây dựng quy trình sao lưu và kiểm thử khôi phục phù hợp với hạ tầng của bạn.

Liên hệ Newnet

Yêu cầu tư vấn

Để lại thông tin, Newnet sẽ liên hệ lại với bạn trong thời gian sớm nhất.