Восстановление поврежденной БД

MSE-Script

Developer
Команда форума
Сообщения
864
Реакции
309
mariadb-dump: Error 1034: Index for table 'tracks_OLD' is corrupt; try to repair it when dumping table `tracks_OLD` at row: 1369951

1694972067699.png


SQL:
show create table tracks;
SQL:
CREATE TABLE `tracks_DD` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `track_h` varchar(255) NOT NULL,
  `meta_title` varchar(255) NOT NULL,
  `meta_description` varchar(300) NOT NULL,
  `meta_keywords` varchar(255) DEFAULT NULL,
  `url` varchar(255) NOT NULL,
  `poster` varchar(255) DEFAULT NULL,
  `album` varchar(255) DEFAULT NULL,
  `album_id` varchar(255) DEFAULT NULL,
  `artist` varchar(255) DEFAULT NULL,
  `artist_id` varchar(255) DEFAULT NULL,
  `year` varchar(4) DEFAULT NULL,
  `video` varchar(255) DEFAULT NULL,
  `description` text DEFAULT NULL,
  `text` text DEFAULT NULL,
  `tid` varchar(255) DEFAULT NULL,
  `filelink` varchar(255) DEFAULT NULL,
  `size` varchar(255) DEFAULT NULL,
  `time` varchar(10) NOT NULL,
  `time_seconds` int(11) DEFAULT NULL,
  `bitrate` varchar(255) DEFAULT NULL,
  `play_count` int(11) DEFAULT 0,
  `genres` varchar(255) DEFAULT NULL,
  `likes` int(11) DEFAULT 0,
  `views` int(11) DEFAULT 0,
  `blocked` tinyint(1) NOT NULL DEFAULT 0,
  `hash` varchar(32) NOT NULL,
  `file_id` varchar(32) DEFAULT NULL,
  `parser_ident` varchar(20) DEFAULT NULL,
  `created_date` timestamp NOT NULL DEFAULT current_timestamp(),
  `views_date` timestamp NOT NULL DEFAULT current_timestamp(),
  `position` int(11) DEFAULT NULL,
  `release_id` int(11) DEFAULT NULL,
  `artist_template` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `url` (`url`),
  UNIQUE KEY `hash` (`hash`),
  KEY `track_d_url` (`url`),
  KEY `track_d_name` (`name`),
  KEY `artist_d_id` (`artist_id`),
  KEY `tracks_d__release_id` (`release_id`),
  KEY `tracks_d__play_count` (`play_count`),
  KEY `tracks_d_year_index` (`year`),
  KEY `tracks_d_file_id_index` (`file_id`),
  KEY `tracks_d_likes_index` (`likes`),
  KEY `tracks_d_views_index` (`views`),
  FULLTEXT KEY `name` (`name`),
  FULLTEXT KEY `artist` (`artist`),
  CONSTRAINT `tracks_d_releases_id_fk` FOREIGN KEY (`release_id`) REFERENCES `releases` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1539195 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

Bash:
#!/bin/bash

# Установка параметров подключения к базе данных
source_host="127.0.0.1"
source_user="music_root"
pass="OCysztRT7G"
source_db="nepsa_db"
source_table="tracks"
target_table="tracks_DD"
target_db="nepsa_db"

if [ "xxx$pass" = "xxx" ]
  then
        pass_cmd=""
  else
        pass_cmd="-p$pass"
fi

# Получение максимального значения автоинкрементного поля
max_id=$(/usr/bin/mariadb -h $source_host -u $source_user $pass_cmd -D $source_db -se "SELECT MAX(id) FROM $source_table")

# Копирование данных
for ((id=1; id<=max_id; id++))
do
    # Вставка строки в целевую таблицу
    /usr/bin/mariadb -h $source_host -u $source_user $pass_cmd -D $target_db -se "INSERT IGNORE INTO \`$target_table\` SELECT * FROM \`$source_table\` WHERE id=$id"
    progress=$(((id / max_id) * 100))
    echo "Скопирован ID $id из $max_id, $progress %"
done
 
Последнее редактирование:
Сверху