GRANT в mysql

GRANT ALL PRIVILEGES ON DATABASE.* TO USER@host IDENTIFIED BY "password";

тесты с базой UTM5

после запуска оптизатора
# /netup/utm5/bin/utm5_optimizer -s "2010-01-01 00:00" -e "2010-07-01 00:00"

количество записей в таблицах до 2010-07-01

mysql> SELECT COUNT(*) FROM discount_transactions_all WHERE from_unixtime(discount_date) < '2010-07-01 00:00:00';
+----------+
| COUNT(*) |
+----------+
|  3089466 |
+----------+
1 ROW IN SET (6 MIN 31.52 sec)
 
mysql> SELECT COUNT(*) FROM discount_transactions_iptraffic_all WHERE from_unixtime(discount_date) < '2010-07-01 00:00:00';
+----------+
| COUNT(*) |
+----------+
|   394803 |
+----------+

обновление UTM5 c 005 на 007

задача заключается также в переводе базы на utf8

на старом железе:

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

mysqldump -e -q --default-character-set=latin1 --ignore-table=UTM5.discount_transactions_iptraffic_all 
--ignore-table=UTM5.discount_transactions_all UTM5 > UTM.sql

меняем в дампе упоминания о latin1 на utf8

sed 's/latin1/utf8/g' UTM.sql > UTM5.sql

на новом железе:

создаем новую базу:

mysql -e "CREATE database UTM5 DEFAULT CHARACTER SET utf8;"

импортируем в mysql:
 

операции в mysql

чтобы скопировать всю таблицу

CREATE TABLE `table_dest` AS SELECT * FROM `table_src` WHERE 1

чтобы скопировать только структуру таблицы

CREATE TABLE `table_dest` AS SELECT * FROM `table_src` WHERE 0

создать таблицу

CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`login` CHAR( 20 ) NOT NULL ,
`pass` CHAR( 20 ) NOT NULL,
`group` CHAR( 20 ) NOT NULL
);

добавить столбец в таблицу

ALTER TABLE `users` ADD `group` CHAR(30) [FIRST | AFTER column_name ];

удалить столбец из таблицы
 

mysql репликация

в случае падения репликации, а такое иногда бывает в непредвиденных обстоятельствах, заново поднимать её ацки лень бывает.
поэтому сделал механизм, с помощью которого можно восстановить всё одной командой.

НА МАСТЕРЕ:
добавить в /etc/mysql/my.conf

[mysqld]
server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
max_binlog_size         = 100M

по крону раз в сутки запускается скрипт, который дампит базу и записывает в файл номер bin-лога и позицию

скрипт backup_db.sh:

Полезные запросы в БД UTM5

сменить дату окончания расчетного периода на час вперед у тех РП которые заканчиваются в 00 часов

UPDATE discount_periods SET end_date = 
UNIX_TIMESTAMP(DATE_SUB(FROM_UNIXTIME(end_date),INTERVAL -1 HOUR)) WHERE 
discount_periods.is_expired = 0 AND 
HOUR(FROM_UNIXTIME(discount_periods.end_date)) = 0;

сменить дату окончания расчетного периода на час назад у тех РП которые заканчиваются в 01 часов

UPDATE discount_periods SET end_date = 
UNIX_TIMESTAMP(DATE_SUB(FROM_UNIXTIME(end_date),INTERVAL 1 HOUR)) WHERE 
discount_periods.is_expired = 0 AND 

Host 'hostname' is blocked because of many connection errors

Host 'hostname' is blocked because of many connection errors.Unblock with 'mysqladmin flush-hosts'

проблема в том, что было слишком много ошибок при подключении к mysqld с этого хоста.
возможн это были прерваные запросы. поэтому мускул решил что это атака и заблокировал доступ этому хосту, пока не выполнишь команду mysqladmin flush-hosts
по дефолту значение стоит равное 10
его можно увеличить следующим образом

# safe_mysqld -O max_connect_errors=100 &

либо внести в конфиг my.cnf в секцию [mysqld]:
max_connect_errors = 100