Mysqldump mỗi bảng tệp riêng biệt

Đôi khi chúng tôi muốn kết xuất tất cả cơ sở dữ liệu MySQL. MySQL cung cấp một giải pháp dễ dàng cho vấn đề này

mysqldump -u root -p --all-databases > all_dbs.sql

Tuy nhiên, điều này sẽ đổ mọi thứ vào một tệp. Làm cách nào để kết xuất tất cả cơ sở dữ liệu thành các tệp riêng biệt? . Một kịch bản bash nhỏ

#! /bin/bash

TIMESTAMP=$(date +"%F")
BACKUP_DIR="/backup/$TIMESTAMP"
MYSQL_USER="backup"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD="password"
MYSQLDUMP=/usr/bin/mysqldump

mkdir -p "$BACKUP_DIR/mysql"

databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)"`

for db in $databases; do
  $MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/mysql/$db.gz"
done

Xin lưu ý rằng để thực thi tập lệnh này từ cron, bạn cần lưu trữ mật khẩu trong đó (vì vậy cron sẽ không được nhắc cung cấp mật khẩu). Đó là lý do tại sao, bạn không nên sử dụng tài khoản root. Thay vào đó, chỉ cần tạo một người dùng mới chỉ để sao lưu, với các đặc quyền sau

Axel Schwenke

2010-09-10 07. 53. 34 UTC

liên kết cố định

Bài đăng của steve lefevre
Tôi muốn kết xuất từng bảng mysql thành các tệp riêng biệt.

Tại sao?

Thật đơn giản để tách một kết xuất SQL.
http. //Blog. xl-im. mạng/chỉ mục. php?/archives/10-How to-split-a-MySQL-dump. html

Bài đăng của steve lefevre
Có cách nào để tự động kết xuất từng bảng hiện có vào một
tệp riêng biệt không? . truy vấn
cơ sở dữ liệu, lấy tất cả các tên bảng và kết xuất chúng theo tên?

This is not what you want, because that way you don't get a consistent
snapshot of your data. If you dump all tables at once *and* use the
right mysqldump options (--lock-all-tables or --single-transaction)
then your dump will be consistent. It's much harder [1] to achive the
same with a scripted run of mysqldump for each table.

I suggest you rather dump complete databases (assuming there is no
dependency between databases) or the whole MySQL instance at once.

[1] the idea is to have your script open one connection and run FLUSH
TABLES WITH READ LOCK; then wile holding that connection, run
mysqldump --skip-lock-tables for each table. But you
can't get the effect of --single-transaction that way.


XL

Axel Schwenke

2010-09-14 19. 50. 12 giờ UTC

liên kết cố định

Bài đăng của steve lefevre

Bài đăng của steve lefevre
Tôi muốn kết xuất từng bảng mysql thành các tệp riêng biệt.

Tại sao?

We do nightly dumps with full SQL statements. Our recordset doesn't
change much; most of what happens is INSERT, with some DELETE and
UPDATE. So as you can guess, as time goes on, more and more lines of
our nightly backup file are duplicated in the previous. A very small
proportion is actually different now, from night to night.

Thì sao? .
Normal people take backups as a safety measure against data loss.
Nhưng sau đó, bạn chỉ cần một số bản sao lưu cuối cùng và có thể là một số mẫu
từ một quá khứ xa hơn.

Một kế hoạch điển hình sẽ là. giữ 7 bản sao lưu hàng ngày gần nhất cộng với 4
bản sao lưu Chủ Nhật gần nhất cộng với 12 bản sao lưu đầu tiên của tháng.

Bài đăng của steve lefevre
Tôi đang xem xét các cách sử dụng khác biệt và bản vá để tạo ra một loạt
bản vá luân phiên để giảm . đây chính xác là loại nhiệm vụ mà kiểm soát phiên bản
I thought: this is exactly the kind of task that version control was
được thiết lập cho. Tại sao không sử dụng một công cụ hoàn thiện, tương đối ít lỗi với giao diện
đẹp, thực hiện chính xác những gì tôi muốn, thay vì cố tung
của mình? .
'project'.

Hả?

Nếu bạn đang tìm kiếm một bản sao lưu gia tăng. bật binlog. Sau đó, bạn có thể
lưu ảnh chụp nhanh dữ liệu (vulgo. sao lưu toàn bộ) theo thời gian và đồng bằng
(vulgo. sao lưu gia tăng) bằng cách xóa và lưu trữ binlog.

http. // nhà phát triển. mysql. com/doc/refman/5. 1/vi/phục hồi tại thời điểm. html

Bài đăng của steve lefevre

Thật đơn giản để tách một kết xuất SQL. http. //Blog. xl-im. mạng/chỉ mục. php?/ar=

chives/10-Howto-split-a-MySQL-dump...
Is this the right URL?

Obviously not. And since you seem to read Usenet through Google Groups:
why don't you just *click* the link?

Or try this shortened version: http://bit.ly/9eIpbT


XL

@RoryDonohue đã chỉ ra cho tôi rằng hàm GROUP_CONCAT cần được mở rộng độ dài tối đa. Tôi đã thêm biến phiên group_concat_max_len vào câu trả lời của mình với độ dài tối đa là 10K. Cảm ơn, @RoryDonohue

Thay vì sử dụng tệp lớn này làm một và kiểm tra tệp đó trong git, việc chia nhỏ tệp thành nhiều tệp nhỏ hơn có nghĩa là chỉ bảng đã thay đổi mới được thêm vào cam kết git dẫn đến tải lên nhỏ hơn nhiều

Đoạn mã dưới đây là một tập lệnh bash cho phép bạn xuất, sử dụng mysqldump, tất cả các bảng trong cơ sở dữ liệu MySQL sang các tệp riêng lẻ. Điều này sẽ dẫn đến một tệp cho mỗi bảng MySQL trong cơ sở dữ liệu. Bạn sẽ cần sửa đổi các thuộc tính sau