mysql 提供兩種分段導(dǎo)出數(shù)據(jù)的方法:使用 limit 子句,指定每次查詢返回的記錄數(shù)量,通過遞增 offset 值分段導(dǎo)出。使用 mysqldump 工具,提供靈活的導(dǎo)出選項(xiàng),包括按行數(shù)分段導(dǎo)出和在不同設(shè)備/平臺(tái)上導(dǎo)入。
MySQL 分段導(dǎo)出數(shù)據(jù)的方法
MySQL 導(dǎo)出數(shù)據(jù)時(shí),通常需要導(dǎo)出整個(gè)表的內(nèi)容。但在某些情況下,我們需要分段導(dǎo)出數(shù)據(jù),例如:
導(dǎo)出數(shù)據(jù)量過大,導(dǎo)致導(dǎo)出過程長(zhǎng)時(shí)間占用服務(wù)器資源
需要將數(shù)據(jù)分發(fā)到多個(gè)設(shè)備或平臺(tái)
MySQL 提供了兩種方法來分段導(dǎo)出數(shù)據(jù):
方法一:使用 LIMIT 子句
LIMIT 子句可以指定每次查詢返回的記錄數(shù)量。可以使用它來分段導(dǎo)出數(shù)據(jù):
SELECT * FROM table_name LIMIT 1000 OFFSET 0; SELECT * FROM table_name LIMIT 1000 OFFSET 1000; SELECT * FROM table_name LIMIT 1000 OFFSET 2000; ...
登錄后復(fù)制
OFFSET 子句指定從第幾個(gè)記錄開始查詢。通過遞增 OFFSET 的值,可以分段導(dǎo)出數(shù)據(jù)。
方法二:使用 mysqldump 工具
mysqldump 工具提供了更靈活的導(dǎo)出選項(xiàng),包括分段導(dǎo)出。
mysqldump --opt --single-transaction --flush-logs --skip-tz-utc --column-statistics=0 --quick --order-by-primary --default-character-set=utf8mb4 -u username -p password database_name | split -l 1000000 --numeric-suffixes --additional-suffix=.sql
登錄后復(fù)制
–opt:優(yōu)化導(dǎo)出性能
–single-transaction:在單個(gè)事務(wù)中導(dǎo)出數(shù)據(jù),確保數(shù)據(jù)一致性
–flush-logs:在導(dǎo)出前刷新二進(jìn)制日志
–skip-tz-utc:跳過時(shí)區(qū)轉(zhuǎn)換,避免數(shù)據(jù)不一致
–column-statistics=0:禁用列統(tǒng)計(jì)信息的收集,提高導(dǎo)出速度
–quick:快速導(dǎo)出,不導(dǎo)出表結(jié)構(gòu)
–order-by-primary:按主鍵順序?qū)С鰯?shù)據(jù),有利于數(shù)據(jù)導(dǎo)入
–default-character-set=utf8mb4:設(shè)置默認(rèn)字符集為 UTF-8
-u username -p password:指定 MySQL 用戶名和密碼
database_name:要導(dǎo)出的數(shù)據(jù)庫名稱
split -l 1000000 –numeric-suffixes –additional-suffix=.sql:將導(dǎo)出結(jié)果分割成 100 萬行一段,并添加數(shù)字后綴和 .sql 擴(kuò)展名
使用 mysqldump 工具導(dǎo)出分段數(shù)據(jù)后,可以根據(jù)需要在不同的設(shè)備或平臺(tái)上導(dǎo)入數(shù)據(jù)。