Π‘ΡΠΊΠΎΠ½ΠΎΠΌΡŒΡ‚Π΅ 15% Π½Π° всСх хостинговых услугах

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ свои Π½Π°Π²Ρ‹ΠΊΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ скидку Π½Π° любой Ρ‚Π°Ρ€ΠΈΡ„Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄: Skills ΠΠ°Ρ‡Π°Ρ‚ΡŒ
Π ΡƒΠ±Ρ€ΠΈΠΊΠΈ
Linux Бэкапы

Π˜ΠΌΠΏΠΎΡ€Ρ‚ ΠΈ экспорт Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… MySQL с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

ОсвоСниС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΈ экспорта Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… MySQL ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки β€” это ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π²Ρ‹ΠΊ для любого администратора Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ backend-ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° `mysqldump` экспортируСт Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π² пСрСносимый Ρ„Π°ΠΉΠ» `.sql`, содСрТащий всС DDL ΠΈ DML ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ восстановлСния схСмы ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° `mysql` выполняСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ β€” пСрСдавая этот Ρ„Π°ΠΉΠ» ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ экзСмпляр MySQL.

Π­Ρ‚ΠΎ руководство ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ всС практичСскиС сцСнарии: экспорт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, Π΄Π°ΠΌΠΏΡ‹ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ структуры, сТатыС ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ, Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ ΠΈ бСзопасныС Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ процСссы ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° β€” Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΡ€Π°ΠΉΠ½ΠΈΠ΅ случаи, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ приводят ΠΊ скрытому ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΌΡƒ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡŽ Π² производствСнных срСдах.

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трСбования

ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ любой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ· этого руководства ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ:

  • MySQL Server (5.7, 8.0 ΠΈΠ»ΠΈ 8.4) установлСн ΠΈ процСсс `mysqld` Π·Π°ΠΏΡƒΡ‰Π΅Π½
  • Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ `mysqldump` ΠΈ `mysql` находятся Π² систСмном `PATH` (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `which mysqldump`)
  • Π£ вас Π΅ΡΡ‚ΡŒ учётная запись MySQL ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ с привилСгиями `SELECT`, `LOCK TABLES`, `SHOW VIEW` ΠΈ `TRIGGER` для экспорта; `CREATE`, `INSERT`, `ALTER` ΠΈ `DROP` для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°
  • На Ρ†Π΅Π»Π΅Π²ΠΎΠΌ устройствС достаточно мСста Π½Π° дискС β€” сТатый Π΄Π°ΠΌΠΏ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒΡΡ Π² 5–10 Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅
  • Π£ вас Π΅ΡΡ‚ΡŒ доступ ΠΊ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ сСрвСра (Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», SSH ΠΈΠ»ΠΈ управляСмая срСда VPS Π₯остинга)

Экспорт Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ mysqldump

`mysqldump` β€” это стандартный инструмСнт логичСского Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования, поставляСмый Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ с MySQL. Он сСриализуСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ SQL-скрипт. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ инструмСнтов физичСского Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Percona XtraBackup, `mysqldump` Π½Π΅ зависит ΠΎΡ‚ Π΄Π²ΠΈΠΆΠΊΠ° хранСния ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ€Π°Π·Π½Ρ‹Ρ… вСрсиях MySQL ΠΈ Π΄Π°ΠΆΠ΅ Π² Ρ„ΠΎΡ€ΠΊΠ°Ρ… MariaDB.

1. Экспорт ΠΎΠ΄Π½ΠΎΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

β€œ`bash

mysqldump -u [username] -p [database_name] > [filename].sql

β€œ`

ОписаниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:

  • `-u [username]` β€” учётная запись MySQL, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
  • `-p` β€” Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Π²Π²ΠΎΠ΄ пароля (Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Π² строкС ΠΊΠ°ΠΊ `-p[password]` Π½Π° ΠΎΠ±Ρ‰ΠΈΡ… систСмах; ΠΎΠ½ Π²ΠΈΠ΄Π΅Π½ Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ `ps aux`)
  • `[database_name]` β€” цСлСвая схСма для экспорта
  • `> [filename].sql` β€” пСрСнаправляСт stdout Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ»

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

