I am continuous getting above error in mysqld log. Please tell me what is this error about and how to solve it. I am using mysql 5.7 (not mariadb)
asked Jan 13, 2018 at 3:05
A guess: A FULLTEXT
index on that table is corrupted.
ALTER TABLE tablename ENGINE=InnoDB;
should rebuild the FT index, thereby fixing the problem.
If that is not sufficient, please provide SHOW CREATE TABLE
; there may be some other clues there.
answered Jan 13, 2018 at 4:05
Rick JamesRick James
74.1k4 gold badges42 silver badges104 bronze badges
1
На сайте с 17.09.2012
Offline
151
16 октября 2019, 06:35
703
Добрый день.
Подскажите пожалуйста, что не так и как это лучше исправить?
Система
FreeBSD 12
Mysql
mysql Ver 14.14 Distrib 5.6.45, for FreeBSD12.0 (amd64) using EditLine wrapper
Ошибки в логе мускула, как с этим бороться и из-за чего они могут происходить?
На сервере несколько баз данных.
2019-10-15 20:41:53 e1498d900 InnoDB: Error (Duplicate key) writing word node to FTS auxiliary index table.
2019-10-15 20:57:33 e1498d900 InnoDB: Error (Duplicate key) writing word node to FTS auxiliary index table.
2019-10-15 20:57:33 e1498d900 InnoDB: Error (Duplicate key) writing word node to FTS auxiliary index table.
2019-10-15 22:03:08 e1498d900 InnoDB: Error (Duplicate key) writing word node to FTS auxiliary index table.
2019-10-15 22:03:08 e1498d900 InnoDB: Error (Duplicate key) writing word node to FTS auxiliary index table.
2019-10-15 22:41:54 e1498d900 InnoDB: Error (Duplicate key) writing word node to FTS auxiliary index table.
2019-10-15 22:41:54 e1498d900 InnoDB: Error (Duplicate key) writing word node to FTS auxiliary index table.
2019-10-15 22:56:48 e1498d900 InnoDB: Error (Duplicate key) writing word node to FTS auxiliary index table.
На сайте с 23.12.2013
Offline
151
16 октября 2019, 06:41
#1
baas, /ru/forum/967265
Вообще же — кто-то пытается записать что-то в БД с уже существующим ключом, а ключик должен быть уникальным…
На сайте с 17.09.2012
Offline
151
16 октября 2019, 07:19
#2
lonelywoolf:
baas, /ru/forum/967265
Вообще же — кто-то пытается записать что-то в БД с уже существующим ключом, а ключик должен быть уникальным…
Что за ключ, индекс что ле?
На сайте с 23.12.2013
Offline
151
16 октября 2019, 07:39
#3
baas, Индекс нужен для быстрого поиска, а ключ, чтобы не было абсолютно одинаковых записей.
В вашем слувае это, скорее всего, первичный ключ. Я бы сделал бэкап и mysqldadmin —all-databases —auto-repair —optimize и после уже искал откуда ноги растут. Но, скорее всего, это какая-то гадость с первичным ключом.
На сайте с 17.09.2012
Offline
151
16 октября 2019, 09:57
#4
lonelywoolf:
baas, Индекс нужен для быстрого поиска, а ключ, чтобы не было абсолютно одинаковых записей.
В вашем слувае это, скорее всего, первичный ключ. Я бы сделал бэкап и mysqldadmin —all-databases —auto-repair —optimize и после уже искал откуда ноги растут. Но, скорее всего, это какая-то гадость с первичным ключом.
Все равно не пойму, что за первичный ключ?
Кто его добавлял?
IL
На сайте с 20.04.2007
Offline
418
16 октября 2019, 10:18
#5
На сайте с 23.12.2013
Offline
151
16 октября 2019, 11:54
#6
baas:
Все равно не пойму, что за первичный ключ?
Кто его добавлял?
Разработчик софта, который работает с сервером БД. Прогоните репэйр и задавайте вопросы разрабам вашего софта. Ну или DBAdmin. Я вот так на вскидку не видя сервера не могу сказать, какой конкретно скрипт пытается страдать хренью. Найдите запрос проблемный, найдите место в коде, откуда он вызывается…
-
henk
- Posts: 508
- Joined: 14 Dec 2015 22:16
- Location: Netherlands
- Contact:
Mysql: InnoDB: Error (Duplicate key) writing word node to FTS auxiliary index table
EFA-3.0.2.5
/var/lib/mysql/FQDN(your EFA hostname).err contains error(s) like:
Mysql: InnoDB: Error (Duplicate key) writing word node to FTS auxiliary index table.
This is related to InnoDB FULLTEXT indexes and is solved in MariaDb 10.1.29-1.el6 ( https://jira.mariadb.org/browse/MDEV-12676)
To solve it I did an upgrade to mysqld 10.1.29-MariaDB ( from the current 10.1.28-MariaDB version used in EFA).
- Stop services
Code: Select all
service mailscanner stop
service crond stop
- update yum.conf — vi /etc/yum.conf
Code: Select all
#exclude=kernel* MariaDB* postfix* mailscanner* MailScanner* clamav* clamd* open-vm-tools*
exclude=kernel* postfix* mailscanner* MailScanner* clamav* clamd* open-vm-tools*
- yum check-update
- yum update
Code: Select all
Updating:
MariaDB-client
MariaDB-common
MariaDB-compat
MariaDB-server
device-mapper
device-mapper-event
device-mapper-event-libs
device-mapper-libs
galera
kexec-tools
kpartx
libblkid
libuuid
lvm2
lvm2-libs
sos
util-linux-ng
Transaction Summary
===========================
Upgrade 17 Package(s)
Total download size: 165 M
- Restore yum.conf to original — vi /etc/yum.conf
- Start Services
Code: Select all
service mailscanner start
service crond start
Check /var/lib/mysql/FQDN(your EFA hostname).err
Like to know if there are EFA users having the same issue.
“We are stuck with technology when what we really want is just stuff that works.” -Douglas Adams
-
shawniverson
- Posts: 3608
- Joined: 13 Jan 2014 23:30
- Location: Indianapolis, Indiana USA
- Contact:
-
henk
- Posts: 508
- Joined: 14 Dec 2015 22:16
- Location: Netherlands
- Contact:
Re: Mysql: InnoDB: Error (Duplicate key) writing word node to FTS auxiliary index table
Post
by henk » 22 Jan 2018 15:27
Somehow the error is back, filling the error log with messages, no clou why. It was gone for quite some time
view /var/lib/mysql/<FQDN>.err:
2018-01-22 12:35:24 7f138b5fe700 InnoDB: Error (Duplicate key) writing word node to FTS auxiliary index table.
check affected db files
Code: Select all
ls -l /var/lib/mysql/mailscanner/F*
The only way I could fix it (The desperate approach: (rebuild the FT index )
Stop mail flow
Code: Select all
service mailscanner stop
service crond stop
Login to mysql
Code: Select all
mysql -uroot
ALTER TABLE mailscanner.maillog ENGINE=InnoDB;
Query OK, 2555 rows affected (1.06 sec)
Records: 2555 Duplicates: 0 Warnings: 0
check affected db files
Code: Select all
ls -l /var/lib/mysql/mailscanner/F*
view /var/lib/mysql/<FQDN>.err:
2018-01-22 15:10:47 7fec853f8700 InnoDB: FTS Optimize Removing table mailscanner/#sql2-1fbe-3d
Start mail flow
Code: Select all
service mailscanner start
service crond start
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
As i did try, without luck, to optimize the maillog table as it is the only table having a fulltextindex
Code: Select all
SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.STATISTICS WHERE index_type LIKE 'FULLTEXT%';
+--------------+------------+
| TABLE_SCHEMA | TABLE_NAME |
+--------------+------------+
| mailscanner | maillog |
To optimize the FULLTEXT index, you need to set:
Code: Select all
set GLOBAL innodb_optimize_fulltext_only=ON;
Code: Select all
OPTIMIZE TABLE mailscanner.maillog;
Code: Select all
set GLOBAL innodb_optimize_fulltext_only=OFF;
“We are stuck with technology when what we really want is just stuff that works.” -Douglas Adams
I have very bad news for you.
You should not have deleted the ibdata1 file. Here is why:
ibdata1 contains four type of information:
- table metadata
- MVCC data
- data pages (with innodb_file_per_table enabled)
- index pages (with innodb_file_per_table enabled)
Each InnoDB table created has a numercial id assigned to it via some auto increment metadata feature to each ibd file. That internal tablespace id (ITSID) is embedded in the .ibd file. That number is checked against the list of ITSIDs maintained, guess where, … ibdata1.
I also have very good news for you along with some bad news.
It is possible to reconstruct ibdata1 to have the correct ITSIDs but it takes work to do it. While I personally have not done procedure alone, I assisted a client at my employer’s web hosting to do this. We figured this out together but since the client hosed ibdata1, I let him do most of the work (30 InnoDB tables).
Anyway, here a past post I made in the DBA StackExchange. I answered another question whose root cause was the mixing up of ITSIDs.
To cut right to the chase, here is the article explaining what to do with reference to ITSID and how to massage ibdata1 into acknowledging the presence of the ITSID contained within the .ibd file.
I am sorry there is no quick-and-dirty method for recovering the .ibd file other than playing games with ITSIDs.
UPDATE 2011-10-17 06:19 EDT
Here is your original innodb configuration from your question:
innodb_file_per_table=1
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G
innodb_buffer_pool_size=4G
innodb_data_file_path=ibdata1:10M:autoextend
innodb_buffer_pool_size = 384M
innodb_log_file_size=5M
innodb_lock_wait_timeout = 18000
Please notice that innodb_log_file_size is there twice. Look carefully…
innodb_file_per_table=1
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G <----
innodb_buffer_pool_size=4G
innodb_data_file_path=ibdata1:10M:autoextend
innodb_buffer_pool_size = 384M
innodb_log_file_size=5M <----
innodb_lock_wait_timeout = 18000
The last setting of innodb_log_file_size takes precedence. MySQL expected to start up with the log files being 5M. Your ib_logfile0 and ib_logfile1 were 1G when you tried to start up mysqld. It saw a size conflict and took the path of least resistance, which was to disable InnoDB. That’s why InnoDB was missing from show engines;
. Mystery solved !!!
UPDATE 2011-10-17 11:07 EDT
The error message was deceptive because innodb_log_file_size was smaller than the log files (ib_logfile0 and ib_logfile1), which were 1G at the time. What’s interesting is this: Corruption was reported because the file was expected to be 5M and the files were bigger. If the situation were reversed and the innodb log files were smaller than the declared size in my.cnf you should get something like this in the error log:
110216 9:48:41 InnoDB: Initializing buffer pool, size = 128.0M
110216 9:48:41 InnoDB: Completed initialization of buffer pool
InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 33554432 bytes!
110216 9:48:41 [ERROR] Plugin 'InnoDB' init function returned error.
110216 9:48:41 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
In this example, the log files were already existing as 5M and the setting for innodb_log_file_size was bigger (in this case, 32M).
For this particular question, I blame MySQL (eh Oracle [still hate saying it]) for the inconsistent error message protocol.
You didn’t say, in your question what the «file not present» message was, but I’m guessing it’s this:
ERROR 1126 (HY000) at line 29: Can't open shared library 'lib_mysqludf_sys.so'
(errno: 0 /usr/local/mysql/lib/plugin/lib_mysqludf_sys.so: cannot open shared
object file: No such file or directory)
ERROR: unable to install the UDF
That makes sense, because you’re telling gcc to write the file to /usr/lib/lib_mysqludf_sys.so… that’s the -o
option in your command line. Give gcc the path MySQL is expecting and the rest of the installation should work.
gcc -m64 -fPIC -Wall -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c
-o /usr/local/mysql/lib/plugin/lib_mysqludf_sys.so
-L/usr/lib/x86_64-linux-gnu/libstdc++.so.6
Also, whatever you’re planning to do with this… don’t say I didn’t recommend against it. You’re introducing both a potential security vulnerability and potentional performance and stability liability if these tools are deployed. This is not because there’s anything wrong with the utility, but because of the amount of somewhat unorthodox functionality it opens up.
It’s pretty cool, I admit. The lib_mysqludf_sys group of user-defined functions allow some interesting but easily-misappropriated capabilities, letting you spawn system commands and get either their generated output with sys_eval()
or their return value with sys_exec()
but really, I tend to suspect there’s a reason why MySQL doesn’t have these capabilities built in.
mysql> select sys_eval('df -k | grep xvda | tr -d "n"') as cool_function_but_bad_idea;
+-----------------------------------------------------+
| cool_function_but_bad_idea |
+-----------------------------------------------------+
| /dev/xvda1 8256952 1216636 6620888 16% / |
+-----------------------------------------------------+
1 row in set (0.81 sec)
mysql> select sys_exec('/bin/false'), sys_exec('/bin/true');
+------------------------+-----------------------+
| sys_exec('/bin/false') | sys_exec('/bin/true') |
+------------------------+-----------------------+
| 256 | 0 |
+------------------------+-----------------------+
1 row in set (1.59 sec)
Update to address this error message:
gcc -Wall -m64 -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o
/usr/lib/lib_mysqludf_sys.so -fPIC gcc: error: lib_mysqludf_sys.c: No such
file or directory gcc: fatal error: no input files compilation terminated
The statement in question is directing «gcc» to compile a 64-bit version from the source code, which is found in lib_mysqludf_sys.c. This is one of the files you downloaded, so, to compile it, you need to be inside the directory where you downloaded the lib_mysqludf_sys files. This error suggests that you aren’t. The download package isn’t limited to 32 bit, it’s just that it only builds a 32 bit version unless you use the gcc -m64 -fPIC ...
statement.
I have Mysql server running on windows server 2012 since 2015, I found too much error messages in .err log file, messages are:
2019-06-12 09:26:39 2064 InnoDB: Error (Duplicate key) writing word node to FTS auxiliary index table.
And it still receiving errors daily.
What is that error meaning, can this error effect Mysql performance?
Note: mysql server is used from multiple projects.
Dharman♦
29.9k22 gold badges82 silver badges132 bronze badges
asked Jun 12, 2019 at 7:09
0
Load 3 more related questions
Show fewer related questions