Архив рубрики: MySQL

The server requested authentication method unknown to the client

Возникло при переходе с Mysql 5.7 на 8.0 со связкой php 7.2 Гугл говорит, что это потому что в 7.2 еще не завезли новую усиленную авторизацию в mysqli. Временное решение, пока нет возможности обновить до php 7.3 — сделать авторизацию «по старому» :

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password
BY 'password';

Восстановление только одной таблицы из бекапа MySQL

Довольно частая ситуация: есть бекап базы. Развертывать его целиком чтобы посмотреть данные одной таблицы? А если он большой это может занять продолжительное время. Есть вариант с использованием sed:

sed -n -e '/CREATE TABLE.*`usbox_services`/,/CREATE TABLE/p' 2020-07-07.sql  > usbox_services.sql

В результате выполнения будет сформирован файл содержащий только таблицу usbox_services. Ну а далее его уже заливаем стандартно..

MYSQL: <имя таблицы> is marked as crashed and should be repaired

В моем случае обошлось просто (Внимание! данные в таблице удаляются!):

shell> mysql db_name
mysql> SET AUTOCOMMIT=1;
mysql> TRUNCATE TABLE table_name;
mysql> quit

Если данные важны для сохранения,восстановить можно попробовать так:

myisamchk -r --update-state /var/lib/mysql/dbname/table_name.MYI

Интересное поведение mysql при выборке из таблицы содержащей NULL

Столкнулся с интересным поведением MySQL при выборке из таблицы содержащей NULL в качестве значения.  Очередной подвох однако.. Пусть например есть таблица:

mysql> select cat_idx,uuid from categories where tar_id=109 and common=0 and above=1 and archive=0;
+---------+------+
| cat_idx | uuid |
+---------+------+
|       0 | NULL |
|       5 | NULL |
|      10 | NULL |
|      11 | NULL |
|      15 | NULL |
|      28 | peni |
+---------+------+
6 rows in set (0.00 sec)

Хотим получить все значения не содержащие uuid=»peni». Логично было бы использовать такой запрос:

mysql> select cat_idx,uuid from categories where tar_id=109 and common=0 and above=1 and archive=0 and uuid<>"peni";
Empty set (0.00 sec)

Аааа. А куда делись остальные значения? А вот потому что с точки зрения MySQL правильно будет:


mysql> select cat_idx,uuid from categories where tar_id=109 and common=0 and above=1 and archive=0 and (uuid<>"peni" or uuid is null);
+---------+------+
| cat_idx | uuid |
+---------+------+
|       0 | NULL |
|       5 | NULL |
|      10 | NULL |
|      11 | NULL |
|      15 | NULL |
+---------+------+
5 rows in set (0.00 sec)


Вывод: при создании таблиц нужно стараться заполнять поля значениями «по умолчанию». Чтобы NULL не было в принципе. Тогда и возможной ошибки не будет.

 

mysqli(): Server sent charset (255) unknown to the client. Please, report to the developers

Сия ошибка происходит если сервер mysql новый (например 8.х), а клиент старый (например php 5.6). Скорее всего они еще и к тому же разнесены на разные сервера. Что такое? А просто разные кодировки по умолчанию у клиента и сервера.

Как лечить, есть два варианта

1) Обновить клиент — т.е. php и mysql-client

2) Проставить в настройках сервера mysql принудительные кодировки по умолчанию

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8