From 3ceeae97ee73f533f54c67ab9336651203e7e92b Mon Sep 17 00:00:00 2001 From: niexiaorong Date: Thu, 26 Feb 2026 18:38:53 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(=E5=8E=86=E5=8F=B2=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BD=92=E6=A1=A3):=20=E5=A2=9E=E5=8A=A0=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BD=92=E6=A1=A3=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mysql-backup/pt-archiver.sh | 50 +++++++++++++++++++++++++++++++++++++ mysql8/conf/my.cnf | 3 +++ 2 files changed, 53 insertions(+) create mode 100644 mysql-backup/pt-archiver.sh diff --git a/mysql-backup/pt-archiver.sh b/mysql-backup/pt-archiver.sh new file mode 100644 index 0000000..1bca732 --- /dev/null +++ b/mysql-backup/pt-archiver.sh @@ -0,0 +1,50 @@ +#!/bin/bash +set -euo pipefail +#set -x + +# ====== 基础配置 ====== +SRC_HOST=127.0.0.1 +SRC_PORT=3306 +SRC_USER=root +SRC_PASS=xxxx +SRC_DB=maintain +SRC_TABLE=jtt808_position + +DST_HOST=127.0.0.1 +DST_PORT=3306 +DST_USER=root +DST_PASS=xxxx +DST_DB=maintain +DST_TABLE=jtt808_position_history + +# ====== 归档参数 ====== +START_ID=0 +END_ID=100000 +BATCH_SIZE=30000 + +LOG_DIR=/home/docker-compose/opt/pt-archiver +mkdir -p "$LOG_DIR" +LOG_FILE="$LOG_DIR/archive_$(date +%F_%H%M%S).log" + +# ====== 构造 where 条件 ====== +WHERE="id > ${START_ID} AND id <= ${END_ID}" + +# ====== 执行 ====== +docker run --rm -t --network host \ + -e LANG=C.UTF-8 -e PERL_UNICODE=SDA \ + percona/percona-toolkit \ + pt-archiver \ + --source h=$SRC_HOST,P=$SRC_PORT,u=$SRC_USER,p=$SRC_PASS,D=$SRC_DB,t=$SRC_TABLE,L=1,A=utf8mb4 \ + --dest h=$DST_HOST,P=$DST_PORT,u=$DST_USER,p=$DST_PASS,D=$DST_DB,t=$DST_TABLE,L=1,A=utf8mb4 \ + --charset=utf8mb4 \ + --where "$WHERE" \ + --limit $BATCH_SIZE \ + --bulk-insert \ + --nosafe-auto-increment \ + --no-delete \ + --progress 10000 \ + --sleep 1 \ + --statistics \ + 2>&1 | tee -a "$LOG_FILE" + +echo "Archive finished at $(date)" >> "$LOG_FILE" diff --git a/mysql8/conf/my.cnf b/mysql8/conf/my.cnf index 3f1176a..8c6e5eb 100644 --- a/mysql8/conf/my.cnf +++ b/mysql8/conf/my.cnf @@ -4,6 +4,9 @@ [mysqld] +# 开启 LOAD DATA LOCAL INFILE +local_infile = ON + # 不区分大小写 注:mysql8.x创建数据库后不能更改 lower_case_table_names = 1 From c1de2e9a52c36cf4c12559b72c9e0e4ba85596b7 Mon Sep 17 00:00:00 2001 From: niexiaorong Date: Fri, 27 Feb 2026 15:24:28 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=94=B9=E6=88=90md=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mysql-backup/{pt-archiver.sh => pt-archiver.md} | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) rename mysql-backup/{pt-archiver.sh => pt-archiver.md} (70%) diff --git a/mysql-backup/pt-archiver.sh b/mysql-backup/pt-archiver.md similarity index 70% rename from mysql-backup/pt-archiver.sh rename to mysql-backup/pt-archiver.md index 1bca732..694295e 100644 --- a/mysql-backup/pt-archiver.sh +++ b/mysql-backup/pt-archiver.md @@ -1,8 +1,15 @@ +# pt-archiver 数据归档脚本 + +该脚本用于将 MySQL 表中的历史数据从源数据库归档到目标数据库,基于 `percona-toolkit` 的 `pt-archiver` 工具,并以 Docker 方式运行。 + +## 脚本内容 + +```bash #!/bin/bash set -euo pipefail #set -x -# ====== 基础配置 ====== +# ====== 源数据库 ====== SRC_HOST=127.0.0.1 SRC_PORT=3306 SRC_USER=root @@ -10,6 +17,7 @@ SRC_PASS=xxxx SRC_DB=maintain SRC_TABLE=jtt808_position +# ====== 归档目标数据库 ====== DST_HOST=127.0.0.1 DST_PORT=3306 DST_USER=root @@ -17,19 +25,19 @@ DST_PASS=xxxx DST_DB=maintain DST_TABLE=jtt808_position_history -# ====== 归档参数 ====== +# ====== 归档参数:开始ID,结束ID,每次批量归档数量 ====== START_ID=0 END_ID=100000 BATCH_SIZE=30000 -LOG_DIR=/home/docker-compose/opt/pt-archiver +LOG_DIR=/var/log/pt-archiver mkdir -p "$LOG_DIR" LOG_FILE="$LOG_DIR/archive_$(date +%F_%H%M%S).log" # ====== 构造 where 条件 ====== WHERE="id > ${START_ID} AND id <= ${END_ID}" -# ====== 执行 ====== +# ====== 执行归档 ====== docker run --rm -t --network host \ -e LANG=C.UTF-8 -e PERL_UNICODE=SDA \ percona/percona-toolkit \ @@ -48,3 +56,4 @@ docker run --rm -t --network host \ 2>&1 | tee -a "$LOG_FILE" echo "Archive finished at $(date)" >> "$LOG_FILE" +``` \ No newline at end of file