MySQL. Утилита mysql_config_editor

07.09.2021

Теги: MySQLWeb-разработкаБазаДанныхНастройкаСервер

Возникла необходимость создавать резервные копии базы данных и директории wp-content — на всякий пожарный случай. И все бы ничего, но при использовании утилиты mysqldump все время вылезало предупреждение «Warning: Using a password on the command line interface can be insecure». Решил все-таки разобраться с тем, как правильно сделать, чтобы MySQL остался доволен и не ругался.

#!/bin/bash

#
# DATABASE BACKUP
#
export DB_BACKUP='/home/username/www/some_site/backup/database' # каталог для хранения
export DB_USER='username' # имя пользователя БД
export DB_PASSWD='qwerty' # пароль пользователя БД
export DB_NAME='some_database' # имя базы данных

rm -rf $DB_BACKUP/3
mv $DB_BACKUP/2 $DB_BACKUP/3
mv $DB_BACKUP/1 $DB_BACKUP/2
mkdir $DB_BACKUP/1

mysqldump --user=$DB_USER --password=$DB_PASSWD $DB_NAME | gzip > $DB_BACKUP/1/$DB_NAME.sql.gz

# echo total backup size
echo 'DATABASE BACKUP'
du -h --max-depth=1 $DB_BACKUP

#
# WP-CONTENT BACKUP
#
export SRC_BACKUP='/home/username/www/some_site/public_html/wp-content' # что будем резервировать
export DST_BACKUP='/home/username/www/some_site/backup/content' # куда будем резервировать

rm -rf $DST_BACKUP/3
mv $DST_BACKUP/2 $DST_BACKUP/3
mv $DST_BACKUP/1 $DST_BACKUP/2
mkdir $DST_BACKUP/1
rsync --archive --link-dest=$DST_BACKUP/2 $SRC_BACKUP $DST_BACKUP/1

# echo total backup size
echo 'WP-CONTENT BACKUP'
du -h --max-depth=1 $DST_BACKUP

exit 0

Оказывается, для таких случаев есть утилита mysql_config_editor, которая позволяет записать хост, порт, логин и пароль для соединения с сервером в специальный зашифрованный файл ~/.mylogin.cnf.

> mysql_config_editor set --user=username --password
Enter password: qwerty

Посмотреть содержимое файла можно с помощью команды:

> mysql_config_editor print --all
[client]
user = username
password = *****

По умолчанию логин и пароль записываются в секцию [client], но можно создать несколько секций — например, добавим [local] и [remote]:

> mysql_config_editor set --login-path=local --host=localhost --port=3306 --user=localuser --password
Enter password: qwerty
> mysql_config_editor set --login-path=remote --host=remote.example.com --user=remoteuser --password
Enter password: qwerty
> mysql_config_editor print --all
[client]
user = username
password = *****
[local]
host = localhost
port = 3306
user = localuser
password = *****
[remote]
host = remote.example.com
user = remoteuser
password = *****

Теперь, при использовании утилиты mysqldump, можно не указывать логин и пароль, а обращаться к одной из секций предварительно созданного файла ~/.mylogin.cnf:

> mysqldump --login-path=client some_database > some_database.sql

Так что скрипт резервного копирования теперь такой:

#!/bin/bash

#
# DATABASE BACKUP
#
export DB_BACKUP='/home/username/www/some_site/backup/database' # каталог для хранения
export DB_NAME='some_database' # имя базы данных

rm -rf $DB_BACKUP/3
mv $DB_BACKUP/2 $DB_BACKUP/3
mv $DB_BACKUP/1 $DB_BACKUP/2
mkdir $DB_BACKUP/1

mysqldump --login-path=client $DB_NAME | gzip > $DB_BACKUP/1/$DB_NAME.sql.gz

# echo total backup size
echo 'DATABASE BACKUP'
du -h --max-depth=1 $DB_BACKUP

#
# WP-CONTENT BACKUP
#
export SRC_BACKUP='/home/username/www/some_site/public_html/wp-content' # что будем резервировать
export DST_BACKUP='/home/username/www/some_site/backup/content' # куда будем резервировать

rm -rf $DST_BACKUP/3
mv $DST_BACKUP/2 $DST_BACKUP/3
mv $DST_BACKUP/1 $DST_BACKUP/2
mkdir $DST_BACKUP/1
rsync --archive --link-dest=$DST_BACKUP/2 $SRC_BACKUP $DST_BACKUP/1

# echo total backup size
echo 'WP-CONTENT BACKUP'
du -h --max-depth=1 $DST_BACKUP

exit 0
[backup]
    [database]
        [1]
            some_database.sql.gz
        [2]
            some_database.sql.gz
        [3]
            some_database.sql.gz
    [content]
        [1]
            [wp-content]
                .....файлы.....
        [2]
            [wp-content]
                .....файлы.....
        [3]
            [wp-content]
                .....файлы.....
    backup.sh

В директориях database/1 и content/1 самый свежий backup, в директориях database/2 и content/2 — предыдущий backup, а в директориях database/3 и content/3 — самый старый.

Поиск: MySQL • Web-разработка • База данных • Настройка • Сервер

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.