Не запускается mysql

Действие пользователяUser Action

Проверьте следующую информацию и исправьте инструкцию соответствующим образом.Verify the following information and correct the statement as appropriate.


  • Имя объекта записано правильно.The object name is spelled correctly.

  • Контекст текущей базы данных является правильным.The current database context is correct. Если не указано имя базы данных для объекта, то объект должен существовать в текущей базе данных.If a database name for the object is not specified, the object must exist in the current database. Дополнительные сведения об установке контекста базы данных см. в статье USE (Transact-SQL).For more information about setting the database context, see USE (Transact-SQL).

  • Объект существует в системных таблицах.The object exists in the system tables. Чтобы проверить существование таблицы или другого объекта на уровне схемы, отправьте запрос к представлению каталога sys.objects.To verify whether a table or other schema-scoped object exists, query the sys.objects catalog view. Если объект отсутствует в системных таблицах, значит он был удален или у пользователя отсутствуют разрешения на просмотр метаданных объекта.If the object is not in the system tables, the object has been deleted, or the user does not have permissions to view the object metadata. Дополнительные сведения о разрешениях на просмотр метаданных объекта см. в статье Настройка видимости метаданных.For more information about permissions to view object metadata, see Metadata Visibility Configuration.

  • Объект содержится в применяемой по умолчанию схеме пользователя.The object is contained in the default schema of the user. Если его там нет, имя объекта нужно указывать в двухкомпонентном формате: имя_схемы.имя_объекта.If it is not, the object must be specified using the two-part format schema_name.object_name. Следует отметить, что скалярные функции должны всегда вызываться с использованием по меньшей мере двухкомпонентного имени.Note that scalar-valued functions must always be invoked by using at least a two-part name.

  • Учет регистра в параметрах сортировки базы данных.The case sensitivity of the database collation.

    Если в базе данных используются параметры сортировки с учетом регистра, то имя объекта должно согласовываться по регистру с именем объекта в базе данных.When a database uses a case-sensitive collation, the object name must match the case of the object in the database. Например, если определенный объект имеет имя MyTable в базе данных с параметрами сортировки с учетом регистра, запросы, в которых этот объект именуется как mytable или Mytable, будут возвращать ошибку 208, так как имена объектов не согласуются.For example, when an object is specified as MyTable in a database with a case sensitive collation, queries that refer to the object as mytable or Mytable will cause error 208 to return because the object names do not match.

    Параметры сортировки базы данных можно проверить, введя следующую инструкцию.You can verify the database collation by running the following statement.

    Аббревиатура CS в имени параметров сортировки указывает, что учитывается регистр символов.The abbreviation CS in the collation name indicates the collation is case sensitive. Например, значение Latin1_General_CS_AS определяет параметры сортировки с учетом регистра и с учетом диакритических знаков.For example, Latin1_General_CS_AS is a case sensitive, accent sensitive collation. Значение CI указывает, что в параметрах сортировки не учитывается регистр.CI indicates a case insensitive collation.

  • Пользователь имеет разрешение на получение доступа к объекту.The user has permission to access the object. Чтобы проверить, какие разрешения имеет пользователь для доступа к объекту, можно воспользоваться системной функцией Has_Perms_By_Name.To verify the permissions the user has on the object, use the Has_Perms_By_Name system function.

Завершение длительной транзакцииComplete or kill a long-running transaction

Обнаружение длительных транзакцийDiscovering long-running transactions

Очень длительная транзакция может привести к переполнению журнала транзакций.A very long-running transaction can cause the transaction log to fill. Длительные транзакции можно обнаружить следующими способами:To look for long-running transactions, use one of the following:

  • sys.dm_tran_database_transactions.sys.dm_tran_database_transactions. Данное динамическое административное представление возвращает сведения о транзакциях на уровне базы данных.This dynamic management view returns information about transactions at the database level. Столбцы этого представления содержат сведения о времени первой записи журнала (database_transaction_begin_time), текущем состоянии транзакции (database_transaction_state)и регистрационном номере (LSN) первой записи в журнале транзакций (database_transaction_begin_lsn).For a long-running transaction, columns of particular interest include the time of the first log record (database_transaction_begin_time), the current state of the transaction (database_transaction_state), and the log sequence number (LSN) of the begin record in the transaction log (database_transaction_begin_lsn).

  • DBCC OPENTRAN.DBCC OPENTRAN. Эта инструкция позволяет установить идентификатор владельца транзакции, таким образом, можно отследить источник транзакции для более упорядоченной остановки (фиксацией, а не откатом).This statement lets you identify the user ID of the owner of the transaction, so you can potentially track down the source of the transaction for a more orderly termination (committing it rather than rolling it back).

