blog.udartsev.ru


PYTHON - Remove commented lines from .py code files

1. Create clear.sh file with:

#!/bin/sh
FILES=$(find . -name "*.py" -not -path "./env/*")
for FILE in $FILES
    do
        sed '/""".*"""/d;s/#.*$//;s/^\n$/\n/' $FILE > temp.txt && mv temp.txt $FILE
        echo "Processed file: $FILE"
    done
exit 0

2. Copy in in /your_project_root_foder/ and run:

    sh clear.sh

Ubuntu Linux - 3+more monitors Artifacts fix

Ubuntu Monitor Artifacts FIX

1. Change GRUB config file:

    gedit /etc/default/grub

Changed this line:

GRUB_CMDLINE_LINUX=""

to this:

GRUB_CMDLINE_LINUX="amd_iommu=on iommu=pt"

then:

sudo update-grub && sudo reboot

2. Update kernel iniframs:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
cd linux-firmware/
sudo cp -va amdgpu/ /lib/firmware/
sudo update-initramfs -u
reboot

SSH key to server

SSH => server

Create a key:

ssh-keygen -t rsa

Copy it to the server:

ssh-copy-id -i ./mainserver.pub archive@5.45.79.2

OR

ssh archive@5.45.79.2 "chmod 700 .ssh; chmod 640 .ssh/authorized_keys"

cat ./mainserver.pub | ssh archive@5.45.79.2 'cat >> .ssh/authorized_keys'

OR

ssh -i /root/.ssh/mainserver.pub archive@5.45.79.2

NODE.JS REACT clean start

Install Node 12:

sudo apt update
sudo apt -y install curl dirmngr apt-transport-https lsb-release ca-certificates
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -

sudo apt -y install nodejs
sudo apt -y  install gcc g++ make

$ node --version
v12.10.0

$ npm --version
6.10.3


rm -f package-lock.json
sudo npm install
sudo npm audit fix
sudo npm run build

DJANGO - clean run

1) Install requirements.txt

pip install -r requirements.txt
(same: cat requirements.txt | xargs -n 1 pip install)

2) Create migrations:

python manage.py makemigrations
python manage.py migrate

3) Make seeds:

python manage.py seed all
python manage.py seed all --refresh

Superuser:

admin
admin (or `SUPERUSER_PASS={password}` in env)

Django template error fix:

first install: pip install django==2.2 then install: pip install django==3.0.2

Install Python 3.9

sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.9
python3.9 --version

Installing ENV (linux):

sudo apt install python3.9-venv
python3.9 -m pip install --user --upgrade pip
python3.9 -m pip install --user virtualenv
python3.9 -m venv env
source env/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
pip install --upgrade -r requirements.txt  # upgrade all packages
deactivate

Update ENV and requirements.txt (linux)

pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
pip freeze > requirements.txt

pip install pipupgrade
pipupgrade --verbose --latest --yes
pip freeze > requirements.txt

LINUX BASH

1) Deletes all DJANGO migrations:

cd {django-project-folder}/
find . -path "*/migrations/*.py" -not -name "__init__.py" -not -path "*/geodata/*" -delete
find . -path "*/migrations/*.pyc" -not -path "*/geodata/*" -delete

CELERY ON LOCALHOST

celery -A core_backend worker --loglevel=DEBUG

REDIS RESVER 6+

sudo add-apt-repository ppa:chris-lea/redis-server
sudo apt-get update
sudo apt-get install redis-server

ERRORS:

https://github.com/django/daphne/issues/262 https://stackoverflow.com/questions/55916808/django-channels-reader-at-end-of-file-exception


PostgreSQL - Run server on startup (Linux)

1) Check your chmod file available:

sudo chmod +x /etc/rc.local

2) Edit rc.local file:

sudo gedit /etc/rc.local

3) Add:

# PostgreSQL
mkdir /var/run/postgresql
mkdir /var/run/postgresql/12-main.pg_stat_tmp
touch /var/run/postgresql/12-main.pg_stat_tmp/global.tmp
chown -R postgres:postgres /var/run/postgresql
su postgres -c '/usr/lib/postgresql/12/bin/pg_ctl start -D /etc/postgresql/12/main'

# OR CHANGE YOUR DB VERSION AND DATABASE FILES FOLDER
# su postgres -c '/usr/lib/postgresql/9.5/bin/pg_ctl start -D /etc/postgresql/9.5/main'

4) Enable rc.local instructions (it is turned off by default):

sudo systemctl enable rc-local.service

5) Start your rc.local scripts right now:

sudo systemctl start  rc-local.service

PHP - Компилятор JIT (Just In Time - компиляция во время выполнения)

Автоорский перевод оригинального поста: https://blog.intracto.com/a-jit-compiler-for-php

Как работает PHP?

PHP - это «язык сценариев» ("scripting language"), это означает, что он напрямую не компилируется в машинный язык.

Когда вы запускаете PHP-программу, Zend Engine анализирует код в абстрактном синтаксическом дереве (AST), а далее переводит его в операционные коды (opcodes). Коды операций - это исполнительные блоки для виртуальной машины Zend (Zend VM). Коды операций довольно низкоуровневые и их гораздо быстрее перевести в машинный код, чем исходный код PHP. PHP имеет расширение OPcache в ядре, чтобы кэшировать эти коды операций.

Если в пару строк, то алгоритм работы PHP следующий: Первый запуск PHP-программы начинается с анализа PHP-кода, далее он кешируется в до кодов операций. При последующем использованиии будут использоваться ранее кэшированные коды операций (OPcache). Поэтому всегда проверяйте загружен ли у вас Zend OPcache и активен ли он.

php

Можно ли сделать исполнение кода быстрее?

1 сентября 2016 года Дмитрий Стогов (один из разработчиков движка PHP) опубликовал сообщение, в котором он анонсировал работу по созданию нового JIT-компилятора для PHP версии 8.

Компилятор «just in time» (JIT) будет принимать выходные данные кодов операций (opcodes) и вместо их интерпретации он скомпилирует их в машинный код и вместо этого вызовет этот код объекта. JIT должен преодолевать неэффективность интерпретации кодов операций при каждом запуске программы. Интересно?

Обратите внимание, что JVM (Java), CLR (.net) и HHVM (PHP для Facebook) используют подход JIT.

Код доступен в ветке jit-dynasm ZendTech https://github.com/zendtech / php-src / tree / jit-dynasm / ext / opcache / jit , поэтому пока не доступен в официальном репозитории PHP.

Основы поддержки JIT (по крайней мере для 32 и 64-битных платформ) должны быть там. Они используют проект DynASM для генерации кода. Цель состоит в том, чтобы исследовать различные подходы JIT и как они могут быть полезны PHP.

Подходы различаются выбором объекта компиляции (какую часть кода компилировать), как часто и с какой точностью (авт.). Некоторые компиляционные коды JIT используются только один раз, в результате чего компилируется весь объект за раз. Другие могут выбирать один метод (часть кода) и использовать его время от времени и т. д.

Сейчас в PHP все переменные имеют тип данных, объявленные во время компиляции (AOT) - это накладыает ограничения на изменение данных и значений во время выполнения. Но JIT-компиляция работает во время выполнения и может быть быстрее в таких вещах, как переопределение типа даннных, поскольку он может выполнять внутренний анализ процедур во время исполнения. Другими словами, он знает больше о переменных во время выполнения. С другой стороны, первое выполнение JIT, вероятно, медленнее интерпретатора из-за дополнительных шагов перевода, которые он должен обрабатывать.

Я не эксперт в этой области, и все это кажется очень сложным, но очень интересно наблюдать за изменениями в мире PHP. Мне очень любопытно, что из этого получится. Внедрение подобного JIT метода компиляции может сделать PHP более жизнеспособным для интенсивного использования ЦП, такого как машинное обучение, нейросети и т. д.

Безопасность JIT

JIT будет компилировать коды операций для машинного кода и выполнять их. Всё это делается в памяти. Проблемы в том, что по соображениям безопасности память должна быть либо записываемой, либо исполняемой (W ^ X). Но никогда не оба одновременно.

Текущая реализация PHP запрещает запись в буфер JIT во время выполнения, используя системные вызовы mprotect (). Это означает, что PHP-JIT будет компилировать код и записывать его в память и защищать его, чтобы он не изменялся во время выполнения, предотвращая возможные эксплойты.

В настоящее время существует 2 расширения ядра PHP, которые нарушают принцип W ^ X. Phar и PCRE JIT. Но новый PHP JIT в opcache с самого начала учитывает W ^ X, что хорошо.

Я протестировал текущую сборку PHP-JIT в OpenBSD 6.0, в которой по умолчанию включен W ^ X - все работает нормально. Нарушений нет. Обратите внимание, что SELinux также обеспечивает такие виды защиты.

Скорость

Никаких реальных улучшений производительности нет, по крайней мере, для типичных рабочих нагрузок в Интернете. Можно протестировать PHP-JIT тестовым файлом (доступно в репозиториях PHP) следующим образом:

php -d opcache.jit_buffer_size=32M Zend/bench.php

