При отладке системы мне захотелось смотреть, как меняются данные в БД в режиме реального времени:

Весь секрет заключается в запуске связки watch + mysql.

SQL

Вначале необходимо составить SQL-выражение, которое будет запускаться. У меня оно такое:

SELECT id, status, delivery_id, created_at, updated_at, LEFT(back_response, 10) as back_response, LEFT(kafka_status, 10) as kafka_status, LEFT(external_ids, 10) as external_ids FROM core_requests ORDER BY id DESC LIMIT 5;

Тут сделана обратная сортировка по id, чтобы видеть вновь добавленные записи. А также через LEFT сокращен текст, чтобы он помещался на экране.

mysql

Затем это выражение нужно обернуть в запуск mysql-клиента:

mysql -uroot -proot -hlocalhost --port=3415 --protocol=tcp default -te 'SELECT ...;'

Ключ -e запускает выражение, а -t выводит в табличном формате. MySQL у меня запущен в докере, поэтому такой нестандартный порт.

Вначале я столкнулся с такой ошибкой:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

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

  • Поменять хост: -hlocalhost => -h127.0.0.1
  • Добавить параметр —protocol=tcp

Оба способа работают независимо друг от друга.

watch

Теперь завернем в вызов watch:

watch -td -n 1 "mysql ..."

Ключи делают следующее:

  • без заголовка
  • подсвечивать изменения
  • интервал: 1 секунда

Итоговое выражение выглядит так:

watch -td -n 1 "mysql -uroot -proot -hlocalhost --port=3415 --protocol tcp default -te 'SELECT id, status, delivery_id, created_at, updated_at, LEFT(back_response, 10) as back_response, LEFT(kafka_status, 10) as kafka_status, LEFT(external_ids, 10) as external_ids FROM core_requests ORDER BY id DESC LIMIT 5;'"

От debitos

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *