Делаем бекап
mysqldump -u USER -pPASSWORD DATABASE > /path/to/file/dump.sqlСоздаём структуру базы без данных
mysqldump --no-data - u USER -pPASSWORD DATABASE > /path/to/file/schema.sqlЕсли нужно сделать дамп только одной или нескольких таблиц
mysqldump -u USER -pPASSWORD DATABASE TABLE1 TABLE2 TABLE3 > /path/to/file/dump_table.sqlСоздаём бекап и сразу его архивируем
mysqldump -u USER -pPASSWORD DATABASE | gzip > /path/to/outputfile.sql.gzСоздание бекапа с указанием его даты
mysqldump -u USER -pPASSWORD DATABASE | gzip > `date +/path/to/outputfile.sql.%Y%m%d.%H%M%S.gz`Заливаем бекап в базу данных
mysql -u USER -pPASSWORD DATABASE < /path/to/dump.sqlЗаливаем архив бекапа в базу
gunzip < /path/to/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASEили так
zcat /path/to/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASEСоздаём новую базу данных
mysqladmin -u USER -pPASSWORD create NEWDATABASEУдобно использовать бекап с дополнительными опциями -Q -c -e, т.е.
mysqldump -Q -c -e -u USER -pPASSWORD DATABASE > /path/to/file/dump.sql, где:
-Q оборачивает имена обратными кавычками-c делает полную вставку, включая имена колонок-e делает расширенную вставку. Итоговый файл получается меньше и делается он чуть быстрееДля просмотра списка баз данных можно использовать команду:
mysqlshow -u USER -pPASSWORDА так же можно посмотреть список таблиц базы:
mysqlshow -u USER -pPASSWORD DATABASEДля таблиц InnoDB надо добавлять --single-transaction, это гарантирует целостность данных бекапа.
Для таблиц MyISAN это не актуально, ибо они не поддерживают транзакционность.
Общие факты
Полезно под каждую базу на боевом сервере создавать своего пользователя
Кодировка базы может быть любой, если она UTF8
В большинстве случаев лучше использовать движок InnoDB
В php лучше забыть про сильно устаревшее расширение mysql и по-возможности использовать pdo или mysqli
Новую копию MySQL всегда можно настроить и оптимизировать
Без особой нужды не стоит открывать MySQL наружу. Вместо этого можно сделать проброс портов
ssh -fNL LOCAL_PORT:localhost:3306 REMOTE_USER@REMOTE_HOST
#db
👉 @database_info