Я пытаюсь скопировать базу данных с сервера MariaDB на другой. Я сделал дамп базы данных на сервере A:
sudo mysqldump -u root -p --databases database1 > /var/tmp/database1.sql
Я создал новую базу данных на сервере B с помощью:
create database database1;
Затем я скопировал файл дампа .sql с сервера A на сервер B с помощью scp и импортировал его на сервер B с помощью:
sudo mysql -u root -p database1 < database1.sql
Однако кажется, что две базы данных имеют разный размер:
Сервер A:
MariaDB [(none)]> SELECT table_schema "database1", ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" FROM information_schema.tables GROUP BY table_schema;
+--------------------+---------------+
| database1 | DB Size in MB |
+--------------------+---------------+
| information_schema | 0.2 |
| mysql | 2.5 |
| performance_schema | 0.0 |
| database1 | 516.7 |
+--------------------+---------------+
Сервер B:
MariaDB [(none)]> SELECT table_schema "database1",ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" FROM information_schema.tables GROUP BY table_schema;
+--------------------+---------------+
| database1 | DB Size in MB |
+--------------------+---------------+
| information_schema | 0.2 |
| mysql | 0.7 |
| performance_schema | 0.0 |
| database1 | 456.8 |
+--------------------+---------------+
Кроме того, если я смотрю на одну и ту же таблицу в обеих базах данных, кажется, что у них разное количество строк. Я пытался скопировать базу данных несколько раз, но всегда получаю разницу. Что-то мне не хватает? Я не эксперт по MariaDB. Оба сервера находятся под Debian 9.
Это нормально. Вот что произошло:
mysqldump
генерирует INSERT
операторы из данных с древовидной структурой BT.Между тем ...
SHOW TABLE STATUS
дает только оценить количества строк. Если вам нужно точное количество строк, используйте SELECT COUNT(*) FROM tablename
. (по одной таблице за раз) Поскольку STATUS
это «оценка», она может быть больше или меньше реального количества; иногда на значительную сумму. Опять же это «нормально».