Рубрика: Linux
Наработки и статьи по работе с Linux
mysql: delete из select
Казалось бы простая задача, удалить записи по выборке из select. Например:
1 2 |
mysql> delete from config_common where id in (select id from config_common group by nameparam having count(*)>1); ERROR 1093 (HY000): You can't specify target table 'config_common' for update in FROM clause |
Однако такая запись выдает ошибку. Исправляемся «костылем»:
1 |
delete from config_common where id in (select * from (select id from config_common group by nameparam having count(*)>1) as p); |
Еще один вариант запрета запуска второй копии скрипта
Например можно и так:
1 |
pgrep -f iptv_noblock_list || /home/pavel/ip_tv_noblock/iptv_noblock_list.py |
Смотрим, если такой скрипт уже висит в запущеных процессах, то выводим его pid, иначе — запускаем скрипт
Установка python 2.7 на FreeBSD 10.4
Сам python:
1 |
pkg install python |
PIP:
1 |
pkg install py27-pip |
mysql_connector:
1 |
pip install mysql-connector==2.1.6 |
mysql_connector ставим именно эту версию, другая выдает ошибку Unable to find Protobuf include directory
Маленькая хитрость при восстановлении из дампа MySQL
Довольно часто, системные администраторы делают дампы не какой то отдельной таблицы, а все базы целиком. Видимо примерно так:
1 |
mysqldump -ulogin -ppassword -ARqe --single-transaction | gzip -c > /nds/mysql/zwwes/`date +%Y-%m-%d`.gz |
Отсюда возникает проблема: если нужно восстановить только одну базу из множества, то её не достать — восстанавливаются сразу все.
Но! Костылем можно. Создаем пользователя, который имеет доступ только к одной базе:
1 2 3 |
create database dhcp2db; create user 'dhcp'@'localhost' identified by 'password'; grant all on dhcp2db.* to 'dhcp'@'localhost'; |
И достаем из бекапа базы, под этим пользователем, сказав предварительно MySQL, игнорировать все ошибки (Access denied for user)
1 |
gunzip < 2017-12-10.gz | mysql -f -udhcp -pdhcp dhcp2db |