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


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;'"
