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-разработка • База данных • Настройка • Сервер