Завершение транзакцииKill a transaction

В некоторых случаях может потребоваться завершить процесс, для этого можно применить инструкцию KILL .Sometimes you just have to end the process; you may have to use the KILL statement

Ее следует использовать с осторожностью, особенно если запущены критические процессы, которые нельзя завершать.Please use this statement very carefully, especially when critical processes are running that you don’t want to kill. Дополнительные сведения см

в разделе KILL (Transact-SQL).For more information, see KILL (Transact-SQL)

См. также:See Also

Поддержка браузера для служб Reporting Services и Power ViewBrowser Support for Reporting Services and Power ViewСправочник по ошибкам и событиям (службы Reporting Services)Errors and events (Reporting Services)Устранение неполадок с извлечением данных с помощью отчетов служб Reporting ServicesTroubleshoot Data Retrieval issues with Reporting Services ReportsУстранение неполадок с подписками и доставкой служб Reporting ServicesTroubleshoot Reporting Services Subscriptions and Delivery


Нужна помощь? Форум MSDN, Stackoverflow, SQL Server на форумах отзывов об AzureNeed help? MSDN Forum, Stackoverflow, SQL Server on the Azure Feedback Forums

КомментарииRemarks

Некоторые сообщения об ошибках могут возникнуть в нескольких точках кода компонента MicrosoftMicrosoft SQL ServerSQL Server Компонент Database EngineDatabase Engine.Some error messages can be raised at multiple points in the code for the MicrosoftMicrosoft SQL ServerSQL Server Компонент Database EngineDatabase Engine. Например, в нескольких различных ситуациях может возникнуть ошибка «1105».For example, an «1105» error can be raised for several different conditions. Каждому определенному условию, вызывающему ошибку, назначен уникальный код состояния.Each specific condition that raises the error assigns a unique state code.

При просмотре баз данных известных проблем, например базы знаний MicrosoftMicrosoft, можно по номеру состояния выяснить, соответствует ли запись о проблеме той ошибке, которая возникла.When viewing databases of known issues, such as the MicrosoftMicrosoft Knowledge Base, you can use the state number to determine if the recorded issue might be the same as the error you have encountered. Например, если в статье базы знаний рассматривается сообщение об ошибке 1105 с состоянием 2, а полученное сообщение об ошибке 1105 имеет состояние 3, то в этом случае ошибка произошла по иной причине, чем ошибка, описанная в статье.For example, if a Knowledge Base article discusses an 1105 error message with a state of 2, and the 1105 error message you received had a state of 3, your error probably had a different cause than the one reported in the article.

Кроме того, сотрудник службы поддержки SQL ServerSQL Server может использовать код состояния ошибки для поиска в исходном коде места, где произошла ошибка, это поможет ему в диагностировании неполадки.A SQL ServerSQL Server support engineer can also use the state code from an error to find the location in the source code where that error is being raised, which may provide additional ideas on how to diagnose the problem.

Функцию ERROR_STATE можно вызывать в любом месте области видимости блока CATCH.ERROR_STATE may be called anywhere within the scope of a CATCH block.

Функция ERROR_STATE возвращает состояние ошибки вне зависимости от числа ее запусков или места запуска в области видимости блока CATCH.ERROR_STATE returns the error state regardless of how many times it is run, or where it is run within the scope of the CATCH block. Это отличается от поведения таких функций, как @@ERROR, которые возвращают номер ошибки в инструкции лишь сразу после ее возникновения или в первой инструкции блока CATCH.This is in contrast to functions like @@ERROR, which only returns the error number in the statement immediately after the one that causes an error, or in the first statement of a CATCH block.

