Страница 2 из 3
Re: Экспорт всех баз сразу
Добавлено: 16 июн 2018, 08:18
baursak
Я в строке 3 - в import.cmd
вместо строки
"CREATE DATABASE IF NOT EXISTS %%~na"
пишу напрямую
"CREATE DATABASE IF NOT EXISTS %%~na DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci" или для Вордпресса
"CREATE DATABASE IF NOT EXISTS %%~na DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"
Но Ваш способ - просто находка! По крайней мере для меня, непутевого в языке БД.
Спасибо Вам
Re: Экспорт всех баз сразу
Добавлено: 06 мар 2021, 11:23
vipTelnet
Помогите настроить без не обходимости вводить пароль вручную
сейчас использую такой бат файл
@echo off
rem записываем все базы в файл
mysql -u root -p -e "SHOW DATABASES;" > tempos1.tmp
rem удаляем из файла системные базы
findstr /V /R /I "^Database$ ^information_schema$ ^performance_schema$ ^mysql$ ^sys$" tempos1.tmp > tempos2.tmp
rem экспортируем все оставшиеся базы
for /F "tokens=*" %%A in (tempos2.tmp) do mysqldump -v -u root -p --databases %%A > %%A.sql
rem удаляем временные файлы
del /q tempos1.tmp
del /q tempos2.tmp
если пишу пароль прям в файл то получаю ошибку
# export.cmd
mysql: [Warning] Using a password on the command line interface can be insecure.
и далее экспорт не выполняется
Прочитал что это можно сделать используя переменную окружения mysql
MYSQL_PWD="root"
http://www.mysql.ru/docs/man/Environment_variables.html
Но вот куда нужно прописать эту переменную я так и не понял.
А так же хотелось автоматически запаковывать каждую базу в архив то ли просто zip, то ли gz?
Re: Экспорт всех баз сразу
Добавлено: 06 мар 2021, 15:58
SagePointer
Рекомендованный разработчиками MySQL способ - через mysql_config_editor задать данные:
mysql_config_editor set --login-path=ххххх --host=localhost --user=root --password
(где вместо ххххх придумать имя для сохранённого профиля)
После этого в командах mysql и mysqldump использовать первым параметром не -u root -p, а --login-path=ххххх
https://dev.mysql.com/doc/refman/8.0/en ... ditor.html
Re: Экспорт всех баз сразу
Добавлено: 06 мар 2021, 16:48
vipTelnet
В
SagePointer писал(а): ↑06 мар 2021, 15:58
Рекомендованный разработчиками MySQL способ - через mysql_config_editor задать данные:
mysql_config_editor set --login-path=ххххх --host=localhost --user=root --password
(где вместо ххххх придумать имя для сохранённого профиля)
После этого в командах mysql и mysqldump использовать первым параметром не -u root -p, а --login-path=ххххх
https://dev.mysql.com/doc/refman/8.0/en ... ditor.html
Сделал указанные Вами настройки и действительно теперь когда просто ввожу
mysql --login-path=client -e "SHOW DATABASES;"
то получаю без всякого ввода пароля список баз но вот скрипт
@echo off
rem записываем все базы в файл
mysql --login-path=client -e "SHOW DATABASES;" > tempos1.tmp
rem удаляем из файла системные базы
findstr /V /R /I "^Database$ ^information_schema$ ^performance_schema$ ^mysql$ ^sys$" tempos1.tmp > tempos2.tmp
rem экспортируем все оставшиеся базы
for /F "tokens=*" %%A in (tempos2.tmp) do mysqldump -v --login-path=client --databases %%A > %%A.sql
rem удаляем временные файлы
del /q tempos1.tmp
del /q tempos2.tmp
НЕ РАБОТАЕТ теперь вот что пишет
# export__login_path.cmd
mysqldump: [ERROR] unknown variable 'login-path=client'.
mysqldump: [ERROR] unknown variable 'login-path=client'.
mysqldump: [ERROR] unknown variable 'login-path=client'.
mysqldump: [ERROR] unknown variable 'login-path=client'.
mysqldump: [ERROR] unknown variable 'login-path=client'.
mysqldump: [ERROR] unknown variable 'login-path=client'.
mysqldump: [ERROR] unknown variable 'login-path=client'.
mysqldump: [ERROR] unknown variable 'login-path=client'.
mysqldump: [ERROR] unknown variable 'login-path=client'.
Видимо там я пытаюсь сделать mysqldump он воспринимает --login-path=client как какую то переменную, как это исправить?
Re: Экспорт всех баз сразу
Добавлено: 06 мар 2021, 17:14
Ink0gnit0
vipTelnet
Попробуйте скрипт, предварительно подправив путь к исполняемым файлам MySQL и, при необходимости, пароль:
@echo off
rem Указание пути к исполняемому файлу 'mysql'
set PATH=%PATH%;C:\ospanel\modules\database\MariaDB-10.x\bin
set usr=root
set pwd=root
rem Получение списка баз данных
mysql --user=%usr% --password=%pwd% --execute="SHOW DATABASES WHERE NOT `Database` IN ('mysql', 'information_schema', 'performance_schema', 'sys');" --skip-column-names > %~dp0databases.tmp
rem Создание резервных копий всех баз данных
for /f "tokens=*" %%D in ('type databases.tmp') do (
echo Backuping DB '%%D'
mysqldump --user=%usr% --password=%pwd% %%D > %~dp0%%D.sql
)
rem Удаление временных файлов
del %~dp0databases.tmp
pause
Re: Экспорт всех баз сразу
Добавлено: 06 мар 2021, 18:55
SagePointer
vipTelnet писал(а): ↑06 мар 2021, 16:48
Видимо там я пытаюсь сделать mysqldump он воспринимает --login-path=client как какую то переменную, как это исправить?
Параметр login-path должен идти до других параметров, потому поменяйте местами:
for /F "tokens=*" %%A in (tempos2.tmp) do mysqldump --login-path=client -v --databases %%A > %%A.sql
Re: Экспорт всех баз сразу
Добавлено: 06 мар 2021, 22:23
vipTelnet
SagePointer писал(а): ↑06 мар 2021, 18:55
vipTelnet писал(а): ↑06 мар 2021, 16:48
Видимо там я пытаюсь сделать mysqldump он воспринимает --login-path=client как какую то переменную, как это исправить?
Параметр login-path должен идти до других параметров, потому поменяйте местами:
for /F "tokens=*" %%A in (tempos2.tmp) do mysqldump --login-path=client -v --databases %%A > %%A.sql
Спасибо теперь все работает автоматом
@echo off
rem записываем все базы в файл
mysql --login-path=client -e "SHOW DATABASES;" > tempos1.tmp
rem удаляем из файла системные базы
findstr /V /R /I "^Database$ ^information_schema$ ^performance_schema$ ^mysql$ ^sys$" tempos1.tmp > tempos2.tmp
rem экспортируем все оставшиеся базы
for /F "tokens=*" %%A in (tempos2.tmp) do mysqldump --login-path=client -v --databases %%A > %%A.sql
rem удаляем временные файлы
del /q tempos1.tmp
del /q tempos2.tmp
Остался последний вопрос как потом запаковать каждый файл в zip или gz архив ?
Re: Экспорт всех баз сразу
Добавлено: 07 мар 2021, 10:39
YStepanov
если БД очень большая (речь о гигабайтах) вам поможет Sypex Dumper 2
мне помог у меня БД около 2 гигов была
Re: Экспорт всех баз сразу
Добавлено: 07 мар 2021, 12:17
vipTelnet
с Sypex Dumper 2
все хорошо знаю что он умеет и больший базы хорошо восстанавливать, и экспорт делать
но вопрос который меня интересует другой мне бы хотелось запаковать каждый файл sql в zip или gz архив
Re: Экспорт всех баз сразу
Добавлено: 07 мар 2021, 16:03
SagePointer
vipTelnet писал(а): ↑06 мар 2021, 22:23
Остался последний вопрос как потом запаковать каждый файл в zip или gz архив ?
Я у себя на сервере делал это при помощи 7zip, вот из моего bash-скрипта кусок:
databases=`$MYSQL --login-path=$MYSQL_LOGIN_PATH -e "SHOW DATABASES;" | grep -Ev "^(Database|information_schema|performance_schema|sys)$"`
for db in $databases; do
$MYSQLDUMP --login-path=$MYSQL_LOGIN_PATH --default-character-set=utf8mb4 --force --opt --events --routines --triggers --hex-blob --databases $db | $SEVENZIP a $ARCHIVE_NAME "-si$db.sql" -t7z -mx7
done
Под винду наверняка можно похожим образом сделать, в синтаксисе bat-файлов не очень разбираюсь.