β€œ`bash

mysqldump -u root -p mydatabase > mydatabase_backup.sql

β€œ`

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ создаётся Ρ„Π°ΠΉΠ», содСрТащий ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ `CREATE TABLE`, `INSERT` ΠΈ `ALTER TABLE`, достаточныС для воссоздания `mydatabase` с нуля.

Π’Π°ΠΆΠ½Ρ‹ΠΉ ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ случай: По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ `mysqldump` устанавливаСт Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ чтСния (`FLUSH TABLES WITH READ LOCK`) Π² Π½Π°Ρ‡Π°Π»Π΅ Π΄Π°ΠΌΠΏΠ°. На высоконагруТСнных сСрвСрах InnoDB ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ вмСсто этого `–single-transaction` для создания согласованного снимка Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ записи:

β€œ`bash

mysqldump -u root -p –single-transaction mydatabase > mydatabase_backup.sql

β€œ`

`–single-transaction` Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ InnoDB. Если ваша Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… содСрТит Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ MyISAM, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½Π°.

2. Экспорт Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…

β€œ`bash

mysqldump -u [username] -p –databases db1 db2 > multiple_databases_backup.sql

β€œ`

Π€Π»Π°Π³ `–databases` ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ `mysqldump` Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ `CREATE DATABASE` ΠΈ `USE`, дСлая Π΄Π°ΠΌΠΏ самодостаточным. Π‘Π΅Π· этого Ρ„Π»Π°Π³Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ, ΠΈ Π΄Π°ΠΌΠΏ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ цСлСвая Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΡƒΠΆΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π° Π²ΠΎ врСмя ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

β€œ`bash

mysqldump -u root -p –databases db1 db2 > multiple_databases_backup.sql

β€œ`

3. Экспорт всСх Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…

β€œ`bash

mysqldump -u root -p –all-databases > all_databases_backup.sql

β€œ`

Π­Ρ‚ΠΎ экспортируСт всС схСмы, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ систСмныС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… `mysql`, `information_schema` ΠΈ `performance_schema`. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° систСмных Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ основными вСрсиями MySQL β€” схСма Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ сущСствСнно измСнилась ΠΌΠ΅ΠΆΠ΄Ρƒ MySQL 5.7 ΠΈ 8.0, ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ старой схСмы `mysql` Π² Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр 8.0 ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈΡ‚ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ систСмныС схСмы:

β€œ`bash

mysqldump -u root -p –all-databases

–ignore-table=mysql.user

–ignore-table=mysql.db

> all_user_databases_backup.sql

β€œ`

4. Экспорт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ структуры Ρ‚Π°Π±Π»ΠΈΡ† (Π±Π΅Π· Π΄Π°Π½Π½Ρ‹Ρ…)

β€œ`bash

mysqldump -u root -p –no-data mydatabase > structure_only.sql

β€œ`

Π­Ρ‚ΠΎ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΠΎ для контроля вСрсий схСмы, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ развёртывания пустой тСстовой срСды. Π’Ρ‹Π²ΠΎΠ΄ содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ DDL-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ `CREATE TABLE`, `CREATE VIEW`, `CREATE PROCEDURE` ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ β€” Π±Π΅Π· строк `INSERT`.

5. Экспорт ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†

β€œ`bash

mysqldump -u root -p mydatabase table1 table2 > tables_backup.sql

β€œ`

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ экспортС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ `mysqldump` Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ `CREATE DATABASE` ΠΈΠ»ΠΈ `USE`. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ цСлСвая Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… сущСствуСт ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠΌ.

6. Экспорт с Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹ΠΌΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°ΠΌΠΈ, Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π°ΠΌΠΈ ΠΈ событиями

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ `mysqldump` Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹, Π½ΠΎ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ события. Для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования прилоТСния:

β€œ`bash

mysqldump -u root -p

–routines

–triggers

–events

–single-transaction

mydatabase > full_backup.sql

β€œ`

Π—Π°Π±Ρ‹Ρ‚ΡŒ `–routines` β€” ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённых ΠΏΡ€ΠΈΡ‡ΠΈΠ½ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ восстановлСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: схСма ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚, Π½ΠΎ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ° отсутствуСт.

7. Π‘ΠΆΠ°Ρ‚Ρ‹ΠΉ экспорт

ΠŸΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Ρ‡Π΅Ρ€Π΅Π· `gzip` для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»Π° Π½Π° 60–80%:

β€œ`bash

mysqldump -u root -p mydatabase | gzip > mydatabase_backup.sql.gz

β€œ`

Для максимального сТатия Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… (Π·Π° счёт Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ CPU):

β€œ`bash

mysqldump -u root -p mydatabase | gzip -9 > mydatabase_backup.sql.gz

β€œ`

Π˜ΠΌΠΏΠΎΡ€Ρ‚ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° mysql

ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки `mysql` ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ SQL-Ρ„Π°ΠΉΠ» Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ stdin ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ выполняСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΌ сСрвСрС.

1. Π˜ΠΌΠΏΠΎΡ€Ρ‚ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…

β€œ`bash

mysql -u [username] -p [database_name] < [filename].sql

β€œ`

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

β€œ`bash

mysql -u root -p mydatabase < mydatabase_backup.sql

β€œ`

Π’Π°ΠΆΠ½ΠΎ: Если Ρ„Π°ΠΉΠ» `.sql` Π±Ρ‹Π» экспортирован с `–databases` ΠΈΠ»ΠΈ `–all-databases`, ΠΎΠ½ ΡƒΠΆΠ΅ содСрТит Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ `CREATE DATABASE` ΠΈ `USE`. Π’ этом случаС Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ имя Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС β€” это создаёт ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚:

β€œ`bash

mysql -u root -p < all_databases_backup.sql

β€œ`

2. Π˜ΠΌΠΏΠΎΡ€Ρ‚ Π² Π½ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…

ЦСлСвая Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ смоТСтС Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π² Π½Π΅Ρ‘ ΠΈΠΌΠΏΠΎΡ€Ρ‚. MySQL Π½Π΅ создаст Π΅Ρ‘ автоматичСски ΠΈΠ· простого Π΄Π°ΠΌΠΏΠ° Ρ‚Π°Π±Π»ΠΈΡ†.

Π¨Π°Π³ 1 β€” Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…:

β€œ`bash

mysql -u root -p -e "CREATE DATABASE newdatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

β€œ`

Π¨Π°Π³ 2 β€” Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΄Π°ΠΌΠΏ:

β€œ`bash

mysql -u root -p newdatabase < mydatabase_backup.sql

β€œ`

ВсСгда явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈ сортировку ΠΏΡ€ΠΈ создании Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ИспользованиС настроСк сСрвСра ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” частый источник нСсоотвСтствий ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΠΊ, особСнно ΠΏΡ€ΠΈ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвСрами с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ конфигурациями `character_set_server`.

3. Π˜ΠΌΠΏΠΎΡ€Ρ‚ сТатого Π΄Π°ΠΌΠΏΠ°

β€œ`bash

gunzip < mydatabase_backup.sql.gz | mysql -u root -p mydatabase

β€œ`

Или с использованиСм `zcat` (эквивалСнт Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ дистрибутивов Linux):

β€œ`bash

zcat mydatabase_backup.sql.gz | mysql -u root -p mydatabase

β€œ`

4. Π˜ΠΌΠΏΠΎΡ€Ρ‚ с ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ прогрСсса

Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°ΠΌΠΏΠΎΠ² стандартный ΠΊΠ»ΠΈΠ΅Π½Ρ‚ `mysql` Π½Π΅ Π΄Π°Ρ‘Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `pv` (pipe viewer) для отобраТСния ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° прогрСсса Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ:

β€œ`bash

pv mydatabase_backup.sql | mysql -u root -p mydatabase

β€œ`

УстановитС `pv` с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `apt install pv` ΠΈΠ»ΠΈ `yum install pv`. На Π’Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ Π‘Π΅Ρ€Π²Π΅Ρ€Π΅, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠ³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π½Ρ‹Π΅ производствСнныС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, эта Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ критичСски Π²Π°ΠΆΠ½Π° с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния.

mysqldump Π² сравнСнии с Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования

ЀункцияmysqldumpmysqlpumpMySQL Shell (util.dumpInstance)Percona XtraBackup
Π’ΠΈΠΏ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копированияЛогичСскоС (SQL)ЛогичСскоС (SQL)ЛогичСскоС (JSON/SQL)ЀизичСскоС (Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅)
ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠžΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ
ГорячСС Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ InnoDBΠ‘ `–single-transaction`Π‘ `–single-transaction`Π”Π°Π”Π°
Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ‹Π²ΠΎΠ΄Π°ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ SQLΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ SQLΠ€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ файлыНСобработанныС Ρ„Π°ΠΉΠ»Ρ‹ InnoDB
Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡΠœΠ΅Π΄Π»Π΅Π½Π½Π°Ρ (ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ SQL)Π£ΠΌΠ΅Ρ€Π΅Π½Π½Π°ΡΠ‘Ρ‹ΡΡ‚Ρ€Π°ΡΠžΡ‡Π΅Π½ΡŒ быстрая
ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π΅Ρ€ΡΠΈΡΠΌΠΈΠžΡ‚Π»ΠΈΡ‡Π½Π°ΡΠ₯ΠΎΡ€ΠΎΡˆΠ°ΡΠ₯ΠΎΡ€ΠΎΡˆΠ°ΡΠ’ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠΉ основной вСрсии
Π’Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состав MySQLΠ”Π°Π”Π° (5.7.8+)ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ установкаБторонний ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚
Π›ΡƒΡ‡ΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ, ΠΌΠ°Π»Ρ‹Π΅ ΠΈ срСдниС Π‘Π”ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°ΠΌΠΏΡ‹ΠžΠ±Π»Π°Ρ‡Π½Ρ‹Π΅/ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΡΡ…Π΅ΠΌΡ‹ΠšΡ€ΡƒΠΏΠ½Ρ‹Π΅ производствСнныС Π‘Π”

Для срСд, Π³Π΄Π΅ нСсколько производствСнных Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° управляСмом VPS с cPanel, `mysqldump` остаётся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ благодаря своСй совмСстимости ΠΈ простотС.

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ настройка ΠΈ ΠΊΡ€Π°ΠΉΠ½ΠΈΠ΅ случаи

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ

НСсоотвСтствия ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΠΊ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Π½Π΅ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ большой Π΄ΠΎΠ»ΠΈ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Ρ‘Π½Π½Ρ‹Ρ… ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠ². НаиболСС бСзопасный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ β€” явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ этапС:

β€œ`bash

mysqldump -u root -p

–default-character-set=utf8mb4

mydatabase > mydatabase_backup.sql

β€œ`

β€œ`bash

mysql -u root -p

–default-character-set=utf8mb4

mydatabase < mydatabase_backup.sql

β€œ`

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: `utf8` Π² MySQL β€” это 3-Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ΅ подмноТСство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ 4-Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ символы Unicode (эмодзи, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ΅Ρ€ΠΎΠ³Π»ΠΈΡ„Ρ‹ CJK). ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `utf8mb4` для Π½ΠΎΠ²Ρ‹Ρ… Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ….

УскорСниС ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠ²

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ MySQL выполняСт ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° `INSERT` Π² Π΄Π°ΠΌΠΏΠ΅. Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… это катастрофичСски ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π² Π½Π°Ρ‡Π°Π»ΠΎ вашСй сСссии ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°:

β€œ`bash

mysql -u root -p mydatabase <<EOF

SET foreign_key_checks = 0;

SET unique_checks = 0;

SET autocommit = 0;

SOURCE /path/to/mydatabase_backup.sql;

COMMIT;

SET foreign_key_checks = 1;

SET unique_checks = 1;

EOF

β€œ`

Π›ΠΈΠ±ΠΎ экспортируйтС с `–extended-insert` (Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) ΠΈ `–disable-keys` для ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΉ вставки ΠΈ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ пСрСстроСния индСксов послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Автоматизация Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Cron

Π—Π°ΠΏΠΈΡΡŒ автоматичСского Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования производствСнного уровня Π² `/etc/cron.d/mysql-backup`:

β€œ`bash

0 2 * * * root mysqldump -u backup_user -p'StrongPass'

–single-transaction –routines –triggers –events

mydatabase | gzip > /backups/mydatabase_$(date +%F).sql.gz

β€œ`

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ MySQL с минимально Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ привилСгиями вмСсто `root`. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ:

β€œ`sql

CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'StrongPass';

GRANT SELECT, LOCK TABLES, SHOW VIEW, TRIGGER, EVENT ON *.* TO 'backup_user'@'localhost';

FLUSH PRIVILEGES;

β€œ`

Π—Π°Ρ‰ΠΈΡ‚Π° ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ .my.cnf

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС раскрываСт ΠΈΡ… Π² истории ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ ΠΈ списках процСссов. Π₯Ρ€Π°Π½ΠΈΡ‚Π΅ ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² `~/.my.cnf`:

β€œ`ini

[client]

user=root

password=YourSecurePassword

β€œ`

НСмСдлСнно установитС ΠΏΡ€Π°Π²Π° доступа:

β€œ`bash

chmod 600 ~/.my.cnf

β€œ`

ПослС этого всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ `mysqldump` ΠΈ `mysql` автоматичСски ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±Π΅Π· Ρ„Π»Π°Π³ΠΎΠ² `-u` ΠΈ `-p`.

Экспорт ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Для создания Π΄Π°ΠΌΠΏΠ° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… с ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ сСрвСра MySQL:

β€œ`bash

mysqldump -h remote.server.com -P 3306 -u remoteuser -p remotedatabase > remote_backup.sql

β€œ`

Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ экзСмпляр MySQL Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ с вашСго IP-адрСса ΠΈ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ€Ρ‚ 3306 ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Π² брандмауэрС. Для Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΡƒΠ½Π½Π΅Π»ΡŒ Ρ‡Π΅Ρ€Π΅Π· SSH:

β€œ`bash

ssh -L 3307:127.0.0.1:3306 user@remote.server.com -N &

mysqldump -h 127.0.0.1 -P 3307 -u remoteuser -p remotedatabase > remote_backup.sql

β€œ`

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ

БцСнарийРСкомСндуСмая ΠΊΠΎΠΌΠ°Π½Π΄Π°
ПолноС Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ InnoDB, Π±Π΅Π· простоя`mysqldump –single-transaction –routines –triggers –events`
ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡ схСмы Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ сСрвСр`mysqldump –no-data` + пСрСсозданиС Π‘Π” + ΠΈΠΌΠΏΠΎΡ€Ρ‚
ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ ΠΎΠ΄Π½ΠΎΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвСрами`mysqldump dbgzipssh user@dest "gunzipmysql db"`
Π Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСх Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ систСмныС схСмы`–all-databases` + `–ignore-table` для систСмных Ρ‚Π°Π±Π»ΠΈΡ†
БыстроС восстановлСниС большого Π΄Π°ΠΌΠΏΠ°ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ `foreign_key_checks`, `unique_checks`, `autocommit`
АвтоматичСскоС Π½ΠΎΡ‡Π½ΠΎΠ΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Cron + Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ для Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования + ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ `.my.cnf`
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° цСлостности Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈΠ˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚Π΅ΡΡ‚ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ `SHOW TABLE STATUS`

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ тСхничСскиС Π²Ρ‹Π²ΠΎΠ΄Ρ‹

  • ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `–single-transaction` для Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… InnoDB, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ записСй прилоТСния Π²ΠΎ врСмя экспорта
  • ВсСгда явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ `utf8mb4` β€” Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ»Π°Π³Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° настройки ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ сСрвСра ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
  • Π’ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ `–routines`, `–triggers` ΠΈ `–events` Π² ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ прилоТСния, ΠΈΠ½Π°Ρ‡Π΅ Π²Ρ‹ рискуСтС ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ
  • Никогда Π½Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ систСмных схСм (`mysql.*`) ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ основными вСрсиями MySQL
  • Π₯Ρ€Π°Π½ΠΈΡ‚Π΅ ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² `~/.my.cnf` с ΠΏΡ€Π°Π²Π°ΠΌΠΈ `chmod 600` β€” Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ Π² качСствС встроСнных Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²
  • Для Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 10 Π“Π‘ рассмотритС использованиС `mysqlpump` ΠΈΠ»ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄Π°ΠΌΠΏΠ° MySQL Shell, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ `mysqldump` станСт ΡƒΠ·ΠΊΠΈΠΌ мСстом
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΡƒΡŽ копию, выполняя тСстовоС восстановлСниС Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСдС, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° Π½Π΅Ρ‘ для Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ восстановлСния
  • ΠŸΡ€ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ·ΠΎΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ срСды с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ПанСлСй управлСния VPS, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΌΠ΅ΠΆΠ°Ρ€Π΅Π½Π΄Π½Ρ‹ΠΉ доступ Π²ΠΎ врСмя ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ восстановлСния
  • Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ SSL-сСртификатом Π½Π° любом Π²Π΅Π±-ΡƒΡ€ΠΎΠ²Π½Π΅ прилоТСния, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΌΡΡ ΠΊ MySQL, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅

Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