Во вложенных блоках CATCH функция ERROR_STATE возвращает состояние ошибки, относящееся к области видимости блока CATCH, в которой она вызвана.In nested CATCH blocks, ERROR_STATE returns the error state specific to the scope of the CATCH block in which it is referenced. Например, блок CATCH внешней конструкции TRY…CATCH может содержать вложенную конструкцию TRY…CATCH.For example, the CATCH block of an outer TRY…CATCH construct could have a nested TRY…CATCH construct. Во вложенном блоке CATCH функция ERROR_STATE возвращает состояние ошибки, вызвавшей вложенный блок CATCH.Within the nested CATCH block, ERROR_STATE returns the state from the error that invoked the nested CATCH block. Если функция ERROR_STATE запускается во внешнем блоке CATCH, то она возвращает состояние ошибки, вызвавшей внешний блок CATCH.If ERROR_STATE is run in the outer CATCH block, it returns the state from the error that invoked that CATCH block.

Ошибки, не обрабатываемые конструкцией TRY…CATCHErrors Unaffected by a TRY…CATCH Construct

Конструкции TRY…CATCH не обрабатывают следующие условия.TRY…CATCH constructs do not trap the following conditions:

  • Предупреждения и информационные сообщения с уровнем серьезности 10 или ниже.Warnings or informational messages that have a severity of 10 or lower.

  • Ошибки с уровнем серьезности 20 или выше, которые приводят к завершению обработки задачи компонентом Компонент SQL Server Database EngineSQL Server Database Engine для сеанса.Errors that have a severity of 20 or higher that stop the Компонент SQL Server Database EngineSQL Server Database Engine task processing for the session. Если возникла ошибка с уровнем серьезности 20 или выше, а подключение к базе данных не разорвано, конструкция TRY…CATCH обработает эту ошибку.If an error occurs that has severity of 20 or higher and the database connection is not disrupted, TRY…CATCH will handle the error.

  • Такие запросы, как прерывания от клиента или разрыв соединения, вызванный с клиента.Attentions, such as client-interrupt requests or broken client connections.

  • Завершение сеанса системным администратором с помощью инструкции KILL.When the session is ended by a system administrator by using the KILL statement.

Следующие типы ошибок не обрабатываются блоком CATCH, если они возникают на том же самом уровне выполнения, что и конструкция TRY…CATCH.The following types of errors are not handled by a CATCH block when they occur at the same level of execution as the TRY…CATCH construct:


  • Ошибки компиляции, такие как ошибки синтаксиса, в результате которых пакет не будет выполнен.Compile errors, such as syntax errors, that prevent a batch from running.

  • Ошибки, происходящие во время повторной компиляции уровня инструкций, такие как ошибки разрешения имен объектов, которые происходят после компиляции из-за отложенного разрешения имен.Errors that occur during statement-level recompilation, such as object name resolution errors that occur after compilation because of deferred name resolution.

  • Ошибки разрешения имен объектовObject name resolution errors

Эти ошибки возвращаются на уровень, на котором запускались пакеты, хранимые процедуры или триггеры.These errors are returned to the level that ran the batch, stored procedure, or trigger.

Если ошибка возникает во время компиляции или перекомпиляции уровня инструкций на нижнем уровне исполнения (например, при выполнении процедуры sp_executesql или определенной пользователем хранимой процедуры) внутри блока TRY, эта ошибка возникнет на уровне, более низком, чем конструкция TRY…CATCH, и будет обрабатываться соответствующим блоком CATCH.If an error occurs during compilation or statement-level recompilation at a lower execution level (for example, when executing sp_executesql or a user-defined stored procedure) inside the TRY block, the error occurs at a lower level than the TRY…CATCH construct and will be handled by the associated CATCH block.

Следующий пример показывает, как ошибка разрешения имени объекта, формируемая инструкцией , не отлавливается конструкцией , но отлавливается блоком , когда та же самая инструкция выполняется внутри хранимой процедуры.The following example shows how an object name resolution error generated by a statement is not caught by the construct, but is caught by the block when the same statement is executed inside a stored procedure.

Эта ошибка не отлавливается, а управление передается за пределы конструкции на уровень выше.The error is not caught and control passes out of the construct to the next higher level.

Выполнение инструкции внутри хранимой процедуры приведет к ошибке, которая возникнет на уровне ниже, чем блок .Running the statement inside a stored procedure will cause the error to occur at a level lower than the block. Такая ошибка будет обработана конструкцией .The error will be handled by the construct.

Поврежденные таблицы

Некоторые действия могут повредить  таблицы MySQL. Это означает, что произошла ошибка и данные, содержащиеся в них, не читаются. Попытки чтения данных из поврежденной таблицы обычно приводят к сбою сервера.

Вот распространенные причины поврежденных таблиц:

  • Сервер MySQL остановился в середине записи.
  • Внешняя программа изменяет таблицу, которая одновременно изменяется сервером.
  • Машина неожиданно выключилась.
  • Аппаратное обеспечение компьютера вышло из строя.
  • Где-то в коде MySQL есть ошибка.

Если вы подозреваете, что одна из ваших таблиц была повреждена, вы должны сделать резервную копию вашего каталога данных перед устранением неполадок или попыткой исправить таблицу. Это поможет минимизировать риск потери данных.

Сначала остановите MySQL:

Затем скопируйте все свои данные в новый каталог. В системах Ubuntu каталогом данных по умолчанию является /var/lib/mysql/:


После создания резервной копии вы можете начать проверку таблицы на наличие повреждений. Если таблица использует механизм хранения MyISAM, вы можете проверить, не повреждена ли она, запустив CHECK TABLE из командной строки MySQL:

В выводе этого оператора появится сообщение о том, повреждена она или нет. Если таблица MyISAM действительно повреждена, ее обычно можно исправить, выполнив REPAIR TABLE:

Если таблица успешно исправлена, вы увидите:

Если это не помогло исправить таблицу, в документации MySQL есть несколько альтернативных методов восстановления поврежденных таблиц.

Если поврежденная таблица использует механизм хранения InnoDB, процесс ее восстановления будет другим. InnoDB – это стандартный механизм хранения MySQL начиная с версии 5.5, он поддерживает автоматическую проверку и исправление ошибок. InnoDB проверяет наличие поврежденных страниц, отслеживая контрольные суммы на каждой странице, которую он читает, и если он находит несоответствие контрольной суммы, он автоматически останавливает сервер MySQL.

Необходимость исправления таблиц InnoDB возникает редко, поскольку InnoDB предоставляет механизм восстановления после сбоя, который может решить большинство проблем при перезапуске сервера. Однако если вы все же столкнулись с такой необходимостью, в документации MySQL рекомендуется использовать .

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

Имея это в виду, попробуйте перезапустить MySQL, чтобы увидеть, позволит ли это вам получить доступ к серверу:

Если сервер по-прежнему недоступен, тогда может быть полезно включить опцию InnoDB force_recovery. Вы можете сделать это, отредактировав файл mysqld.cnf:

В раздел добавьте такую строку:

Сохраните и закройте файл, а затем попробуйте перезапустить MySQL снова. Если вы можете получить доступ к поврежденной таблице, используйте утилиту mysqldump, чтобы выгрузить данные таблицы в новый файл. Вы можете назвать этот файл как угодно, но здесь мы для примера назовем его out.sql:

Затем удалите таблицу из базы данных. Чтобы избежать повторного открытия командной строки MySQL, вы можете использовать следующий синтаксис:

После этого восстановите таблицу с помощью только что созданного файла:

Обратите внимание, что механизм хранения InnoDB обычно более отказоустойчив, чем старый механизм MyISAM. Таблицы, использующие InnoDB, все еще могут быть повреждены, но благодаря функциям автоматического восстановления риск повреждения и сбоев таких таблиц значительно ниже

Заключение

Самое важное при диагностике — понять, что именно вызвало ошибку. Следующие шаги помогут вам в этом:

Первый и самый важный шаг — просмотреть журналы MySQL, которые хранятся в каталоге . Вы можете использовать утилиты командной строки вроде для чтения файлов журнала. Если служба MySQL не запускается, проверьте её состояние с помощью . Или используйте команду (с флагом ) в systemd. Вы также можете проверить файл системного журнала (например, ) на предмет обнаружения ошибок. Попробуйте использовать такие инструменты, как Mytop, glances, top, ps или htop, чтобы проверить, какая программа использует весь ресурс процессора или блокирует машину

Они также помогут определить нехватку памяти, дискового пространства, файловых дескрипторов или какого-либо другого важного ресурса. Если проблема в каком-либо процессе, можно попытаться его принудительно остановить, а затем запустить (при необходимости). Если вы уверены, что проблемы именно на стороне сервера, можете выполнить команды: или , чтобы получить от него ответ. Если при подключении проблема не связана с сервером, проверьте, нормально ли работает клиент. Попробуйте получить какие-либо его выходные данные для устранения неполадок.


С этим читают