In our role as Support Engineers for web hosts, we manage servers with various services such as web, database, mail, control panels, FTP, etc.
MySQL is the most commonly used database server in Linux hosting and handling the databases and resolving the errors associated with it, is a common task that we perform.
A commonly noticed error in MySQL server is ‘1146 table doesn’t exist’. Today we’ll see what causes this ‘1146 table doesn’t exist’ error in MySQL and how to fix it.
Error : Table ‘mysql.innodb_index_stats’ doesn’t exist
status : Operation failed
What causes MySQL ‘1146 table doesn’t exist’ error
MySQL table errors happen due to many reasons, the major ones we’ve come across include:
- InnoDB crash – When the InnoDB server crash due to any process load or user abuse, or if the server was not restarted properly, it can get corrupt and cause table errors to show up.
- Missing ibdata file in the MySQL datadir – InnoDB has a data dictionary – the ibdata file and log files, which are crucial for InnoDB to function. If during migrations or restorations, these files go missing, it can prevent InnoDB tables from functioning right.
- Improperly placed .frm files – In InnoDB, tables have ‘.frm’ files that define the table format. If these files get deleted or were missed to copy over to the proper database directory, then the tables can show errors.
- Incorrect permissions and ownership of MySQL datadir – MySQL has a data directory, usually ‘/var/lib/mysql’ that stores the databases. If the permission and ownership of this directory is not adequate for MySQL to access it, errors would occur.
- Corrupt tables or improper table names – If the database tables got corrupt due to improper server shut down or incomplete queries, or if the table name format is not correct, the ‘1146 table doesn’t exist’ error may show up.
[ You don’t have to lose your sleep over server errors. Our expert server support specialists monitor & maintain your servers 24/7/365 and keep them rock solid. ]
How to fix MySQL ‘1146 table doesn’t exist’ error
Inorder to fix the error ‘1146 table doesn’t exist’, we adopt different techniques, after analyzing the root cause of the error.
- Restart MySQL server – If the error has happened due to improper server shut down or MySQL service related errors, we restart the service and check if it fixes the issue. If the service doesn’t start properly, we further investigate and fix the error.
- Repair the tables – MySQL has tools such as ‘myisamchk’ to repair corrupt databases and tables.
- Backup restore – Restoring database backups is the final resort to get the tables back to working condition. We always configure and maintain the backups in our customers’ servers up to date, inorder to ensure that there is no data loss or down time due to unexpected crashes or errors.
- Copy ibdata file – If the ‘ibdata’ file is missing, we copy it from the backup and restore it to the data directory for MySQL, after discarding the tablespace to avoid any corruptions or errors.
- InnoDB crash recovery – In case where the backup is incomplete or ibdata file is also corrupt, we’ve still been able to recover the tables via our expert crash recovery methods. Read the post ‘Database crash rescue‘ to know more.
[ Use your time to build your business. We’ll take care of your servers. Hire Our server experts to resolve and prevent server issues. ]
At Bobcares, our 24/7 Web Support Specialists constantly monitor all the services in the server and proactively audit the server for any errors or corruption in them.
With our systematic debugging approach for service or other software errors, we have been able to provide an exciting support experience to the customers.
If you would like to know how to avoid downtime for your customers due to errors or other service failures, we would be happy to talk to you.
var google_conversion_label = «owonCMyG5nEQ0aD71QM»;
MySQL database is a relational database system which contains tables, these tables are formally described and they contain data within them. The data could be accessed and modify with various ways and there is no need for changing the order of tables for it. Pretty cool, Isn’t it? But sometimes corruption or mishandling of the data can lead us to errors. Error 1146 in MySQL Table doesn’t exist is also one of those common errors which can take place during MySQL handling.
So, in this handout, I’ll elaborate MySQL Error 1146, the reason behind this error and how to resolve Bug? #1146 – Table ‘xxx.xxxxx’ doesn’t exist. So without wasting time, let’s get started.
Why Error 1146 in MySQL Takes Place?
There are multiple reasons and catalyst to this error. Some of the causes to error 1146 are stated below:
- InnoDB crash and missing data files
As we all know that InnoDB is the transaction-safe (ACID compliant) storage engine for MySQL database, it offers multiple capabilities like Rollback, Commit and crash recovery for data of MySQL database. The InnoDB is also prone to corruption, so if it is not handled correctly there is a chance of crash of InnoDB. InnoDB is functional because of ibdata file and log file. It acts as a data dictionary to it. If by any reason these files go missing, there will be no chance of working InnoDB and MySQL will show you error 1146.
- Improper directory accessing permissions
MySQL has a data storage directory where it stores all the database. Most of the time path is ‘/var/lib/mysql’. If the ownership and access permissions are not right and MySQL is not able to access this directory path then the error 1146 in MySQL will be shown.
- Corruption in data tables
Tables of MySQL database can get corrupt due to several reasons like improper server shutdown, incomplete queries, user abuse, wrong formats, foreign key constraint error, etc. So if the table got corrupt the database can show MySQL error 1146.
- .frm file missing
.frm file contains the format and structure of the database. If anyhow this file is not copied to the database directory or it gets deleted then there will be an error message for error code 1146.
Methods to Fix MySQL ERROR 1146 table doesn’t exist
To fix Bug? #1146 – Table ‘xxx.xxxxx’ doesn’t exist, we can use multiple remedies and DIYs like:
Restore Backup
This is the best alternative you should use. It will surely recreate all the lost tables from the database and MySQL code 1146 will also get solved but keep in mind that there should be a backup file to restore. So always keep the habit of creating backup time to time, it’s a good practice. Also, it resolve MySQL ERROR 1146 table doesn’t exist after backup.
Restart the Server
Try to restart the server if any improper server shutdown took place. There is a chance to get it back in working condition and removing error code. So that user access MySQL without any issue
Repair Database Tables
You can repair database tables using MySQL CLI. All you need to do is to follow the stated steps:
1. Using SSH, log in to the server.
2. From the command line, execute the following command:
mysql -u [username] -p
Note: Replace username with your username and remove the brackets.
3. Now enter your password for the username.
4. Again enter the command:
use [databasename];
Note: provide the name of the database without brackets.
5. Now execute the following command:
show tables;
6. Now repair table using following commands:
(a) Check for tables with error:
check table [tablename];
(b) Repair tables:
repair table [tablename];
7. Now quit using quit command.
Keep a copy of .frm file
You can keep a copy of .frm file and whenever the error 1146 arrises, you can paste the .frm file to the schema folder. It can fix error 1146.
Copy the ibdata file from backup
You should keep a copy of ibdata file as a backup so whenever the this MySQL error takes place you can paste it to the data directory of MySQL server.
Using Third Party Tools
If still, the error 1146 in MySQL takes place, you should go for a professional tool rather relying on the DIYs. You can use MySQL Data Recovery tool. It is the best tool to recover the corrupt tables and even fix MySQL ERROR 1146 table doesn’t exist after backup. Try the demo version of the solution from below button.
Watch this video tutorial for smooth use of MySQL Recovery Tool.
Conclusion
So, this is Error 1146 in MySQL ‘table doesn’t exist’. We discussed some quick remedies and DIYs to resolve this common MySQL error. It becomes really hard and disappointing when you face such errors cause these type of errors can lead you to lose all your valuable data.
Try your best and keeping the backup of data is the best precaution you can take. It will help you in such a critical situation to restore your MySQL database in the previous condition and it will also fix Bug? #1146 – Table ‘xxx.xxxxx’ doesn’t exist. So hope for the best and do it. Thanks fo reading this article. I hope you found it useful & interesting.
Related Post
Содержание
- How to resolve MySQL ‘1146 table doesn’t exist’ errors in your server
- What causes MySQL ‘1146 table doesn’t exist’ error
- How to fix MySQL ‘1146 table doesn’t exist’ error
- ERROR 1146 (42S02): Table ‘information_schema.SCHEMATA’ doesn’t exist #1047
- Comments
- Issue:
- Expected behavior:
- Reproduce:
- Relevant Code:
- Ошибка? #1146-таблица «xxx. xxxxx» не существует
- 18 ответов:
- Ошибка? # 1146 — Таблица «xxx.xxxxx» не существует
- 18 ответов
How to resolve MySQL ‘1146 table doesn’t exist’ errors in your server
In our role as Support Engineers for web hosts, we manage servers with various services such as web, database, mail, control panels, FTP, etc.
MySQL is the most commonly used database server in Linux hosting and handling the databases and resolving the errors associated with it, is a common task that we perform.
A commonly noticed error in MySQL server is ‘1146 table doesn’t exist’. Today we’ll see what causes this ‘1146 table doesn’t exist’ error in MySQL and how to fix it.
Error : Table ‘mysql.innodb_index_stats’ doesn’t exist
status : Operation failed
What causes MySQL ‘1146 table doesn’t exist’ error
MySQL table errors happen due to many reasons, the major ones we’ve come across include:
- InnoDB crash – When the InnoDB server crash due to any process load or user abuse, or if the server was not restarted properly, it can get corrupt and cause table errors to show up.
- Missing ibdata file in the MySQL datadir – InnoDB has a data dictionary – the ibdata file and log files, which are crucial for InnoDB to function. If during migrations or restorations, these files go missing, it can prevent InnoDB tables from functioning right.
- Improperly placed .frm files – In InnoDB, tables have ‘.frm’ files that define the table format. If these files get deleted or were missed to copy over to the proper database directory, then the tables can show errors.
- Incorrect permissions and ownership of MySQL datadir – MySQL has a data directory, usually ‘/var/lib/mysql’ that stores the databases. If the permission and ownership of this directory is not adequate for MySQL to access it, errors would occur.
- Corrupt tables or improper table names – If the database tables got corrupt due to improper server shut down or incomplete queries, or if the table name format is not correct, the ‘1146 table doesn’t exist’ error may show up.
How to fix MySQL ‘1146 table doesn’t exist’ error
Inorder to fix the error ‘1146 table doesn’t exist’, we adopt different techniques, after analyzing the root cause of the error.
- Restart MySQL server – If the error has happened due to improper server shut down or MySQL service related errors, we restart the service and check if it fixes the issue. If the service doesn’t start properly, we further investigate and fix the error.
- Repair the tables – MySQL has tools such as ‘myisamchk’ to repair corrupt databases and tables.
- Backup restore – Restoring database backups is the final resort to get the tables back to working condition. We always configure and maintain the backups in our customers’ servers up to date, inorder to ensure that there is no data loss or down time due to unexpected crashes or errors.
- Copy ibdata file – If the ‘ibdata’ file is missing, we copy it from the backup and restore it to the data directory for MySQL, after discarding the tablespace to avoid any corruptions or errors.
- InnoDB crash recovery – In case where the backup is incomplete or ibdata file is also corrupt, we’ve still been able to recover the tables via our expert crash recovery methods. Read the post ‘Database crash rescue‘ to know more.
[ Use your time to build your business. We’ll take care of your servers. Hire Our server experts to resolve and prevent server issues. ]
At Bobcares, our 24/7 Web Support Specialists constantly monitor all the services in the server and proactively audit the server for any errors or corruption in them.
With our systematic debugging approach for service or other software errors, we have been able to provide an exciting support experience to the customers.
If you would like to know how to avoid downtime for your customers due to errors or other service failures, we would be happy to talk to you.
Источник
ERROR 1146 (42S02): Table ‘information_schema.SCHEMATA’ doesn’t exist #1047
Issue:
What seems to be going wrong?
docker exec -it bash
mysql -u root -p
show databases;
Expected behavior:
What should be happening instead?
see available databases or none? isn’t the container supposed to create it by default?
Reproduce:
How might we be able to reproduce the error?
Relevant Code:
The text was updated successfully, but these errors were encountered:
I resolved this error by running:
mysql_upgrade -u root -p —force
However, the next error whilst try to migrate the schema versions of Laravel is:
SQLSTATE[HY000] [2054] Server sent charset unknown to the client. default character set utf8mb4 collate utf8mb4_unicode_ci.
It seems the problem has to do with a bug in the driver in the version of PHP that comes with laradock?
https://bugs.php.net/bug.php?id=74461
This bug seems to be resolved in PHP1.7.5.
Hi, was having the same issue, i run the mysql_upgrade you posted and now i’m able to see databases. But i still have an issue of connecting to the database via sequel pro, using credentials i changed in .env
Are you facing same issue and have you been able to solve it?
Have you tried to using host=mysql?
If you are using the laradock repo you can spin up phpmyadmin:
docker-compose up -d nginx mysql phpmyadmin
then you can browse phpmyadmin at: http://localhost:8080
I have added 127.0.0.1 mysql in my hosts file, base on some post i read.
i just used phpmyadmin wth the following credentials and it worked:
username: laradock
password: secret
database: zoo (Collation: utf8mb4_0900_ai_ci)
Then i have a php file which i have this code in it.
$con = mysqli_connect(«127.0.0.1″,»laradock»,»secret»,»zoo»); var_dump($con);
this is the result i get:
Warning: mysqli_connect(): (HY000/2002): Connection refused in.
When i use «mysql» instead of «127.0.0.1», i get:
Warning: mysqli_connect(): Server sent charset (255) unknown to the client.
Try downgrading the MySQL version from 8.0 to 5.7 5083426 then rebuild the container.
Hi @Mahmoudz, I try downgrading MySQL to 5.7 and rebuild, but when up docker-machine I receive this:
I did the following to get mine working:
- Removed image $ docker rmi laradock_mysql
- Remove container $ docker rm laradock_mysql
- Located DATA_SAVE_PATH=
/.laradock/data in .env file
- Buil docker-compeer up -d mysql nginx
I hope I didn’t miss anything in the steps.
Changing the mysql container version to 5.7 from 8.0 didn’t fix this for me.
After lots of faffing I decided to start from scratch. Before building the containers for the first time ensure you have set the mysql version at laradock/mysql/Dockerfile to 5.7 as described at #1047 (comment).
Setting the version from mysql 8.0 to 5.7 caused lots of issues. At the moment it’s quicker to set the version before starting the build process.
solution:
/.laradock/data/mysql warning: it will delete your mysql exist data
question:
for this issue,i know i need clear mysql old data when i change mysql version, so i exec docker-compose down -v , but the error still exist, i realize the mysql container not use docker volume system , so i checked docker-compose.yml ,In there, i found a question:
for laradock old version, mysql use docker volume save data, example:
so, who is using the volume mysql ? I hope I didn’t miss anything for this config. is that a bug? @Mahmoudz
Источник
Ошибка? #1146-таблица «xxx. xxxxx» не существует
Я использую windows XP. Я создаю таблицу в phpMyAdmin с помощью встроенной функции create table,
мое имя базы данных — ddd .
Он генерирует следующий код:
И появляется следующая ошибка:
В чем может быть проблема?
18 ответов:
У меня тоже была такая же проблема в прошлом. Все произошло после перемещения файлов базы данных в новое место и после обновления сервера mysql. Все таблицы с движком InnoDB исчезли из моей базы данных. Я пытался воссоздать их, но mysql все время говорил мне 1146: Table ‘xxx’ doesn’t exist , пока я не воссоздал свою базу данных и не перезапустил службу mysql.
Я думаю, что есть необходимость прочитать о двоичных файлах таблиц InnoDB.
У меня была та же проблема, и я не могу получить хороший совет для этого через интернет, поэтому я поделился этим для вас и для всех, кто нуждается.
В моей ситуации я копирую базу данных (все файлы: frm, myd) в папку данных в папке данных MySQL (используя Wamp дома). Все было в порядке, пока я не хочу создать таблицу и иметь ошибку #1146 Table ‘. ‘ doesn’t exist! .
Я использую Wamp 2.1 с MySQL версии 5.5.16.
Экспорт базы данных в файл;
Проверьте, экспортируется ли файл действительно в порядке!!;
Удалите базу данных, где у меня есть проблемы;
Создайте новую базу данных с тем же именем, что и предыдущая;
Импортируйте файл в базу данных.
ДЛЯ МЕНЯ ПРОБЛЕМА РЕШЕНА. Теперь я могу снова создавать таблицы без ошибок.
В моем случае я выполнил эту команду, даже если таблица не была видна в PhpMyAdmin:
DROP TABLE mytable
Перезапуск MySQL работает нормально для меня.
Проверьте имена файлов.
Возможно, вам потребуется создать новую базу данных в phpmyadmin, которая соответствует базе данных, которую вы пытаетесь импортировать.
У меня была та же проблема. Я попытался создать таблицу в mysql и получил ту же ошибку. Я перезапустил сервер mysql и запустил команду, и смог создать / перенести таблицу после пересчета.
Сегодня я столкнулся с той же проблемой. Я был в очень сложной ситуации, но какой id я создал таблицу с другим именем, например (modulemaster не создавал, тогда я создаю modulemaster1), и после создания таблицы я просто делаю переименование таблицы.
Я сегодня столкнулся с той же проблемой. Я пытался создать таблицу users , и мне было предложено это ERROR 1146 (42S02): Table users doesn’t exist , что не имело никакого смысла, потому что я просто пытался создать таблицу!!
Затем я попытался отбросить таблицу, набрав DROP TABLE users , зная, что она не будет работать, потому что ее не существует, и я получил ошибку, сказав Unknown table users . После получения этой ошибки, я попытался создать таблицу снова, и волшебным образом, он успешно создал таблицу!
Моя интуиция подсказывает, что я, вероятно, создал это стол до этого так и не был полностью убран каким-то образом. Явно говоря DROP TABLE , мне удалось каким-то образом сбросить внутреннее состояние? Но это только мое предположение.
Короче говоря, попробуйте отбросить любую таблицу, которую вы создаете, и создать ее снова.
As pprakash упоминает выше, копируя таблицу .файлы frm и файл ibdata1 были тем, что работало для меня. (Я бы просто прокомментировал этот комментарий, но это требование SO для 50 пунктов означает, что я должен предоставить решение, даже если это просто повторение существующего . странный.)
- Закрой свой клиент проводнике выделенного текста(например, верстак).
- остановите службу MySQL (хост Windows).
- сделайте безопасную копию практически все!
- сохраните копию файла(ов) таблицы (например, mytable.frm ) в папку данных схемы (например, MySQL Server / data / ).
- сохраните копию файла ibdata1 в папке data (т. е. MySQL Server/data).
- перезагрузите службу MySQL.
- убедитесь, что таблицы теперь доступны, доступны для запросов и т. д. В вашем клиенте проводника БД.
После этого все было хорошо. (Не забудьте сделать резервную копию, если у вас есть успех!)
Имена столбцов в таблице должны быть уникальными. В одной таблице не может быть двух столбцов с именем asd .
Источник
Ошибка? # 1146 — Таблица «xxx.xxxxx» не существует
Я использую Windows XP. Я создаю таблицу в phpMyAdmin, используя встроенную функцию создания таблицы, мое имя базы данных ddd .
Он генерирует следующий код:
и появляется следующая ошибка:
В чем может быть проблема?
18 ответов
У меня также была такая же проблема в прошлом. Все это произошло после перемещения файлов базы данных в новое место и после обновления сервера mysql. Все таблицы с движком InnoDB исчезли из моей базы данных. Я пытался их воссоздать, но mysql все время говорил мне 1146: Table ‘xxx’ doesn’t exist , пока я не восстановил свою базу данных и не перезапустил службу mysql.
Мне кажется, что нужно читать бинарные файлы InnoDB.
У меня была такая же проблема и я не могу получить хороший совет для этого через Интернет, поэтому я поделился этим для вас и для всех, кто нуждается.
В моей ситуации я копирую базу данных (все файлы: frm, myd) в папку данных в папке данных MySQL (используя Wamp at home). Все было в порядке, пока я не хочу создать таблицу и имею ошибку #1146 Table ‘. ‘ doesn’t exist! .
Я использую Wamp 2.1 с MySQL версии 5.5.16.
Экспорт базы данных в файл;
проверить, действительно ли экспортированный файл в порядке!
отбросить базу данных, где есть проблемы;
создать новую базу данных с тем же именем, что и последняя,
импортируйте файл в базу данных.
ДЛЯ МЕНЯ РЕШЕНА ПРОБЛЕМА. Теперь я могу создавать таблицы снова без ошибок.
В моем случае я выполнил эту команду, даже если таблица не была видна в PhpMyAdmin:
DROP TABLE mytable
Работал для меня!
Перезапуск MySQL отлично работает для меня.
У меня была та же проблема. Я попытался создать таблицу в mysql и получил ту же ошибку. Я перезапустил сервер mysql и запустил команду и смог создать/перенести таблицу после повторения.
Проверьте имена файлов.
Возможно, вам понадобится создать новую базу данных в phpmyadmin, которая соответствует базе данных, которую вы пытаетесь импортировать.
В качестве pprakash упоминается выше, копирование файлов table.frm И файл ibdata1 работал у меня. (Я бы просто прокомментировал этот комментарий, но это требование SO для 50 пунктов означает, что я должен предоставить решение, даже если это просто передел существующего. странный.)
- Закройте выделенный клиентом клиент-проводник DB (например, Workbench).
- Остановить службу MySQL (хост Windows).
- Сделайте безопасную копию практически всего!
- Сохраните копию файлов таблиц (например, mytable.frm) в папку данных схемы (например, MySQL Server/data/).
- Сохраните копию файла ibdata1 в папке с данными (например, MySQL Server/data).
- Перезапустите службу MySQL.
- Проверьте, что таблицы теперь доступны, доступны для запросов и т.д. в вашем клиенте проводника DB.
После этого все было хорошо. (Не забудьте сделать резервную копию, если у вас есть успех!)
Сегодня я столкнулся с той же проблемой. Я пытался создать таблицу users , и мне было предложено ERROR 1146 (42S02): Table users doesn’t exist , что не имело никакого смысла, потому что я просто пытался создать таблицу!!
Затем я попытался удалить таблицу, набрав DROP TABLE users , зная, что она потерпит неудачу, потому что она не существует, и я получил сообщение об ошибке Unknown table users . Получив эту ошибку, я попытался снова создать таблицу, и, как ни странно, она успешно создала таблицу!
Моя интуиция заключается в том, что я, вероятно, создал эту таблицу раньше, и она каким-то образом не была полностью очищена. Явным образом сказал DROP TABLE мне удалось reset внутреннее состояние каким-то образом? Но это только моя догадка.
Короче говоря, попробуйте DROP любую таблицу, которую вы создаете, и СОЗДАЙТЕ ее снова.
Сегодня я столкнулся с такой же проблемой. Я был в очень сложной ситуации, но какой идентификатор я создал таблицу с разным именем, например (modulemaster не создавал, затем я создавал modulemaster1), и после создания таблицы я просто делаю таблицу переименования.
Для меня это была проблема с верхним/нижним регистром. Я должен был удостовериться, что имя файла таблицы совпало в запросе удаления, notifications таблицах были не такими же, как Notifications . Я исправил его, сопоставив случай с именем таблицы с запросом и сообщением MySQLWorkbench.
Что странно, так это то, что эта ошибка появилась в обработанном sql-заявлении. Не знаю, что вызвало чувствительность этого случая. Возможно, обновление AWS AWS.
В моем случае параметр MySQL; lower_case_table_names был настроен = 0 .
Он вызывает запросы, связанные с использованием верхних регистров, не будет работать.
У меня была эта проблема из-за срабатывания триггера. Работала после того, как я удалил триггер.
У меня была такая же проблема. Это произошло после ошибки запуска Windows, похоже, из-за этого некоторые файлы были повреждены. Я снова импортировал БД из сохраненного script, и он отлично работает.
Я получил эту проблему после копирования файла таблицы mytable.idb из другого места. Чтобы устранить эту проблему, я сделал следующее:
Скопировать файл mytable.idb
Причина, по которой я столкнулся, состояла в том, что у меня было два файла «models.py», которые содержали несколько разных полей. Я разрешил это:
- удаление одного из файлов models.py
- исправление ссылок на удаленный файл
- затем запустите manage.py syncdb
Недавно у меня была такая же проблема, но на Linux Server. База данных была разбита, и я восстановил ее из резервной копии на основе простого копирования /var/lib/mysql/* (аналоговая папка DATA mysql в wamp). После восстановления мне пришлось создать новую таблицу и получить mysql-ошибку # 1146. Я попытался перезапустить mysql, и он сказал, что это не может начаться. Я проверил журналы mysql и обнаружил, что mysql просто не имеет доступа к своим файлам DB. Я проверил информацию о владельце /var/lib/mysql/ * и получил ‘myuser:myuser’ (myuser is me). Но это должно быть ‘mysql:adm’ (так это собственная машина разработчика), поэтому я сменил владельца на «mysql: adm». И после этого mysql начал нормально, и я мог создавать таблицы или выполнять любые другие операции.
Итак, после перемещения файлов базы данных или восстановления из резервных копий проверьте доступность буферов для mysql.
Надеюсь, что это поможет.
запустить из CMD и% path% = установить в mysql/bin
mysql_upgrade -u user -ppassword
Имена столбцов должны быть уникальными в таблице. Вы не можете иметь два столбца с именем asd в той же таблице.
Источник
While using an older VM with CentOS7 installed, I attempted to remove the default MySQL v5.5(ish) installation and replace it with a more recent MariaDB v10.5 for a Docker experiment. While trying to line up my DB version types due to a 16-character limit for the db usernames in older versions of MySQL, I ran into: “ERROR 1146 (42S02) at line 1: Table ‘mysql.global_priv’ doesn’t exist”.
This was an odd one, as I even removed the original MySQL completely with:
(IMPORTANT: DON’T do this unless you have your existing data backed up with a mysqldump!! Read More here: https://mariadb.com/kb/en/making-backups-with-mysqldump/)
sudo service mysql stop; sudo yum remove mysql; |
Then we need to add a recent version of MariaDB that works with CentOS7:
sudo tee /etc/yum.repos.d/mariadb.repo<<EOF [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.5/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1 EOF |
Next we update the cache after we added MariaDB to yum
:
Now we install MariaDB from the repo we configured above:
sudo yum install MariaDB—server MariaDB—client |
Be sure to say “yes” to the GPG key, like so:
..... Importing GPG key 0x1BB943DB: ... Is this ok [y/N]: y |
Now we need to start the newly installed mariadb.service so we can test it out and secure the MySQL-compatible database:
sudo systemctl start mariadb |
If you want mariadb.service to be started at boot, do this:
sudo systemctl enable mariadb |
Now we need to make sure that we allow connection to port 3306, like so:
sudo firewall—cmd —add—service=mysql —permanent sudo firewall—cmd —reload |
Everything seemed to go fine, until the next step…
sudo mysql_secure_installation |
While trying to harden the MariaDB upgrade installation with, the above command, I got the following error(s):
Enable unix_socket authentication? [Y/n] Y ERROR 1146 (42S02) at line 1: Table ‘mysql.global_priv’ doesn‘t exist |
and/or
Change the root password? [Y/n] Y ERROR 1146 (42S02) at line 1: Table ‘mysql.global_priv’ doesn‘t exist |
I searched in the “usual places” for an obvious fix. This seemed like it might be some kind of local Linux CentOS7 user permissions issue, at first. I went of on a few side quests and peered down the rabbit hole of Linux User permissions for MySQL packages… but I stopped myself. Anytime you see an “error on line 1” it is likely due to some kind of configuration problem, otherwise a “permission denied” or “no such user” error would be more likely.
So after I got my head right, I then tried to completely uninstall all of MariaDB, just to start from scratch (IMPORTANT: DON’T do this unless you have used mysqldump for your existing data as a back up!!)
sudo systemctl stop mariadb sudo yum remove mariadb |
After removing MariaDB, completely we need to start over. Just to be sure, we can reboot with:
After going through the entire installation process for a 2nd time, just as before (minus adding the MariaDB repo since that was done once already), I ran into the exact same issue again:
Change the root password? [Y/n] Y ERROR 1146 (42S02) at line 1: Table ‘mysql.global_priv’ doesn‘t exist |
FAIL.
After spending awhile longer trying to understand what went wrong, I attempted the following successful “fix” to the error:
And I noticed this about 30% through the mysql_upgrade process:
........... mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.user OK Upgrading from a version before MariaDB—10.1 Phase 2/7: Installing used storage engines Checking for tables with unknown storage engine Phase 3/7: Fixing views Phase 4/7: Running ‘mysql_fix_privilege_tables’ Phase 5/7: Fixing table and database names Phase 6/7: Checking and upgrading tables Processing databases information_schema ........... |
…. and after that: Ka-ching!
sudo mysql_secure_installation .......... Enable unix_socket authentication? [Y/n] Y Enabled successfully! Reloading privilege tables.. … Success! |
My MySQL client tools and CLI access to the newly updated and clean installed MariaDB worked flawlessly.
I haven’t had to run the mysql_update command to solve a problem with setting MySQL/MariaDB to start & run in many years, but the error message and missing table issue was pretty obscure. Bonus tip: if you get “error access denied” during
</p> <!— /wp:paragraph —> <!— wp:urvanov—syntax—highlighter/code—block —> <div class=«wp-block-urvanov-syntax-highlighter-code-block»><pre class=«lang:default decode:true «>sudo mysql_update |
I hope this helps someone else out! Going through this fix worked well enough for me to do my Docker tests and was still faster than spinning up a shiny new VM or embarking on an entirely new Docker Stack from scratch.
Попытался сделать дамп (бэкап) БД через родную для MySQL утилиту mysqldump и получил ошибку:
Got error: 1146: Table `table_name` doesn't exist when using LOCK TABLES
Вместо table_name имя несуществующей таблицы. Т.е. сразу после введения в консоль/терминал команды:
mysqldump --user=root -p db_name > db_name.sql
получаю такую ошибку. Файл дампа создаётся, но он пустой, утилита mysqldump после выдачи этой ошибки перестаёт работать.
Попытки ухода от проблемы
Не стал обращать внимание на mysqldump и взял другие инструменты пытаясь убежать от проблемы, так сказать, решил применить альтернативные пути решения. Пробовал сделать дамп базы через менеджер баз данных phpMyAdmin и всё получилось, но при импорте (поднятии) дампа возникли ошибки. Так же пробовал сделать тамп через родной для MySQL графический менеджер БД MySQL Workbench, но он тоже стал ругаться и выдавать эту обишку ибо он так же пользуется утилитой командной строки mysqldump при экспорте БД. Пробовал экспортировать дамп БД так же при помощи Sypex Dumper, он сперва вроде работал, но потом тоже выдал аналогичную ошибку. Короче говоря зря я только тратил время с этими альтернативными инструментами работы с БД. Если не работает родной mysqldump, то и другие программы врядли помогут ибо с базой что-то не так и надо разбираться.
Попытки решения проблемы
Что же это за «doesn’t exist when using LOCK TABLES» такой. Придётся разобраться. Если перевести текст сообщения об ошибке, то в нём говорится примерно следующее: «Таблица `table_name` не существует при использовании команды LOCK TABLES». Т.е. не была найдена указанная таблица, что понятно, ведь её никто там не создавал и быть её не должно.
Если посмотреть базу через разные графические менеджеры БД вроде браузерного phpMyAdmin или десктопного MySQL Workbench, то такой таблицы в базе действительно нет и не должно быть, но СУБД MySQL почему-то считает, что она там есть или должна быть, однако если посмотреть базу через родной консольный менеджер БД mysql (MySQL monitor), то такая таблица там будет в общем списке таблиц. Надо разбираться.
Поискал ответы на свои вопросы в служебной таблице information_schema, но это ни к чему не привело. Сделал пакетную проверку и восстановление всех таблиц базы данных через родную утилиту mysqlcheck, но это не помогло. При проверке утилита так же нашла эту несуществующую таблицу и стала ругаться, что она не найдена, но работу доделала до конца:
Repairing tables table_name Error : Table 'table_name' doesn't exist status : Operation failed
Решение проблемы
Воспользовался стандартным родным консольным менеджером БД, который так и называется mysql, он же полностью MySQL monitor. Зашёл под нужным пользователем БД, выбрал базу, вывел список таблиц базы и оказалось в этом списке действительно есть та самая несуществующая таблица, которая была указана в тексте сообщения об ошибке. Так же при попытке создать таблицу с таким именем получаешь сообщение об ошибке, что такая таблица уже существует. Решил посмотреть что же есть в этой таблице. Получил сообщение об ошибке, что такой таблицы не существует, что не удивительно, ведь её и не должно существовать, но СУБД MySQL считает, что она есть и выводит её в общем списке таблиц. Решил удалить эту таблицу и тоже получил сообщение, что такой таблицы нет и удалять нечего. После этого вновь запросил список всех таблиц базы данных и о чудо, это несуществующей таблицы в списке больше нет.
Таким образом, что бы решить проблему «Got error: 1146: Table `table_name` doesn’t exist when using LOCK TABLES» при работе с БД надо пользоваться родным консольным менеджером БД MySQL monitor (mysql). Попытайтесь сперва создать таблицу с таким именем и получите сообщеине об ошибке, что такая таблица уже есть в БД. Попытайтесь удалить эту таблицу и получите сообщение, что её и так нет. Во время одного из этих действий СУБД MySQL ещё раз проверит базу и убедится, что такой таблицы нет и вычеркнет её из мета информации БД, т.е. забудет про эту несуществующую таблицу, не будет выводить её в списке всех таблиц и не будет выводить эту ошикбу. Скорее всего проверка целостности базы происходит при попытке удаления этой несуществующей таблицы, поэтому пробовать создавать её и не нужно. Так же, возможно, пользоваться консольным MySQL monitor тоже не обязательно и можно послать SQL-запрос СУБД на удаление этой таблицы откуда удобно, просто в MySQL monitor эта таблица сперва отображается в общем списке а в остальных менеджерах баз данных не показывается. В общем точно не знаю что в моём алгоритме действий лишнее, а что необходимое, я лишь говорю как я решил эту проблему. Задача нетривиальная и попытаться воссоздать эту ошибку с целостностью базы ещё раз для учебных целей оказалось не просто. У меня был лишь один проход решения проблемы, поэтому, что точно её решило я не знаю.
Для тех кто всё ещё не понял, скажу кратко. Просто воспользуйетесь консольным MySQL monitor и через него попробуйте удалить эту несуществующую таблицу. При запросе удаления СУБД MySQL проверит базу, поймёт, что такой таблицы действительно нет и всё будет в порядке. Проблема решена, вот и всё.
На всякий случай прикладываю список консольных команд и SQL-запросов, которые я использовал в ходе решения этой проблемы. Хотел их писать сразу по ходу изложения, но решил, что это не нужно для тех кто и так знает, а для остальных (забывчивых) напишу список ниже, названия файлов, пользователей, таблиц и баз, естественно взяты для примера, подставляйте свои.
Для начала консольная команды.
Попытка сделать дамп базы через утилиту mysqldump:
mysqldump --user=root -p db_name > db_name.sql
Пакетная проверка и восстановление всех таблиц базы данных через родную утилиту mysqlcheck:
mysqlcheck --user=USER --password=PASSWORD --auto-repair --check --all-databases
Вход в консольный менеджер баз данных MySQL monitor с указанием данных:
mysql --user=USER --password=PASSWORD
Далее работает непосрдественно с БД, поэтому теперь пойдут SQL-запросы.
Просмотр всех доступных для пользователя (для просмотра) баз данных:
SHOW DATABASES;
Выбор необходимой рабочей базы данных для работы с ней:
USE <db_title>;
Просмотр всех доступных для пользователя таблиц выбранной базы данных:
SHOW TABLES;
Просмотр содержимого указанной таблицы (с лимитом записей/строк):
SELECT * FROM table_title LIMIT 100;
Удаление таблицы из базы данных:
DROP TABLE table_title;
Следует понимать, что несуществующая таблица, это ошибка структуры базы данных, т.е. надо копать в эту сторону, восстанавливать структуру БД, а не таблиц.
Если моё решение не помогло, то можно попробовать воспользоваться утилитой «innodb tools» (Percona Data Recovery Tool for InnoDB) (https://code.google(точка)com/archive/p/innodb-tools/). Ещё есть решение описанное здесь (http://adw0rd(точка)com/2009/07/02/recovery-innodb/), но там народ в комментариях говорит, что это не всегда помогает.
На этом все, всем спасибо за внимание.