Π’ Ρ‡Ρ‘ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ mysqldump ΠΈ mysqlpump?

`mysqldump` являСтся ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΈ создаёт ΠΎΠ΄ΠΈΠ½ SQL-Ρ„Π°ΠΉΠ» β€” Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΉ ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎ совмСстимый. `mysqlpump`, прСдставлСнный Π² MySQL 5.7.8, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ экспорт Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚Π°Π±Π»ΠΈΡ† ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сокращая врСмя создания Π΄Π°ΠΌΠΏΠ° Π½Π° многоядСрных сСрвСрах. Однако `mysqlpump` ΠΈΠΌΠ΅Π΅Ρ‚ извСстныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с согласованным Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹ΠΌ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… со ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΌΠΈ Π΄Π²ΠΈΠΆΠΊΠ°ΠΌΠΈ ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ вСрсиями.

МоТно Π»ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°ΠΌΠΏ MySQL 5.7 Π² MySQL 8.0?

Π”Π°, с ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΠ°ΠΌΠΈ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ схСмы ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Однако Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… `mysql` Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ β€” ΠΏΠ»Π°Π³ΠΈΠ½ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ измСнился с `mysql_native_password` Π½Π° `caching_sha2_password` Π² вСрсии 8.0, ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ старых Ρ‚Π°Π±Π»ΠΈΡ† ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ. ВоссоздайтС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² `CREATE USER` ΠΈ `GRANT`.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ с ошибкой Β«ERROR 1005: Can’t create tableΒ» ΠΈΠ·-Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ?

Π­Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² порядкС, Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‰Π΅ΠΌ зависимости Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. РСшСниС β€” Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ `SET foreign_key_checks = 0;` Π² Π½Π°Ρ‡Π°Π»ΠΎ сСссии ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΈ `SET foreign_key_checks = 1;` послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ. Π›ΠΈΠ±ΠΎ экспортируйтС с `–single-transaction`, Ρ‡Ρ‚ΠΎ сохраняСт ΡΡΡ‹Π»ΠΎΡ‡Π½ΡƒΡŽ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π² самом Ρ„Π°ΠΉΠ»Π΅ Π΄Π°ΠΌΠΏΠ°.

Как ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π±Π΅Π· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² CREATE TABLE?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„Π»Π°Π³ `–no-create-info`: `mysqldump -u root -p –no-create-info mydatabase > data_only.sql`. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ схСму Π±Π΅Π· измСнСния Π΅Ρ‘ структуры.

Каков Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ бСзопасный способ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°ΠΌΠΏΠ° MySQL ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΌΠΈ сСрвСрами?

ΠŸΠ΅Ρ€Π΅Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΄Π°ΠΌΠΏ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Ρ‡Π΅Ρ€Π΅Π· SSH Π±Π΅Π· записи ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π° диск: `mysqldump -u root -p sourcedb | ssh user@destination.server "mysql -u root -p targetdb"`. Π­Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ быстрСС ΠΈ бСзопаснСС, Ρ‡Π΅ΠΌ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° `.sql`, особСнно ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² срСдС ΠžΠ±Ρ‰Π΅Π³ΠΎ Π’Π΅Π±-хостинга, Π³Π΄Π΅ ΠΊΠ²ΠΎΡ‚Ρ‹ Π½Π° диск ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ.