Good morning. I’m using Laravel on VPS server.
Short situation description: Yesterday everything was working fine (for months our website were working fine), this morning I got woke up from my colleagues that both of our websites are down.
When trying to access them we receive error:
SQLSTATE[HY000]: General error: 1835 Malformed communication packet (SQL: select * from
users
whereid
= 1 limit 1)
I have checked online and can’t find a solution. I tried to upgrade MySQL to newest version (Maria DB 10.3
)
I tried to reset password for database user. (Also no changes)
I checked and tried sollution to set read_rnd_buffer_size=256K
in my.cnf file for mysql settings
When I try to call this function directly in phpMyAdmin select * from users where id = 1 limit 1
it returns expected results.
I will appreciate every help, as all of our business depends on these platforms, I need to make them work as soon as possible.
With greetings, Artis.
Edit:
When I try to disable function that causes error, it just shows next function, and all over like that. So I believe that Laravel can’t conect with mysql at all.
After deeper research I found out that only Laravel can’t connect to database. On same server I have 2x Laravel applications, Codeigniter and wordpress. Both Laravel applications stopped to work at same time, but codeigniter and wordpress works as expected.
2
Answers
for a quick fix just add this
to config/database.php in
The new update requires PHP 7.3 to connect with MariaDB.
Since the issue is caused by the latest upgrade from MariaDB MDEV-24121, a more suitable solution is to downgrade MariaDB and yum-locking the MariaDB packages in place to avoid the packages from being updated and unlock them when they’re patched. More details here on how to do it: Updating MariaDB to v10.2.35 or v10.3.26, causes MySQL Databases interface to show MySQL as offline
If you cannot downgrade your MariaDB or cannot update your PHP, a possible workaround is to set "PDO::ATTR_EMULATE_PREPARES" to true.