Архив

Публикации с меткой ‘mysql’
8 апреля 2021 Нет комментариев

Задача: нужно выбрать максимальное число из поля, формат которого текстовый.
При следующем запросе будет сделана выборка по алфавиту. т.е. будет выбрано, например, 999, когда присутствует значение 1000

SELECT MAX(HISTNUM) FROM CLIENTS

Обычно это решается так:

SELECT MAX(CAST(HISTNUM AS INT)) FROM CLIENTS

но в Firebird следующая ошибка:

conversion error from string ""
GDSCODE = 335544334
SQLCODE = -413

Решение: отсортировать вначале по длине строки, затем по алфавиту, выбрав одну строку. Варианты:

SELECT HISTNUM FROM CLIENTS ORDER BY CHAR_LENGTH(HISTNUM) DESC, HISTNUM DESC ROWS 1
SELECT HISTNUM FROM CLIENTS ORDER BY CHAR_LENGTH(HISTNUM) DESC, HISTNUM DESC ROWS 1 TO 1
SELECT FIRST 1 SKIP 0 HISTNUM FROM CLIENTS ORDER BY CHAR_LENGTH(HISTNUM) DESC, HISTNUM DESC

В конкретном случае нужно было еще сделать проверку на максимальную длину этого числа. Варианты:

SELECT HISTNUM FROM CLIENTS WHERE CHAR_LENGTH(HISTNUM)<7 ORDER BY CHAR_LENGTH(HISTNUM) DESC, HISTNUM DESC ROWS 1
SELECT FIRST 1 SKIP 0 HISTNUM FROM CLIENTS WHERE CHAR_LENGTH(HISTNUM)<7 ORDER BY CHAR_LENGTH(HISTNUM) DESC, HISTNUM DESC
Categories: MySQL Tags: ,
6 апреля 2021 Нет комментариев
setsebool -P httpd_can_network_connect_db 1

To check SELinux

sestatus

To see what flags are set on httpd processes

getsebool -a | grep httpd

To allow Apache to connect to remote database through SELinux

setsebool httpd_can_network_connect_db 1

Use -P option makes the change permanent. Without this option, the boolean would be reset to 0 at reboot.

setsebool -P httpd_can_network_connect_db 1
Categories: Linux Tags:
22 марта 2021 Нет комментариев

Удалить записи с повторящимися `photo` в таблице `photos`:

CREATE TABLE `photos_temp` AS (SELECT MIN(`id`) AS `id` FROM `photos` GROUP BY `photo`);
ALTER TABLE `photos_temp` ADD PRIMARY KEY(`id`);
DELETE FROM `photos` WHERE `id` NOT IN (SELECT `id` FROM `photos_temp`);
DROP TABLE `photos_temp`;
Categories: MySQL Tags:
22 марта 2021 Нет комментариев
mysqladmin processlist -u<user> -p<password> | awk '$2 ~ /^[0-9]/ {print "KILL "$2";"}' | mysql -u<user> -p<password>
Categories: MySQL Tags:
7 августа 2020 Нет комментариев

Например, для всех таблиц MyISAM в БД:

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'db_name' AND ENGINE = 'MyISAM';

затем с полученным списком:

ALTER TABLE `table_name` ENGINE=InnoDB;
Categories: MySQL Tags:

Конфигурация в /etc/my.cnf.d/server.cnf:

[mariadb]
slow_query_log
slow_query_log_file=/var/log/mariadb/mariadb-slow.log
long_query_time=1.0

Больше информации:
https://mariadb.com/kb/en/slow-query-log/
https://mariadb.com/kb/en/slow-query-log-overview/

Лог всех запросов: в ту же секцию добавить

general_log
general_log_file=/var/log/mariadb/mariadb-query.log
Categories: Unix Tags:
10 марта 2020 Нет комментариев

shell скрипт для автоматического изменения кодировки таблиц и столбцов с utf8 на utf8mb4

#!/bin/bash
 
# mycollate.sh <database> [<charset> <collation>]
# changes MySQL/MariaDB charset and collation for one database - all tables and
# all columns in all tables
 
DB="$1"
CHARSET="$2"
COLL="$3"
 
AUTH="-uuser -ppass"
 
[ -n "$DB" ] || exit 1
[ -n "$CHARSET" ] || CHARSET="utf8mb4"
[ -n "$COLL" ] || COLL="utf8mb4_general_ci"
 
echo $DB
echo "ALTER DATABASE \`$DB\` CHARACTER SET $CHARSET COLLATE $COLL;" | mysql $AUTH
 
echo "USE \`$DB\`; SHOW TABLES;" | mysql -s $AUTH | (
	while read TABLE; do
		echo $DB.$TABLE
		echo "ALTER TABLE \`$TABLE\` CONVERT TO CHARACTER SET $CHARSET COLLATE $COLL;" | mysql $AUTH $DB
	done
)

https://dba.stackexchange.com/questions/8239/how-to-easily-convert-utf8-tables-to-utf8mb4-in-mysql-5-5

Categories: Mac, Unix Tags: ,