В этой статье я приведу примеры некоторых SQL запросов для базы биллинговой системы ABillS.
Читать далее «SQL запросы для ABillS»Архивы рубрик:Базы данных
Скрипт добавления IP адресов из файла в ipset
Понадобилось однажды написать скрипт чтобы добавить в ipset все IP для которых били подняты сессии на сервере доступа, использовался биллинг Abills, поэтому я решил взять IP адреса из MySQL таблицы биллинга.
Первым делом создадим тестовый ipset:
ipset create test iphash
Читать далее «Скрипт добавления IP адресов из файла в ipset»
Решение MySQL ERROR 1055 (42000)
Недавно выполнял необходимые SQL запросы и заметил следующую ошибку:
ERROR 1055 (42000): Expression #4 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'database_name.table_name.column_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Как увидеть процесс импорта SQL файла?
Для того чтобы видеть процесс импорта SQL файлов я использую утилиту Pipe Viewer.
Pipe Viewer очень полезен особенно когда SQL файл большого размера, позволяет примерно оценить оставшееся время до завершения импорта файла, отображает процесс импорта в процентах и перешедшее время.
Как решить «ERROR 1062 (23000) at line X: Duplicate entry ?????? for key X»
Импортировал недавно дамп в MySQL и обнаружил следующую ошибку:
ERROR 1062 (23000) at line 14096: Duplicate entry '????????' for key 'name'
Читать далее «Как решить «ERROR 1062 (23000) at line X: Duplicate entry ?????? for key X»»
Решение ошибки с 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
Настройка репликации в MySQL
На тесте выполню настройку репликации в MySQL.
Допустим имеется два сервера с установленной системой Ubuntu Server, на обеих установим MySQL сервер и клиент, если они не установлены:
Читать далее «Настройка репликации в MySQL»Решение ошибки ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
Выполнял однажды SQL запрос:
GRANT REPLICATION SLAVE ON TESTDATABASE.* TO "replication"@"192.168.1.9" IDENTIFIED BY "password";
И обнаружил следующую ошибку:
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
Так как привилегии REPLICATION SLAVE являются глобальными и не могут быть назначены конкретной базе данных, то и в запросе их нужно указывать глобально, поэтому SQL запрос должен выглядеть так:
GRANT REPLICATION SLAVE ON *.* TO "replication"@"192.168.1.9" IDENTIFIED BY "password";
После этого запрос выполнился успешно:
Query OK, 0 rows affected, 1 warning (0,01 sec)
Восстановление MySQL таблиц
Приведу пример простой проверки таблиц всех баз данных используя mysqlcheck:
mysqlcheck -u root -p -A
Где опция -u определяет имя пользователя под которым выполняется подключение к MySQL, -p для запроса пароля, -A для проверки таблиц всех баз данных.
Пример восстановления конкретной базы данных:
mysqlcheck -u root -p -r db_name
Пример восстановления конкретной таблицы в указанной базе данных:
mysqlcheck -u root -p -r db_name table_name
Опишу возможные опции запуска.
Проверка всех баз данных и их таблиц, кроме INFORMATION_SCHEMA и performace_schema:
--all-databases, -A
Указать перечень баз можно используя опцию:
--databases, -B
Выполнить все одним запросом вместо отдельных для каждой базы:
--all-in-1, -1
Анализировать таблицы:
--analyze, -a
После проверки выполнить ремонт поврежденных таблиц:
--auto-repair
Указание адреса подключения к MySQL серверу (например если их несколько):
--bind-address=ip_address
Подключение к MySQL серверу на указанном узле:
--host=host_name, -h host_name
Директория с установками символов:
--character-sets-dir=dir_name
Проверка таблиц на наличие ошибок (выполняется по умолчанию):
--check, -c
Проверить таблицы которые были изменены с момента последней проверки или которые не были закрыты должным образом:
--check-only-changed, -C
Проверка таблиц на совместимость с текущей версией сервера:
--check-upgrade, -g
Сжатие данных передаваемым между клиентом и сервером если оба это поддерживают:
--compress
Запись и отображение отладочной информации (на тесте стандартный mysqlcheck в Ubuntu 16.04 был скомпилирован без поддержки debug):
--debug=debug_options --debug-check --debug-info
Указание набора символов по умолчанию:
--default-character-set=charset_name
Использование только указанного файла параметров:
--defaults-file=file_name
Указанная ниже опция делает проверку более длительной и гарантирует целостность таблиц, при восстановлении тоже займет много времени и произведет много ненужных строк:
--extended, -e
Проверить только таблицы которые не были закрыты должным образом:
--fast, -F
Продолжать даже в случае SQL ошибки:
--force, -f
Быстрее чем extended, находится 99.99% ошибок:
--medium-check, -m
Не читать файлы опций, однако файл .mylogin.cnf будет читаться:
--no-defaults
Смотрите также мою статью — Подключение к MySQL из localhost без ввода пароля.
Оптимизировать таблицы:
--optimize, -o
Указание пароля при подключении:
--password[=password], -p[password]
Номер порта TCP/IP для подключения:
--port=port_num, -P port_num
Отображение имени программы и всех параметров, которые она получает из файлов параметров:
--print-defaults
Указание протокола подключения:
--protocol={TCP|SOCKET|PIPE|MEMORY}
Быстрый метод проверки таблиц, предотвращает сканирование строк для проверки неправильных ссылок:
--quick, -q
Выполнение ремонта:
--repair, -r
Тихий режим, отображаются только ошибки:
--silent, -s
Пропустить указанную базу:
--skip-database=db_name
Указание сокета при подключении:
--socket=path, -S path
Подключение с использованием SSL:
--ssl*
Переопределить -databases или -B, все аргументы имени, следующие за опцией, рассматриваются как имена таблиц:
--tables
Указание перечня протоколов через запятую, которые разрешено использовать при зашифрованных соединениях:
--tls-version=protocol_list
При восстановление получить структуру таблицы из файла .frm:
--use-frm
Имя пользователя MySQL, которое будет использоваться при подключении:
--user=user_name, -u user_name
Подробный режим, отображается больше информации:
--verbose, -v
Отображение версии mysqlcheck и выход:
--version, -V
Смотрите также:
Установка и настройка MySQL сервера на Ubuntu
Просмотр информации о базах данных MySQL
Чтобы посмотреть информацию о базах данных MySQL и их таблицах первым делом подключимся к консоли MySQL, например под пользователем root:
mysql -u root
Или так, если необходимо ввести пароль:
mysql -u root -p
Посмотрим список существующих баз данных:
SHOW DATABASES;
Выбрать базу данных можно так:
USE dbname;
Посмотреть какая в данный момент выбрана база:
SELECT DATABASE();
Чтобы посмотреть какие таблицы содержит выбранная база данных:
SHOW TABLES;
Пример просмотра содержимого указанной таблицы:
SELECT * FROM tablename LIMIT 25;
Для просмотра структуры конкретной таблицы выполним команду:
DESCRIBE tablename;
Где Field — это имя столбца, Type — тип данных, Null — определяет, может ли столбец содержать значения NULL, Key — является ли столбец индексным, Default — определяет значение по умолчанию для столбца.
Посмотреть информацию о индексах таблицы можно так:
SHOW INDEX FROM tablename;
Посмотреть информацию о таблице, кодировке, её типе (ENGINES) и т.д. можно командой:
SHOW CREATE TABLE tablename;
Посмотреть какие типы поддерживает сервер можно так:
SHOW ENGINES;