MySQL. Утилита mysql_config_editor
07.09.2021
Теги: MySQL • Web-разработка • БазаДанных • Настройка • Сервер
Возникла необходимость создавать резервные копии базы данных и директории 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 = *****
Удалить секцию [local]
из файла ~/.mylogin.cnf
можно с помощью команды
$ mysql_config_editor remove --login-path=local
Теперь, при использовании утилиты 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-разработка • База данных • Настройка • Сервер