powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Duplicate entry for key 'PRIMARY'
22 сообщений из 22, страница 1 из 1
Duplicate entry for key 'PRIMARY'
    #39583184
Exec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть mysql сервак рабочий.
Сегодня прихожу.
Duplicate entry '12163578' for key 'PRIMARY'

По регламенту ночью скриптом удались записи по id который авто инкремент.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
mysql> SELECT * FROM alog WHERE id=12163578;
ERROR 1032 (HY000): Can't find record in 'alog'
mysql> SELECT * FROM alog WHERE id=12163577;
Empty set (0,00 sec)

mysql> SELECT * FROM alog WHERE id=12163576;
(выводятся нормальные данные.)
1 row in set (0,00 sec)




mysql> DELETE FROM alog WHERE id=12163578;
Query OK, 0 rows affected (0,00 sec)

mysql> SELECT * FROM alog WHERE id=12163578;
ERROR 1032 (HY000): Can't find record in 'alog'
mysql> REPLACE INTO alog( id, mes, nomer ) VALUES ( 12163578, 'test', 111 );
ERROR 1062 (23000): Duplicate entry '12163578' for key 'PRIMARY'



Как победить проблему ??
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39583228
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже на повреждение индекса...
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39583255
Exec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, это ясно.
Как подшаманить вопрос?
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39583258
artas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exec1,

пересоздай индекс
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39583267
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exec1 , а какие варианты кроме переиндексации? я таких не знаю... но...
Первый вопрос - какой у неё движок? надеюсь, InnoDB.
Второй вопрос - есть на PK FK или нет? Если нет, то вопрос яйца выеденного не стОит - грохнуть и создать поле заново. А если есть (и движок InnoDB) - то, вероятно, надо дампить таблицу в OUTFILE, затем дропать, пересоздать, и восстановить данные из дампа.
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39583269
Exec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
artas, Как ??

есть вариант mysqldump
- скорее всего таблица окажется слишком большой.
потом перед восстановлением надо удалить таблицу, и вот тут, если бекап не загрузится будет очень хорошо.

хочется более изящное решение, менее ресурсоемкое, которое можно было бы потом засунуть в скрипт.
ну и понять причину глюка, что бы этого избежать в будущем.
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39583282
artas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exec1,

Akina вам все правильно сказал, маловероятно что из дампа не загрузится, а если представить, что проблема может быть поврежденном HDD, то дамп может не создаться просто

Риски минимальные
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39583302
Exec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тип MyISAM
сейчас попробую задампить.
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39583328
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exec1потом перед восстановлением надо удалить таблицу,Зачем удалять-то? RENAME...
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39583399
Exec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробую експорт сделать с phpmyadmin - your export is incomplete, due to a low execution time limit at the PHP level

пробую с консоли
$ mysqldump -ulogin -hhost -p log alog > dump_alog.sql

час прошел, размер файла dump_alog.sql уже 73Гб

лезу в phpmyadmin ;
там размер - 357.2 МБ

кому верить ?

как задампить ?
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39583533
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exec1как задампить ?Я ж сказал
Akinaнадо дампить таблицу в OUTFILE
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39584181
Exec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

это так:
$ mysqldump -ulogin -hhost -p log alog > dump_alog.sql

файл забил все место на диске.

если не так, можно пример ?
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39584187
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exec1если не такНе так
Exec1можно пример ?Можно - ссылку на документацию .
Конкретно - раздел "Making Delimited-Text File Backups".
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39584270
Exec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
> SELECT * INTO OUTFILE 'my_tb_alog.sql' FROM alog;

# ls -l /var/db/mysql/log
-rw-rw----  1 mysql  mysql   268 Mb 12 янв 08:42 alog.MYD
-rw-rw----  1 mysql  mysql   106 Mb 12 янв 11:41 alog.MYI
-rw-rw----  1 mysql  mysql        8854 24 мар  2017 alog.frm
-rw-rw----  1 mysql  mysql          61 23 май  2016 db.opt
-rw-rw-rw-  1 mysql  mysql  3318 Mb 15 янв 11:49 my_tb_alog.sql