Edit 25 / jun / 2018: Zeef Suraski пишет, что внедрение JIT показывает значительные улучшения производительности большин нагрузках на ЦП (https://externals.io/message/102415).


MySQL - Восстанавливаем системные таблицы

Бывает, что после физического переноса MySQL базыданных - движоп перестаёт обновляться. Это вызвано ошибками в InnoDB файлах системы. Поэтому, в попытке обновления мы можем увидеть предупреждения о несуществующих таблица (даже если они физически присутствуют в папке и отображаются в SQL-менеджере):

enter image description here

Для того, что бы нам исправить эти ошибки - нам нужно удалить старые таблицы и создать новые.

1) Подключаемся кMySQL движку через консоль:

mysql -u admin -p -h localhost

2) Выбираем системную БД:

use mysql;

3) Удаляем таблицу через SQL-менеджер (нужно для регистрации удаления в системных файлах движка) или через консоль:

DROP TABLE <название таблицы>;

4) В папке с системными файлами /var/lib/mysql удаляем остатки от <название таблицы> с разрешениями <название таблицы>.ibd и .frm. Например:

sudo rm /var/lib/mysql/servers.ibd
sudo rm /var/lib/mysql/servers.frm

5) Создаём новые таблицы через консоль mysql. Ниже приведены SQL запросы для восстановления таблиц.

mysql.servers

CREATE TABLE `servers` (
`Server_name` char(64) NOT NULL,
`Host` char(64) NOT NULL,
`Db` char(64) NOT NULL,
`Username` char(64) NOT NULL,
`Password` char(64) NOT NULL,
`Port` int(4) DEFAULT NULL,
`Socket` char(64) DEFAULT NULL,
`Wrapper` char(64) NOT NULL,
`Owner` char(64) NOT NULL,
PRIMARY KEY (`Server_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8     
COMMENT='MySQL Foreign Servers table';

mysql.innodb_index_stats

CREATE TABLE `innodb_index_stats` (
`database_name` varchar(64) COLLATE utf8_bin NOT NULL,
`table_name` varchar(64) COLLATE utf8_bin NOT NULL,
`index_name` varchar(64) COLLATE utf8_bin NOT NULL,
`last_update` timestamp NOT NULL DEFAULT 
CURRENT_TIMESTAMP ON UPDATE 
CURRENT_TIMESTAMP,
`stat_name` varchar(64) COLLATE utf8_bin NOT NULL,
`stat_value` bigint(20) unsigned NOT NULL,
`sample_size` bigint(20) unsigned DEFAULT NULL,
`stat_description` varchar(1024) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`database_name`,`table_name`,`index_name`,`stat_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 
COLLATE=utf8_bin STATS_PERSISTENT=0;

mysql.innodb_table_stats

CREATE TABLE `innodb_table_stats` (
`database_name` varchar(64) COLLATE utf8_bin NOT NULL,
`table_name` varchar(64) COLLATE utf8_bin NOT NULL,
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`n_rows` bigint(20) unsigned NOT NULL,
`clustered_index_size` bigint(20) unsigned NOT NULL,
`sum_of_other_index_sizes` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`database_name`,`table_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0;

mysql.slave_master_info

CREATE TABLE `slave_master_info` (
`Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file.',
`Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log currently being read from the master.',
`Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last read event.',
`Host` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'The host name of the master.',
`User_name` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The user name used to connect to the master.',
`User_password` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The password used to connect to the master.',
`Port` int(10) unsigned NOT NULL COMMENT 'The network port used to connect to the master.',
`Connect_retry` int(10) unsigned NOT NULL COMMENT 'The period (in seconds) that the slave will wait before trying to reconnect to the master.',
`Enabled_ssl` tinyint(1) NOT NULL COMMENT 'Indicates whether the server supports SSL connections.',
`Ssl_ca` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Authority (CA) certificate.',
`Ssl_capath` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path to the Certificate Authority (CA) certificates.',
`Ssl_cert` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL certificate file.',
`Ssl_cipher` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the cipher in use for the SSL connection.',
`Ssl_key` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL key file.',
`Ssl_verify_server_cert` tinyint(1) NOT NULL COMMENT 'Whether to verify the server certificate.',
`Heartbeat` float NOT NULL,
`Bind` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'Displays which interface is employed when connecting to the MySQL server',
`Ignored_server_ids` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The number of server IDs to be ignored, followed by the actual server IDs',
`Uuid` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The master server uuid.',
`Retry_count` bigint(20) unsigned NOT NULL COMMENT 'Number of reconnect attempts, to the master, before giving up.',
`Ssl_crl` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Revocation List (CRL)',
`Ssl_crlpath` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path used for Certificate Revocation List (CRL) files',
`Enabled_auto_position` tinyint(1) NOT NULL COMMENT 'Indicates whether GTIDs will be used to retrieve events from the master.',
PRIMARY KEY (`Host`,`Port`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Master Information';

mysql.slave_relay_log_info

CREATE TABLE `slave_relay_log_info` (
`Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file or rows in the table. Used to version table definitions.',
`Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the current relay log file.',
`Relay_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The relay log position of the last executed event.',
`Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log file from which the events in the relay log file were read.',
`Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last executed event.',
`Sql_delay` int(11) NOT NULL COMMENT 'The number of seconds that the slave must lag behind the master.',
`Number_of_workers` int(10) unsigned NOT NULL,
`Id` int(10) unsigned NOT NULL COMMENT 'Internal Id that uniquely identifies this record.',
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Relay Log Information';

mysql.slave_worker_info

CREATE TABLE `slave_worker_info` (
`Id` int(10) unsigned NOT NULL,
`Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`Relay_log_pos` bigint(20) unsigned NOT NULL,
`Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`Master_log_pos` bigint(20) unsigned NOT NULL,
`Checkpoint_relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`Checkpoint_relay_log_pos` bigint(20) unsigned NOT NULL,
`Checkpoint_master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`Checkpoint_master_log_pos` bigint(20) unsigned NOT NULL,
`Checkpoint_seqno` int(10) unsigned NOT NULL,
`Checkpoint_group_size` int(10) unsigned NOT NULL,
`Checkpoint_group_bitmap` blob NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Worker Information';

mysql.help_topic

CREATE TABLE `help_topic` (
`help_topic_id` int(10) unsigned NOT NULL,
`name` char(64) CHARACTER SET utf8 COLLATE utf8_bin UNIQUE NULL,
`help_category_id` smallint(5) unsigned NULL,
`description` text CHARACTER SET utf8 COLLATE utf8_bin NULL,
`example` text CHARACTER SET utf8 COLLATE utf8_bin NULL,
`url` char(128) CHARACTER SET utf8 COLLATE utf8_bin NULL,
PRIMARY KEY (`help_topic_id`)
) ENGINE=`InnoDB` DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Installation HELP command table';

mysql.help_keyword

CREATE TABLE `help_keyword` (
`help_keyword_id` int(10) unsigned NOT NULL,
`name` char(64) CHARACTER SET utf8 COLLATE utf8_bin UNIQUE NULL,
PRIMARY KEY (`help_keyword_id`)
) ENGINE=`InnoDB` DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Installation HELP command table';

mysql.help_relation

CREATE TABLE `help_relation` (
`help_topic_id` int(10) unsigned NOT NULL,
`help_keyword_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`help_topic_id`, `help_keyword_id`)
) ENGINE=`InnoDB` DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Installation HELP command table';

mysql.help_category

CREATE TABLE `help_category` (
`help_category_id` smallint(5) unsigned NOT NULL,
`name` char(64) CHARACTER SET utf8 COLLATE utf8_bin UNIQUE NULL,
`parent_category_id` smallint(5) unsigned NULL,
`url` char(128) CHARACTER SET utf8 COLLATE utf8_bin NULL,
PRIMARY KEY (`help_category_id`)
) ENGINE=`InnoDB` DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Installation HELP command table';

mysql.time_zone_name

CREATE TABLE `time_zone_name` (
`Name` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`Time_zone_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`Name`, `Time_zone_id`)
) ENGINE=`InnoDB` DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Contain time zone information';

mysql.time_zone

CREATE TABLE `time_zone` (
`Time_zone_id` int(10) unsigned NOT NULL,
`Use_leap_seconds`enum('Y','N') CHARACTER SET utf8 COLLATE utf8_bin DEFAULT 'N',
PRIMARY KEY (`Time_zone_id`)
) ENGINE=`InnoDB` DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Contain time zone information';

mysql.time_zone_leap_second

CREATE TABLE `time_zone_leap_second` (
`Transition_time` bigint(20) unsigned NOT NULL,
`Correction` int(11) unsigned NOT NULL,
PRIMARY KEY (`Transition_time`)
) ENGINE=`InnoDB` DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Contain time zone information';

mysql.time_zone_transition

CREATE TABLE `time_zone_transition` (
`Time_zone_id` int(10) unsigned NOT NULL,
`Transition_time` bigint(20) unsigned NOT NULL,
`Transition_type_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`Time_zone_id`, `Transition_time`)
) ENGINE=`InnoDB` DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Contain time zone information';

mysql.time_zone_transition_type

CREATE TABLE `time_zone_transition_type` (
`Time_zone_id` int(10) unsigned NOT NULL,
`Transition_type_id` int(10) unsigned NOT NULL,
`Offset` int(11) DEFAULT '0' NOT NULL,
`Is_DST` tinyint(3) unsigned DEFAULT '0' NOT NULL,
`Abbreviation` char(8) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`Time_zone_id`, `Transition_type_id`)
) ENGINE=`InnoDB` DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Contain time zone information';

mysql.gtid_executed

CREATE TABLE gtid_executed (
`source_uuid` CHAR(36) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`interval_start` BIGINT(20) NOT NULL,
`interval_end` BIGINT(20) NOT NULL,
PRIMARY KEY (`source_uuid`, `interval_start`)
) ENGINE=`InnoDB` DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='GTIDs stores here';

scripts/mysql_system_tables.sql:

mysql.server_cost

CREATE TABLE IF NOT EXISTS server_cost (
  cost_name   VARCHAR(64) NOT NULL,
  cost_value  FLOAT DEFAULT NULL,
  last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  comment     VARCHAR(1024) DEFAULT NULL,
  default_value FLOAT GENERATED ALWAYS AS
    (CASE cost_name
       WHEN 'disk_temptable_create_cost' THEN 20.0
       WHEN 'disk_temptable_row_cost' THEN 0.5
       WHEN 'key_compare_cost' THEN 0.05
       WHEN 'memory_temptable_create_cost' THEN 1.0
       WHEN 'memory_temptable_row_cost' THEN 0.1
       WHEN 'row_evaluate_cost' THEN 0.1
       ELSE NULL
     END) VIRTUAL,
  PRIMARY KEY (cost_name)
) ENGINE=InnoDB CHARACTER SET=utf8 COLLATE=utf8_general_ci STATS_PERSISTENT=0;

mysql.engine_cost

CREATE TABLE IF NOT EXISTS engine_cost (
  engine_name VARCHAR(64) NOT NULL,
  device_type INTEGER NOT NULL,
  cost_name   VARCHAR(64) NOT NULL,
  cost_value  FLOAT DEFAULT NULL,
  last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  comment     VARCHAR(1024) DEFAULT NULL,
  default_value FLOAT GENERATED ALWAYS AS
    (CASE cost_name
       WHEN 'io_block_read_cost' THEN 1.0
       WHEN 'memory_block_read_cost' THEN 0.25
       ELSE NULL
     END) VIRTUAL,
  PRIMARY KEY (cost_name, engine_name, device_type)
) ENGINE=InnoDB CHARACTER SET=utf8 COLLATE=utf8_general_ci STATS_PERSISTENT=0;

6) Перезагружаем MySQL:

sudo /etc/init.d/mysql start

PS: Подробнее о таблицах можно узнать на сайте MySQL и MariaDB: https://mariadb.com/kb/en/library/the-mysql-database-tables/


MySQL - Backup and restoring database

Backup database

time mysqldump -u root -p database > /var/backups/restore_backup.sql

Backup config and data

mv /var/lib/mysql /tmp/backups/mysql-lib.bak
cp /etc/mysql/my.cnf /tmp/backups/my.cnf.bak

Purge library

sudo apt-get remove --purge mysql-server mysql-client mysql-common
sudo apt-get autoremove
sudo apt-get autoclean

Reinstall

sudo apt-get update
sudo apt-get install mysql-server

Restore config

cp /tmp/backups/my.cnf.bak /etc/mysql/my.cnf
sudo service mysql restart

Create database

mysql -u root -p
mysql> CREATE DATABASE database;

Restore backup

time mysql -u root -p database < /var/backups/restore_backup.sql

EXIFTOOL - Getting data from RAW (CR2) File to JPG (Ubuntu/Linux)

If you want to get data (in JPG) from your RAW file in Ubuntu/Linux, do next:

1) Install exiftool in your Linux system:

sudo apt install exiftool

2) not necessary step: view your RAW file data:

exiftool -s2 -all -b -X -fXMP:XMP foto.cr2

3) not necessary step: near the bottom, it will shows:

Composite:PreviewImage='(Binary data 1706501 bytes, use -b option to extract)'
Composite:ThumbnailImage='(Binary data 17031 bytes, use -b option to extract)'

enter image description here

4) Use the "-b" option to extract either or both:

exiftool -Composite:PreviewImage -b foto.cr2 >preview.jpg
exiftool -Composite:ThumbnailImage -b foto.cr2 >thumb.jpg

5) To extract data from all files in the folder, do next:

for i in *.CR2; do exiftool -Composite:PreviewImage -b $i > $i.jpg; done

6) Done. We did execute all JPG data from RAW files: enter image description here