Предположим, у вас есть большой проект, написанный на c ++, который содержит тысячу файлов .cpp и тысячу файлов .h. И давайте предположим, что проект также зависит от десяти статических библиотек. Скажем, мы работаем над Windows, и мы строим наш проект в Visual Studio 20xx. Когда вы нажимаете Ctrl + F7 Visual Studio, чтобы начать компиляцию всего решения (предположим, что у нас есть только один проект в решении)
В чем смысл компиляции?
Второй этап компиляции выполняется Linker.Linker должен объединить весь объектный файл и построить окончательно вывод (который может быть исполняемым или библиотекой)
Шаги при связывании проекта
error LNK2001: unresolved external symbol "void __cdecl foo(void)" (?foo@@YAXXZ)
Наблюдение
Как решить эту ошибку
Ошибка времени компилятора:
Ошибка времени компоновщика
#pragma once
, чтобы компилятор не включал один заголовок если он уже был включен в текущий .cpp, который скомпилирован Перейти к: xampp\mysql\data\dbname
внутри dbname имеют файл tablename.frm и tablename.ibd. удалите его и перезапустите mysql и повторите попытку.
Была аналогичная проблема с таблицей призраков. К счастью, у меня был дамп SQL перед сбоем.
В моем случае мне пришлось:
/var/mysql
отключить резервную копию /var/mysql/{dbname}
ПРИМЕЧАНИЕ. Требуется файл дампа.
Я не знаю причины, но в моем случае я решил просто отключить и включить проверку внешних ключей
SET FOREIGN_KEY_CHECKS=0;
SET FOREIGN_KEY_CHECKS=1;
Если в названии таблицы есть период, это не сработает для
SELECT * FROM poorly_named.table;
Используйте обратные выходы, чтобы найти его в таблице
SELECT * FROM `poorly_named.table`;
Похоже, что проблема должна выполняться (по крайней мере, у меня и нескольких других) с недопустимыми (поврежденными?) файлами логов innodb.
Вот решения, большинство из которых требуют перезагрузки mysql.
cp -a /var/lib/mysql /var/lib/mysql-backup
/var/lib/mysql
mysqldump >dbase.mysql
/var/lib/mysql
/var/lib/mysql-backup
в /var/lib/mysql
mysqldump < dbase.mysql
Я получаю эту проблему, когда случай для имени таблицы, который я использую, отключен. Таким образом, таблица называется «db», но я использовал «DB» в select statement. Убедитесь, что корпус тот же.
Для меня в Mac OS (MySQL DMG Installation) простая перезагрузка сервера MySQL решила проблему. Я предполагаю, что гибернация вызвала это.
У меня была та же проблема, но это произошло не из-за скрытого персонажа или «таблицы schroedinger». Проблема (как указано выше) появилась после восстановления. Я использую администратор MySQL версии 1.2.16. Когда восстановление должно быть выполнено, вы должны снять флажок ORIGINAL
в целевой схеме и выбрать имя своей базы данных из раскрывающегося списка. После этого проблема была исправлена. По крайней мере, это было причиной в моей базе данных.
Возможно, у вас есть скрытый символ в имени вашей таблицы. Они не отображаются, когда вы показываете таблицы. Можете ли вы сделать «SHOW CREATE TABLE TABLE_ONE» и вкладку заполнить «TABLE_ONE» и посмотреть, содержит ли она какие-либо скрытые символы. Кроме того, вы попытались сбросить и переделать таблицы. Просто чтобы убедиться, что с привилегиями ничего нет, и что скрытых символов нет.
Сегодня возникла такая же проблема. Это проблема «Чувствительность регистра идентификатора» mysql.
Пожалуйста, проверьте соответствующий файл данных. Очень вероятно, что имя файла в нижнем регистре файловой системы, но имя таблицы, указанное в команде «show tables», находится в верхнем регистре. Если системная переменная «lower_case_table_names
» равна 0, запрос вернет «таблица не существует», потому что сопоставление имен чувствительно к регистру, когда «lower_case_table_names
» равно 0.
После переустановки MySQL у меня возникла такая же проблема, кажется, что во время установки некоторые файлы конфигурации, хранящие данные о файлах журнала InnoDB, эти файлы ib_logfile * (они являются файлами журнала справа?), перезаписываются. Чтобы решить эту проблему, я просто удалил файлы ib_logfile *.
Я потратил три дня на этот кошмар. В идеале у вас должна быть резервная копия, которую вы можете восстановить, а затем просто опустите поврежденную таблицу. Подобные ошибки могут привести к увеличению вашего ibdata1 огромного (размер 100 ГБ + для скромных таблиц)
Если у вас нет последней резервной копии, например, если вы полагаетесь на mySqlDump , то ваши резервные копии, вероятно, в какой-то момент в прошлом были сломаны. Вам нужно будет экспортировать базы данных, которые, конечно, вы не можете сделать, потому что вы получите ошибки блокировки при запуске mySqlDump.
Итак, в качестве обходного пути перейдите к /var/log/mysql/database_name/
и удалите имя_таблицы. *
Затем немедленно попытайтесь сбросить таблицу; это должно теперь работать. Теперь восстановите базу данных в новой базе данных и перестройте отсутствующие таблицы. Затем выгрузите разбитую базу данных.
В нашем случае мы также постоянно получали mysql has gone away
сообщения в случайные интервалы во всех базах данных; как только поврежденная база данных была удалена, все стало нормальным.
Попробуйте запустить sql-запрос, чтобы отбросить табличное пространство перед тем, как выполнить idb-файл:
ALTER TABLE mydatabase.mytable DISCARD TABLESPACE;
Копировать idb-файл
ALTER TABLE mydatabase.mytable IMPORT TABLESPACE;
Перезапустить MySql
Скопировать только файл ibdata1
из старого каталога данных. Не копируйте файлы ib_logfile1
или ib_logfile0
. Это заставит MySQL больше не запускаться.
O.k. это будет звучать довольно абсурдно, но я буду юмором. Для меня проблема решена, когда я изменил свое заявление на следующее:
SELECT * FROM `table`
Я сделал два изменения 1.) Сделал нижний регистр имени таблицы - я знаю !! 2.) Используется специальный символ цитаты = `: Это ключ над вашей TAB
. Решение звучит абсурдно, но это сработало, и это субботний вечер, и я работаю с 9 утра. Итак, возьмем:)
Удачи.
У меня возникла эта проблема после обновления WAMP, но без резервного копирования базы данных.
Это сработало для меня:
ib_logfile0
и ib_logfile1
Теперь вы должны быть в состоянии сделать резервные копии ваших баз данных. Однако после перезагрузки сервера у вас все еще будут проблемы. Теперь переустановите WAMP и импортируйте свои базы данных.
В моем случае это был параметр SQLCA.DBParm
.
Я использовал
SQLCA.DBParm = "Databse = "sle_database.text""
, но он должен быть
SQLCA.DBParm = "Database='" +sle_database.text+ "'"
Объяснение:
Вы собираетесь объединить три строки:
1. Database=' - "Database='"
2. (name of the database) - +sle_database.text+
3. ' - "'" (means " ' " without space)
Не используйте пробелы в quatermarks. Спасибо моему коллеге Ян.
У меня была та же проблема, и я искал 2-3 дня, но решение для меня было действительно глупо.
Перезапустить mysql
blockquote>
$ sudo service mysql restart
Теперь таблицы становятся доступными.
mysqldump -u user -ppass dbname > D:\Back-ups\dbname.sql
mysql -u user -ppass dbname < D:\Back-ups\dbname.sql
Теперь все таблицы в базе данных были полностью восстановлены. Попробуйте ..
SELECT * FROM dbname.tablename;
Я установил MariaDB на новый компьютер, остановил службу службы Mysql, переименовал папку данных в данные - я решил проблему с копированием только Mysql \ data \ table_folders и ibdata1 из разбитого файла данных HD MySql. Папка в новую установленную папку данных mysql.
Я пропустил ib_logfile0 и ib_logfile1 (в противном случае сервер не запустил службу)
Запустил службу mysql.
Затем сервер работает.
Еще один ответ, который, я думаю, стоит здесь подняться (потому что я пришел сюда с той же проблемой, и это оказалось для меня ответом):
Двойная проверка того, что имя таблицы в вашем запросе написано точно так же, как и в базе данных.
Вид очевидной новички, но такие вещи, как «пользователь» и «пользователи», могут отключать людей, и я подумал, что это будет полезный ответ иметь в списке здесь. :)