Содержание
- MySQL фатальная ошибка во время запроса information_schema (программное обеспечение вызвало прерывание соединения)
- Tales From A Lazy Fat DBA
- Its all about Databases & their performance, troubleshooting & much more …. ¯_(ツ)_/¯
- Likes
- MYSQL startup error: [ERROR] Fatal error: mysql.user table is damaged.
- Unspecified fatal error encountered aborting mysql workbench
- Comments
MySQL фатальная ошибка во время запроса information_schema (программное обеспечение вызвало прерывание соединения)
Я использую базу данных MySQL (5.6) широко через свой .NET-коннектор (6.8.3). Все таблицы создаются с помощью механизма MyISAM по соображениям производительности. У меня есть только один процесс с одним потоком, который обращается к БД последовательно, поэтому нет необходимости в транзакциях и concurrency.
Обратите внимание: это вряд ли будет проблемой конфигурации тайм-аута, потому что мой запрос тривиален. Я прочитал все связанные с таймаутом вопросы (ссылки ниже). Конечно, я могу ошибаться, но говорю просто “увеличить параметр net_write_timeout”, не объясняя, почему именно это может быть актуальным здесь, не является ответом.
Некоторые из моих таблиц динамически создаются во время выполнения программы, поэтому я использую create на первом идиоме использования, со следующим методом, чтобы проверить, существует ли таблица:
Запрос внутри existsCommand выглядит следующим образом (разбивается на две строки для читаемости):
Значение переменной this.existsCommand.Parameters[«@tableName»].Value содержит правильное имя таблицы, которое уже существует в этом случае ( «sample_matches_A_to_A_x» ).
Метод this.connectionPool.Take() возвращает первый объект MySqlConnection из моей коллекции доступных подключений, которая соответствует следующему предикату:
Обычно это работает правильно, в течение нескольких часов, а затем неожиданно возникает исключение в этой строке:
Со следующим содержимым:
Неустранимая ошибка при выполнении команды
в MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(поведение CommandBehavior)
в реализации .SampleMatchesMySqlTable.TableExists(Space baseSpace, Space extendedSpace) в C:…SampleMatchesMySqlTable.cs: строка 168
Невозможно записать данные в транспортное соединение: программное обеспечение вызвало прерывание соединения.
Программное обеспечение вызвало прерывание соединения.
с ErrorCode равным 10053 , а SocketErrorCode – System.Net.Sockets.SocketError.ConnectionAborted
Трассировка стека самого внутреннего исключения:
в System.Net.Sockets.Socket.Send(буфер байта [], смещение Int32, размер Int32, флажок socketFlags SocketFlags)
в System.Net.Sockets.NetworkStream.Write(буфер Byte [], смещение Int32, размер Int32)
Я просмотрел следующие возможные дубликаты и, к сожалению, они здесь не актуальны, кроме одного:
К сожалению, он не предоставляет достаточной информации, чтобы решить, является ли он точным дубликатом и не отвечает.
Здесь есть проблемы с тайм-аутом. Мой запрос мал, возвращает только одно целое число и ищет таблицу в мета-таблице, содержащую что-то вроде 20 других таблиц.
Различные ошибки в отношении чтения набора результатов:
Синтаксические ошибки и проблемы со строкой:
Источник
Tales From A Lazy Fat DBA
Its all about Databases & their performance, troubleshooting & much more …. ¯_(ツ)_/¯
Likes
Archives:
MYSQL startup error: [ERROR] Fatal error: mysql.user table is damaged.
Posted by FatDBA on November 15, 2017
While working with one of the client for his brand new installation i’ve encountered a weird problem while starting the MYSQL (5.7.20) daemon on RHEL6 where the MYSQLD service failed to start with below errors or issues captured in error logs.
]# service mysqld start
MySQL Daemon failed to start.
Starting mysqld: [FAILED]
Snippet from the error Logs:
2017-11-15T10:21:03.957212Z 0 [Note] InnoDB: File ‘./ibtmp1’ size is now 12 MB.
2017-11-15T10:21:11.147615Z 0 [Note] InnoDB: 96 redo rollback segment(s) found. 96 redo rollback segment(s) are active.
2017-11-15T10:21:11.147902Z 0 [Note] InnoDB: 32 non-redo rollback segment(s) are active.
2017-11-15T10:21:11.291204Z 0 [Note] InnoDB: Creating sys_virtual system tables.
2017-11-15T10:21:11.300921Z 0 [Note] InnoDB: sys_virtual table created
2017-11-15T10:21:11.301245Z 0 [Note] InnoDB: Waiting for purge to start
2017-11-15T10:21:11.354201Z 0 [Note] InnoDB: 5.7.20 started; log sequence number 0
2017-11-15T10:21:11.354623Z 0 [Note] Plugin ‘FEDERATED’ is disabled.
2017-11-15T10:21:11.354976Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 9560ms. The settings might not be optimal. (flushed=0 and evicted=0, during the time.)
2017-11-15T10:21:11.355390Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
2017-11-15T10:21:11.569467Z 0 [Warning] System table ‘plugin’ is expected to be transactional.
2017-11-15T10:21:11.570388Z 0 [Note] Salting uuid generator variables, current_pid: 29102, server_start_time: 1510741261, bytes_sent: 0,
2017-11-15T10:21:11.570971Z 0 [Note] Generated uuid: ‘b3e664f7-c9ee-11e7-9b23-000c29593ffb’, server_start_time: 8191484773744281275, bytes_sent: 44900352
2017-11-15T10:21:11.571109Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: b3e664f7-c9ee-11e7-9b23-000c29593ffb.
2017-11-15T10:21:11.573332Z 0 [Warning] Gtid table is not ready to be used. Table ‘mysql.gtid_executed’ cannot be opened.
2017-11-15T10:21:11.573745Z 0 [Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key
2017-11-15T10:21:11.574116Z 0 [Note] Server hostname (bind-address): ‘*’; port: 3306
2017-11-15T10:21:11.574540Z 0 [Note] IPv6 is available.
2017-11-15T10:21:11.574745Z 0 [Note] – ‘::’ resolves to ‘::’;
2017-11-15T10:21:11.574891Z 0 [Note] Server socket created on IP: ‘::’.
2017-11-15T10:21:11.580607Z 0 [ERROR] Fatal error: mysql.user table is damaged. Please run mysql_upgrade.
2017-11-15T10:21:11.580879Z 0 [ERROR] Aborting
So after taking a look at the error log it’s quite clear that the startup failed with a ‘Fatal Error’ which in turn crashed the entire startup process for the instance with error message “mysql.user table is damaged”. At the same time it gives a solution or a fix to run the mysql_upgrade, but as the instance failed to start it was not possible to execute the command.
Here is what happened when i tried to execute the mysql_upgrade
bash-4.1$ mysql_upgrade
mysql_upgrade: Got error: 2002: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2) while connecting to the MySQL server
Upgrade process encountered error and will not continue.
*******SOLUTION*********
As a fix to avoid this deadlock, I’ve started the server with skip-grant-tables option.
This can be done by adding the ‘skip-grant-tables’ line to the my.cnf (Configuration File) withing section [mysqld].
bash-4.1$ su –
Password:
[root@dixitlab
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
innodb_data_file_path = ibdata1:10M:autoextend
skip-grant-tables
Now, lets try to start the mysql server now.
]# service mysqld start
Starting mysqld: [ OK ]
[root@dixitlab
Boom! It worked. Now quickly try to run the mysql_upgrade step to fix the initial problem.
-bash-4.1$ mysql_upgrade
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv OK
mysql.db OK
mysql.engine_cost OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.gtid_executed OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.host OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.server_cost OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
Upgrading the sys schema.
Checking databases.
sys.sys_config OK
Upgrade process completed successfully.
Checking if update is needed.
-bash-4.1$
-bash-4.1$
Now when it is done, lets revert the changes that we have made to the configuration file and remove the skip-grant-table entry from my.cnf file and restart the MYSQLD service.
]# vi /etc/my.cnf
[root@dixitlab
]# service sqld restart
sqld: unrecognized service
[root@dixitlab
]# service mysqld restart
Stopping mysqld: [ OK ]
Starting mysqld: [ OK ]
[root@dixitlab
Lets try to connect with the database now.
bash-4.1$
bash-4.1$ mysql
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 5
Server version: 5.7.20 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the current input statement.
Hope This Helps
Prashant Dixit
Источник
Unspecified fatal error encountered aborting mysql workbench
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Hello node-mysql Team,
We are struggling with the connection pooling timeout issue. Currently we are using node-mysql npm to get data from Remote MySQL and expose same data as JSON format . First 2 minutes we are getting the expected data from API ,after that we are receiving error as below.
In our case our application instance is in once server and MySQL DB is in another server
Here is the code snippet that we have
Hope , someone already faced it , can any one Help on this . Thanks In Advance
The text was updated successfully, but these errors were encountered:
Find error screen
Hi! The issue is that you are only using a single connection for the entire life of your application, and once the connection has a fatal error (like the connection was closed by your MySQL server due to idling), the connection will be destroyed.
Calling connection.connect(); does not re-establish a killed connection, only connect a never-connected connection.
Due to incomplete provided code, I cannot show the full refactoring your need to do to get your app to properly use the pool, but I hope just altering your provided code helps:
@dougwilson Hi, I used the configuration you provided, but still gotting the PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR error accidentally, what should I do to keep my service running without this fatal ?
Hi @luochen1990, that error is because you have issues within your own code, and you are making an invalid call to our library. The only real way I can help you at this point is that you need to distill the issue down such that I have the complete code of your entire application. This error cannot be solved if I’m just getting small pieces of your application little by little, I would have to see the entire application, provide me with the instructions to get it up and running, provide the instructions on how to encounter the error and then I can attach a debugger to your app to determine where in your code the mistake is.
The mistake boils down to the following:
- Your MySQL connection is encountering a fatal error.
- Your code is ignoring this error and trying to make another query on the same connection.
@dougwilson Thank you for your reply! As you mentioned above, It is possible for my code that the connection is used to send query after it is fatal, since I wrote my code as connect-once-use-many-times style:
As you can see, I connect the db once, and every time I got a message from the MQ, I use the connection I got before to execute a query. If there is an connection error during the time between I get the connection and I execute a query, then the error may occur.
So, what should I write to make the auto-reconnect possible?
So, what should I write to make the auto-reconnect possible?
Yea, that code would definitely exhibit this issue, since you don’t stop using the same db connection even after a fatal connection occurs. Perhaps a better pattern for your use here is to use a connection pool (even if you want to have the connection pool set to a maximum of one connection). Doing this will mean that each time a message comes in, you’re asking the pool for a valid connection and it will make sure you get one, otherwise you have to re-implement much of what the pool code is doing in your code.
A simple example (I don’t write CoffeeScript, so please forgive any syntax errors I made when trying to alter your example above):
@dougwilson thank you very much! I tried this and it works well.
@luochen1990, glad to hear it! Please let me know if you have other questions, are still having problems, etc.
Источник
147 / 115 / 10 Регистрация: 12.09.2011 Сообщений: 785 |
|
1 |
|
11.05.2018, 16:20. Показов 4928. Ответов 13
Привет всем! Моя программа работает с удаленной базой MySQL. Всё работает чудно, но после нескольких минут простоя программы (производится только обновление таблиц с сервера с интервалом в 5 секунд) при записи новой строки в таблицу MySQL выдает ошибку «Fatal error encountered during command execution«. Подскажите, пожалуйста, от чего это может случаться и как это исправить? Спасибо!
0 |
Администратор 15259 / 12296 / 4907 Регистрация: 17.03.2014 Сообщений: 24,903 Записей в блоге: 1 |
|
11.05.2018, 18:08 |
2 |
Vinemax, полный текст исключения смотрел? С соединением как работа идет — открывается каждый раз новое или все время одно?
2 |
Vinemax 147 / 115 / 10 Регистрация: 12.09.2011 Сообщений: 785 |
||||
11.05.2018, 18:23 [ТС] |
3 |
|||
OwenGlendower, всё время одно. Текст исключения весь не видел, бо у меня обработчик ошибок стоит. Я тут нагуглил, что есть такое свойство, как CommanTimeout, которое по умолчанию установлено в 30 (видимо, секунд). Устанавливаю его целенаправленно в 3600 и вот сейчас проверил и опять эта же ошибка после некоторого простоя. Код операции добавления строки в таблицу на VB у меня такой:
…подключение connection всё время открыто, но вот command у меня локальная в процедуре. Может быть её сделать глобальной для всего класса и сразу установить ей глобально CommandTimeout ?
0 |
Администратор 15259 / 12296 / 4907 Регистрация: 17.03.2014 Сообщений: 24,903 Записей в блоге: 1 |
|
11.05.2018, 18:27 |
4 |
Текст исключения весь не видел, бо у меня обработчик ошибок стоит. Не вижу тут связи. Прежде чем что-то делать нужно точно знать что происходит. Получи полный текст исключения прежде чем двигаться дальше.
Может быть её сделать глобальной для всего класса и сразу установить ей глобально CommandTimeout ? Не надо.
подключение connection всё время открыто Возможно поможет открытие и закрытие соединение для каждой команды. Создали соединение, открыли, выполнили команду и закрыли соединение.
2 |
147 / 115 / 10 Регистрация: 12.09.2011 Сообщений: 785 |
|
11.05.2018, 18:43 [ТС] |
5 |
Создали соединение, открыли, выполнили команду и закрыли соединение. Видимо, так и сделаю, если иначе не решу вопрос. Сейчас запустил без обработчика ошибок, подожду немного, чтобы увидеть весь текст исключения… Добавлено через 12 минут 1) SocketException: Удаленный хост принудительно разорвал существующее подключение 2) IOException: Не удается прочитать данные из транспортного соединения: Удаленный хост принудительно разорвал существующее подключение. 3) MySqlException: Reading from the stream has failed. 4) MySqlException: Fatal error encountered attempting to read the resultset. Это всё одна ошибка.
0 |
Администратор 15259 / 12296 / 4907 Регистрация: 17.03.2014 Сообщений: 24,903 Записей в блоге: 1 |
|
11.05.2018, 18:53 |
6 |
Сообщение было отмечено Yury Komar как решение РешениеVinemax, как и предполагалось виновато соединение которое внезапно оказывается закрытым. Попробуй открывать и закрывать его явно каждый раз.
2 |
147 / 115 / 10 Регистрация: 12.09.2011 Сообщений: 785 |
|
11.05.2018, 18:55 [ТС] |
7 |
Да вот не хотелось бы закрывать и открывать заново, это же всё время, особенно при медленном интернете
0 |
Администратор 15259 / 12296 / 4907 Регистрация: 17.03.2014 Сообщений: 24,903 Записей в блоге: 1 |
|
11.05.2018, 18:56 |
8 |
Vinemax, у соединения две стороны. Одна сторона может закрыть соединение не уведомляя другую. В данном случае так поступает сервер MySql.
2 |
147 / 115 / 10 Регистрация: 12.09.2011 Сообщений: 785 |
|
11.05.2018, 19:30 [ТС] |
9 |
Сообщение было отмечено Yury Komar как решение РешениеOwenGlendower, сделал connection.Ping с интервалом в 5 секунд и проблема пропала. Только вот вопрос, а можно ли так часто и много пинговать, админов сайта это не насторожит, не заблокируют?
1 |
Администратор 15259 / 12296 / 4907 Регистрация: 17.03.2014 Сообщений: 24,903 Записей в блоге: 1 |
|
11.05.2018, 20:05 |
10 |
Vinemax, без понятия. Время покажет.
1 |
147 / 115 / 10 Регистрация: 12.09.2011 Сообщений: 785 |
|
11.05.2018, 20:24 [ТС] |
11 |
OwenGlendower, спасибо!
0 |
Модератор 3861 / 3184 / 479 Регистрация: 27.01.2014 Сообщений: 5,809 |
|
12.05.2018, 04:21 |
12 |
Vinemax, а зачем каждые 5 секунд делать пинг, ведь это гораздо дольше чем открывать и закрывать соединение?
1 |
147 / 115 / 10 Регистрация: 12.09.2011 Сообщений: 785 |
|
13.05.2018, 02:15 [ТС] |
13 |
Yury Komar, ну у меня происходит так… В фоновом процессе BackgroundWorker’а каждые пять секунд обновляются все таблицы программы, а точнее измененные строки всех таблиц. При запуске BackgroundWorker’а пятисекундный таймер отключается, а при завершении обновления всех таблиц опять включается, то есть через пять секунд из процедуры Tick таймера BackgroundWorker опять запускается. Ну вот в этот момент перед запуском BackgroundWorker’а я и делаю пинг. И вот практика на примере очень медленного Интернета показала, что пинг происходит очень быстро, а вот новое подключение идет две — три секунды. Дело в том, что MySqlConnection.Ping возвращает только True или False, то есть не дает всей инфы, отчего, видимо, быстро и срабатывает. Здесь получается суть не конкретно в пинге, а в том, чтобы connection хоть чем-то занять, дабы оно не разъединялось.
1 |
Модератор 3861 / 3184 / 479 Регистрация: 27.01.2014 Сообщений: 5,809 |
|
13.05.2018, 02:42 |
14 |
Vinemax, понятно. Ну надеюсь будет работать без сюрпризов.
1 |
when i execute stored procedure on remote mysql from my c# code i get the generic error:
«Fatal error encountered during command execution»
total details:
MySql.Data.MySqlClient.MySqlException: Fatal error encountered during command execution. ---> MySql.Data.MySqlClient.MySqlException: Fatal error encountered attempting to read the resultset. ---> MySql.Data.MySqlClient.MySqlException: Reading from the stream has failed.
---> System.IO.EndOfStreamException: Attempted to read past the end of the stream. at MySql.Data.MySqlClient.MySqlStream.ReadFully(Stream stream, Byte[] buffer, Int32 offset, Int32 count) at MySql.Data.MySqlClient.MySqlStream.LoadPacket()
--- End of inner exception stack trace --- at MySql.Data.MySqlClient.MySqlStream.LoadPacket() at MySql.Data.MySqlClient.MySqlStream.ReadPacket() at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int32& insertedId) at MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int32& insertedId) at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId) at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
--- End of inner exception stack trace --- at MySql.Data.MySqlClient.MySqlDataReader.NextResult() at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) --- End of inner exception stack trace --- at MySql.Data.MySqlClient.MySqlCommand.EndExecuteNonQuery(IAsyncResult asyncResult
)
my c# code:
internal void InsertUpdateMySql(string connectionstring, string storedprocedure)
{
string sLog = "internal void InsertUpdateMySql(string connectionstring, string storedprocedure)";
MySqlConnection conn = new MySqlConnection();
int rowsAffected = 0;
try
{
if (!string.IsNullOrEmpty(storedprocedure) && !string.IsNullOrEmpty(connectionstring))
{
conn.ConnectionString = connectionstring;
MySqlCommand cmd = new MySqlCommand(storedprocedure);
cmd.Connection = conn;
conn.Open();
IAsyncResult myResult = cmd.BeginExecuteNonQuery(null, null);
SetProgressinRichText("In progressn");
while (!myResult.IsCompleted)
{
SetProgressinRichText(".");
}
rowsAffected = cmd.EndExecuteNonQuery(myResult);
}
}
catch (MySqlException ex)
{
this.service.WriteToLog(source, sLog + "n" + ex.Message + "n" + ex.StackTrace);
}
catch (Exception ex)
{
this.service.WriteToLog(source, sLog + "n" + ex.Message + "n" + ex.StackTrace);
}
finally
{
if (conn.State != System.Data.ConnectionState.Closed)
conn.Close();
}
}
the sp same like that:
DELIMITER $$
CREATE PROCEDURE `SPInsertUpdateCity`( in SP_CityName VARCHAR(100) charset utf8, in SP_CitySynonyms varchar(100) charset utf8, in SP_CityNumberPostOffice varchar(100)) BEGIN if(not exists(select CityID from city where CityName = SP_CityName)) then insert into city(CityName, CityNumberPostOffice) values(SP_CityName, SP_CityNumberPostOffice); insert into citysynonym (CityID, CitySynonymName) values(Last_insert_id(),SP_CitySynonyms); else if(not exists( select CitySynonymID from citysynonym where CitySynonymName = SP_CitySynonyms)) then
insert into citysynonym (CityID, CitySynonymName) values((select cityid from city where CityName=SP_CityName), SP_CitySynonyms); end if; end if; END$$
DELIMITER ;
the connection string:
Server=XXXX; Port=XXXX; Database=XXXX; Uid=XXXX;Pwd=XXXX;charset=utf8;default command timeout=7200;
but when i exceute that on local mysql it success as well!
for remote mysql i tryied to send little data (3 records) and it executed successfully, but for large data (1500 records) the execute is failed