Страница 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-файлов не очень разбираюсь.