Profruit banner

Умен звънец в openHAB

16 декември 2023

Телефонът е винаги с мен и сега, където и да се намирам получавам известие от openHAB, че някой е позвънил и чака пред вратата. А ако ме няма вкъщи става ясно часа и датата на последното позвъняване.

Tasmota Multipress

30 септември 2023

Идеята е Sonoff Touch T1 US 2 в салона, да управлява освен своето осветление и това в кухнята, а още вентилатора.

DIY 12V 1A WiFi Router UPS

22 април 2023

При поредно прекъсване на захранването вкъщи, батерията на нoтбука и двата UPS автоматично превключват на аварийно захранване и едновременно полита съобщение за конфуза

Zigbee2MQTT клониране

21 януари 2023

... как да клонираме съществуваща настройка на Zigbee2MQTT без да се налага последвало интервю на zigbee-устройствата.

LD2410 - бюджетен датчик присъствие в openHAB

11 февруари 2023

Цената на HLK-LD2410 зададе име на поредната тема в моя блог. С негова помощ се постига "народен" датчик присъствие в домашната автоматизация. . ...


phpMyAdmin е уеб базирано приложение написано на език PHP. phpMyAdmin е своеобразен уеб-интерфейс за администриране на база данни в MySQL. phpMyAdmin позволява по пътя на браузър, да осъществявате администриране на сървър MySQL, да пускате команди на език SQL и преглеждате съдържанието на таблиците и базите данни.

Тези встъпителни думи към поредната ни среща написах тук преди време.



Към днешен ден версията порасна на 3.3.9.2deb1~lucid1~ppa1 под Ubuntu 10.04. Малък недъг ме дразни оттогава. При отсъствие активност в течение на 24 мин, phpMyAdmin справедливо ви изхвърля от сесията и ви подканва към поредно въвеждане на паролата за вход с надпис:

No activity within 1440 seconds


Решение:
  1. Достъп до /etc/phpmyadmin/config.inc.php и чрез текстови редактор добавяме нов ред: $cfg['LoginCookieValidity'] = 3600;// 1 час

    За интервал по ваше желание задайте нужното време, например, 36000 - 10 часа.
    phpmyadmin/config.inc.php
  2. Редактираме /etc/php5/apache2/php.ini и задаваме значение
    на параметър session.gc_maxlifetime
    session.gc_maxlifetime = 3600
    php5/apache2/php.ini
  3. Презареждаме Apache, за да влязат измененията в сила
    /etc/init.d/apache2 restart

MySQL Default engine InnoDB


В царството на слепите човек с едно око е царят. Ако имате две очи сигурно сте забелязали, че мотор по подразбиране (default engine) в MySQL е MyISAM.
MyISAM




Промяна от MyISAM на InnoDB предлага следното решение:
  1. sudo /etc/init.d/mysql stop
  2. sudo gedit /etc/mysql/my.cnf
    В появилия се редактор премахваме коментара пред default-storage-engine=innodb
    Default engine InnoDB
  3. sudo /etc/init.d/mysql start
  4. sudo /etc/init.d/apache2 restart

ft_min_word_len


По подразбиране думи, съставени по-малко от четири символа се игнорират. Кратките думи не се индексират и това е с цел увеличение на производителността на MySQL. Подобно положение поражда проблеми. Все пак трибуквени съкращения са практика за съставните на технически текстове. Този нюанс може да се изглади като се промени значение на променлива ft_min_word_len.

В MySQL ft_min_word_len по подразбиране е равна на '4' и не е описана в my.cnf. Моментното и значение може да се провери в mysql-монитора, чрез следната заявка:

mysql> SHOW VARIABLES LIKE '%ft_min_word_len%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| ft_min_word_len | 4     |
+-----------------+-------+
За промяна на текущата стойност добавете ft_min_word_len = 3 в файл my.cnf под секция [mysqld].
ft_min_word_len
  1. Рестартирайте сървъра, за да влязат промените в сила:
    # /etc/init.d/mysql restart
    mysql-monitor
  2. Престроите вашите индекси REPAIR TABLE your table_name QUICK;
Конкретно.

DEFAULT CHARACTER SET


Кодировката по подразбиране в MySQL е latin1. Този избор поражда чупене на кирилизирани текстове, което е много неприятно. Нека погледнем на практика съответните променливи за целта.

mysql> SHOW VARIABLES LIKE '%character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
mysql> SHOW VARIABLES LIKE '%collation%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
Моите предпочитания са в полза на UTF-8. Това налага създаване на поредна база данни в phpMyAdmin да започва по следния начин.
create new DB in phpMyAdmin

В PHP подобни колизии с кодировката се решават с допълнителна заявка, наричани от някои като хак на енкодинга:

//съединение с MySQL
$id=mysql_connect(DB_HOST, DB_USER, DB_PASS) or die('No server connected');

//избор база данни
mysql_select_db(DB_NAME, $id) or die('No DB selected');

//хак на енкодинга
mysql_query('SET CHARACTER SET utf8', $id); 
// mysql_query('SET NAMES utf8', $id);
В mysql-монитора заявката следва да бъде подобна:
mysql> CREATE DATABASE someNewDB DEFAULT CHARACTER SET utf8;

Заявката създава в каталог /var/lib/mysql/someNewDB файл db.opt с следното съдържание:
default-character-set=utf8
default-collation=utf8_general_ci


Същото по-горе на практика:
root@prodesktop:/var/lib/mysql/someNewDB# ls -l
total 4
-rw-rw---- 1 mysql mysql 61 2012-06-09 15:31 db.opt
root@prodesktop:/var/lib/mysql/someNewDB# cat db.opt
default-character-set=utf8
default-collation=utf8_general_ci

Подобни ритуали са леко отегчителни, затова може твърдо да се зададе UTF8 в файл my.cnf. Добавете следните записи в съответните секции:
[client]
default-character-set=utf8

[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
character-set-server=utf8
init-connect='SET NAMES utf8;'
# init_connect='SET collation_connection = utf8_general_ci'
collation-server=utf8_general_ci
# skip-character-set-client-handshake

[mysql]
default-character-set=utf8
Рестартирайте сървъра и проверете изменения с показаните горе заявки.
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+





до нови срещи   ^.^
01.06.2012 profruit 


0 Response to "MySQL съвети и трикове"

Публикуване на коментар

Този блог е реинкарнация на първите ми опити за споделяне в нета. На времето започнах с къси разкази на преживяното. После се обезсмисли и превърнах блога си в системно радио. Пиша единствено неща, които карат душата ми да живее: openHAB, Ubuntu, Споделено и т.н. Това е моето системно радио, разбирате ли? Моята вълна и вие сте на нея сега.

Архив на блога