Как решить «ERROR 1062 (23000) at line X: Duplicate entry ?????? for key X»

Импортировал недавно дамп в MySQL и обнаружил следующую ошибку:

ERROR 1062 (23000) at line 14096: Duplicate entry '????????' for key 'name'

Судя по знакам вопроса в ошибке, проблема была скорее в кодировке, посмотрел кодировку дампа через Notepad++, она была — UTF8.

Подключился к mysql, посмотрел кодировку базы:

mysql -u root
SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = "database_name";

Кодировка базы была latin1, кстати у меня она установилась по умолчанию при создании базы.

Поэтому я удалил базу и создал указав кодировку:

DROP DATABASE database_name;
CREATE DATABASE database_name CHARACTER SET utf8 COLLATE utf8_general_ci;
exit

После этого выполнил импорт:

mysql database_name < database_name.sql;

Импорт прошел успешно, ошибок не отображалось.

В случае если кодировка базы и дампа совпадает, а вы действительно хотите записать повторяющиеся данные, то можно в дампе, в запросах с этими данными заменить INSERT INTO на INSERT IGNORE INTO, где находятся эти повторяющиеся данные можно понять по номеру строки в ошибке, например у меня «at line 14096».

Если необходимо импортировать дамп поверх существующей базы, то можно изменить INSERT INTO на REPLACE INTO.

Например из командной строки можно заменить все так:

replace 'INSERT INTO' 'REPLACE INTO' -- database_name.sql

Перед любыми действиями нужно создать резервную копию базы, а также знать зачем и что вы делаете.

Смотрите также мою статьи:
Импорт и экспорт MySQL баз данных
Популярные статьи о MySQL

Решение ошибки с binary-mode при импорте MySQL dump из командной строки

Однажды решил импортировать sql дамп:

mysql -u root database < database.sql.gz

И заметил следующую ошибку:

ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: ''.

Ошибка появляется из-за того что дамп сжат и его необходимо сначала распаковать:

gunzip database.sql.gz

А потом импортировать:

mysql -u root database < database.sql

Смотрите другие мои статьи в категории MySQL

Настройка Fail2Ban под Bind9

Допустим Fail2Ban уже установлен, если нет, то смотрите мою статью — Установка и настройка Fail2ban.

По умолчанию Bind9 не пишет логи, поэтому откроем его файл конфигурации в любом текстовом редакторе:

sudo nano /etc/bind/named.conf

И добавим:

logging {
    channel security_file {
        file "/var/log/named/security.log" versions 3 size 30m;
        severity dynamic;
        print-time yes;
    };
    category security {
        security_file;
    };
};

Читать далее Настройка Fail2Ban под Bind9

Перенос /boot с отдельного раздела на общий

На тесте установил чистый Ubuntu Server 18.04, во время установки система автоматически разбила диск на один основной /dev/sda1, на котором уже были файлы /boot.
Так как под рукой не было системы с /boot на отдельном разделе, то я сам перенес на отдельный и описал процесс в этой статье — Перенос /boot с общего раздела на отдельный

Теперь приступим к переносу /boot раздела на основной /.

Посмотрим информацию о дисках:

sudo fdisk -l
df -h

Читать далее Перенос /boot с отдельного раздела на общий

Перенос /boot с общего раздела на отдельный

Сегодня приведу пример переноса /boot с общего раздела на отдельный.
Для теста можно подключить новый диск или использовать первый раздел на любом диске, например с размером 512Мб.

Посмотрим информацию о дисках:

sudo fdisk -l
sudo ls -l /boot
sudo du -hs /boot

Читать далее Перенос /boot с общего раздела на отдельный

Повышение версии PHP в Ubuntu 14.04

Понадобилось однажды на Ubuntu Server 14.04 LTS повысить версию PHP 5.5.9 до 5.6, обычное обновление компонентов системы не помогло:

sudo apt-get update
sudo apt-get upgrade

Можно попробовать обновить систему до 16.04 или выше как я описывал в статье Обновление Ubuntu 14.04 до 16.04. Вместе с системой будет обновлен и PHP.

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

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update

И установить из него нужную версию, например PHP 5.6:

sudo apt-get install php5.6 php5.6-mbstring php5.6-mcrypt php5.6-mysql php5.6-xml

Так как установленных версий может быть несколько, отключим старую и активируем установленную:

sudo a2dismod php5
sudo a2enmod php5.6
sudo service apache2 restart

Аналогично можно установить PHP 7.2:

sudo apt-get install php7.2
sudo a2dismod php5.6
sudo a2enmod php7.2
sudo service apache2 restart

Или PHP 7.0:

sudo apt-get install php7.0
sudo a2dismod php7.2
sudo a2enmod php7.0
sudo service apache2 restart

Решение ошибки ProFTPd «unable to open passwd file»

Заметил однажды в файле /var/log/proftpd/proftpd.log следующую ошибку:

error: unable to open passwd file ‘/etc/proftpd/ftpd.passwd’: Отказано в доступе

Как оказалось, права на файл были 440 и владельцем и группой указано — root
Посмотрим в файле /etc/proftpd/proftpd.conf, от какого пользователя работает ProFTPd, по умолчанию от пользователя proftpd:

User proftpd
Group nogroup

На всякий случай укажем верные права на файлы (если они другие, то ProFTPd может не запустится):

sudo chmod 440 /etc/proftpd/ftpd.passwd
sudo chmod 440 /etc/proftpd/ftpd.group

И укажем на файлы владельца под которым работает ProFTPd (допустим по умолчанию от proftpd, группу оставим root):

sudo chown proftpd.root /etc/proftpd/ftpd.group
sudo chown proftpd.root /etc/proftpd/ftpd.passwd

При необходимости перезапустим ProFTPd:

sudo service proftpd restart

После этого можно подключится к ProFTPd, ошибки не должно быть.

Смотрите также мою статью:
Настройка ProFTPd с виртуальными пользователями в файле

Let’s Encrypt Plugin в cPanel

Чтобы использовать Let’s Encrypt в cPanel, необходимо установить специальный плагин.
Для этого подключимся к серверу по SSH и выполним команду от root пользователя:

/scripts/install_lets_encrypt_autossl_provider

После установки плагина Let’s Encrypt, можно использовать его в меню управления AutoSSL (WHM >> Home >> SSL/TLS >> Manage AutoSSL).

Если понадобится удалить плагин, то выполним команду:

/usr/local/cpanel/scripts/uninstall_lets_encrypt_autossl_provider

Смотрите также:
Установка Certbot в Ubuntu

Facebook блокирует пользователей сразу после регистрации

Когда-то пользовался социальной сетью Facebook, удалил аккаунт и спустя год, может чуть больше, решил вновь зарегистрироваться.
Это было примерно в декабре 2017.
После регистрации добавил одно фото, Facebook предложил добавить друзей — в списке предлагаемых друзей добавил пару друзей, а над несколькими неизвестными людьми нажал крестик, с надеждой что их не будет предлагать Facebook, начал переписку с друзьями и через некоторое время отобразилось сообщение что аккаунт деактивирован и необходимо прикрепить еще одно свое фото.
Я прикрепил фото, в течении суток аккаунт активировали, но через некоторое время его снова деактивировали, добавил то-же фото — активировали, на третий раз попросили фото паспорта, добавил — активировали, чуть позже вновь деактивировали и попросили еще одно простое фото, отправил, после этого отображалось сообщение:

Сейчас войти нельзя.
Когда мы изучим ваше фото, мы свяжемся с вами. Из соображений безопасности сейчас мы выполним за вас выход из Facebook.

Это сообщение отображалось около двух месяцев с 12.2017 по 02.2018, потом вообще отобразилась надпись что аккаунт заблокирован.
Несколько раз писал в техническую поддержку что он заблокирован по ошибке.
С email который был использован при регистрации аккаунта нельзя было зарегистрироваться вновь, поэтому пришлось ждать и вот 06.03.2018 его наконец-то разблокировали.

Но я уже был огорчен такой слабой технической поддержкой и кривыми алгоритмами блокировки, поэтому я просто удалил аккаунт.
Смотрите также мою статью — Kак удалить страницу в Facebook?

Установка OpenLDAP сервера в Ubuntu

Установим необходимые пакеты:

sudo apt-get install slapd ldap-utils

Во время установки будет запрошен пароль для пользователя admin.

Перенастроим пакет slapd:

sudo dpkg-reconfigure slapd

Протестируем соединение LDAP (должно отобразится «anonymous»):

ldapwhoami -H ldap:// -x

Для управления LDAP установим веб-интерфейс phpLDAPadmin:

sudo apt-get install phpldapadmin

Чтобы открыть веб-интерфейс phpLDAPadmin наберем в браузере http://example.com/phpldapadmin, где вместо example.com укажите ваш домен.
На открывшейся странице введем пароль который указывали при установке, а где логин:

cn=admin,dc=example,dc=com

Пример перезапуска:

sudo /etc/init.d/slapd start