步骤
- 使用grep提取表数据
- 清空表,插入
- 或更新,需造数据
强烈注意:备份数据库,然后在客户端执行一条测试OK,再批量脚本执行
如这里需要恢复musiclib数据库下的artist_relation表
该表插入数据
INSERT INTO musiclib.artist_relation (id, artist_id, track_id, album_id, video_id, long_audio_album_id, long_audio_track_id, artist_type, artist_sort, created_at, updated_at, deleted_at) VALUES(1, 1, 1, NULL, NULL, NULL, NULL, 2, 1, '2023-11-03 19:18:11', '2023-11-03 19:18:11', NULL);
INSERT
# 提取指定表数据
grep 'INSERT INTO `artist_relation` VALUES' artist-20250106_032001.sql > artist_relation_insert.sql
# 清空表数据,但保留表结构(列、索引、约束等)
# 注意备份
TRUNCATE TABLE artist_relation;
# 导入数据
mysql -u root -h 127.0.0.1 -p musiclib < artist_relation_insert.sql
UPDATE
# 提取指定表数据
grep 'INSERT INTO `artist_relation` VALUES' artist-20250106_032001.sql > artist_relation_insert.sql
# 造数据
awk -F ',' '{print "UPDATE artist_relation SET id=" $1 ", artist_id="$2", track_id="$3", album_id="$4 ", video_id="$5 ", long_audio_album_id="$6 ", long_audio_track_id="$7 ", artist_type="$8 ", artist_sort="$9 ", created_at="$10 ", updated_at="$11", deleted_at="$12 " WHERE id="$1";" }' artist_relation_insert.sql > artist_relation_update.sql
sed -i 's/(//g' artist_relation_update.sql
sed -i 's/)//g' artist_relation_update.sql
# 注意备份
# 导入数据
mysql -u root -h 127.0.0.1 -p musiclib < artist_relation_update.sql