запущен был запрос.
он выполняется.
на текущий момент мы видим что создаваемый файл 3 Гб и продолжает рости.
Хотя сама база меньше. см другие файлы.

Что делать ??
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39584288
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Структуру таблицы покажите...
А ещё - попробуйте ввести вменяемое условие отбора. Да хотя бы WHERE id BETWEEN 1 AND 12345678...
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39584343
Exec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
> SHOW COLUMNS FROM alog;
+--------+-----------------+------+-----+---------+----------------+
| Field  | Type            | Null | Key | Default | Extra          |
+--------+-----------------+------+-----+---------+----------------+
| id     | int(8) unsigned | NO   | PRI | NULL    | auto_increment |
| date   | date            | YES  |     | NULL    |                |
| time   | time            | YES  |     | NULL    |                |
| mesayc | varchar(3)      | YES  |     | NULL    |                |
| day    | int(1)          | YES  |     | NULL    |                |
| god    | int(1)          | YES  |     | NULL    |                |
| vremya | time            | YES  |     | NULL    |                |
| nomer  | varchar(8)      | YES  | MUL | NULL    |                |
| mes    | varchar(255)    | YES  |     | NULL    |                |
| ip     | varchar(15)     | YES  |     | NULL    |                |
| lev    | int(1)          | YES  |     | NULL    |                |
+--------+-----------------+------+-----+---------+----------------+
11 rows in set (0,01 sec)



Код: sql
1.
2.
3.
> SELECT * INTO OUTFILE 'my_tb_alog.sql' FROM alog WHERE id BETWEEN 1 AND 12345678;
> SELECT * INTO OUTFILE 'my_tb_alog.sql' FROM alog WHERE id BETWEEN 1 AND 12345677;
> SELECT * INTO OUTFILE 'my_tb_alog.sql' FROM alog WHERE id BETWEEN 1 AND 12345670;



все три запроса уходили за 2 Гб и были остановлены.
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39584346
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exec1все три запроса уходили за 2 ГбНо хотя бы частичную выгрузку посмотрел? там - нормальные данные, или бредятина?
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39584349
Exec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Код: sql
1.
> SELECT * INTO OUTFILE 'my_tb_alog.sql' FROM alog WHERE id BETWEEN 1 AND 12163576;



12163576 - сейчас еще попробую, не то было указано до этого ..
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39584365
Exec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
последний вариант запроса тоже ушел за 2 Гб

Код: powershell
1.
2.
# head -n 15 /var/db/mysql/log/my_tb_alog.sql
# tail -n 15 /var/db/mysql/log/my_tb_alog.sql



Да есть данные, на первый взгляд корректные.
Данные тектовые, формат не sql.
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39584411
Exec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рестарт MySQL сервера привел к
ERROR 145 (HY000): Table './log/alog' is marked as crashed and should be repaired
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39584430
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exec1Да есть данные, на первый взгляд корректные.
Данные тектовые, формат не sql.
Ну что формат CSV, это определяется запросом, это нормально. А вот что объём растёт в 8 раз - это непонятно. Нет в таблице данных, способных ТАК распухнуть при экспорте...

Exec1Рестарт MySQL сервера привел кАвтовосстановление - отключено, надо понимать? в любом случае читать https://dev.mysql.com/doc/refman/5.7/en/backup-and-recovery.html и выполнять тамошние рекомендации.
...
Рейтинг: 0 / 0
Duplicate entry for key 'PRIMARY'
    #39584501
Exec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
$ mysql -b -ulogin -p -D log -e "REPAIR TABLE alog" -ulogin -hhost
Enter password: 
+----------+--------+----------+------------------------------------------------+
| Table    | Op     | Msg_type | Msg_text                                       |
+----------+--------+----------+------------------------------------------------+
| log.alog | repair | info     | Key 1 - Found wrong stored record at 259882996 |
| log.alog | repair | warning  | Number of rows changed from 1438558 to 1442415 |
| log.alog | repair | status   | OK                                             |
+----------+--------+----------+------------------------------------------------+
+



После этого все завелось.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Duplicate entry for key 'PRIMARY'
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]