Простой сценарий оболочки должен был переместить файлы базы данных

ls -s сообщает количество блоков, которые выделяются для файла, не включая то, что хранится непосредственно в записи каталога.

В большинстве случаев количество блоков является числом байтов, разделенных на размер блока в байтах, окруженных.

Количество блоков может быть меньше, чем это для редкого файла. Например, в большинстве файловых систем, это создаст 8 192-байтовый файл, охватывающий 0 блоков:

$ perl -e 'truncate STDOUT, 8192' >a
$ ls -l a
-rw-r--r-- 1 gilles gilles 8192 Nov  1 21:32 a
$ ls -s a
0 a

С другой стороны количество блоков может быть больше, если файловая система предварительно выделяет блоки для файлов или использует блоки для хранения метаданных. Я не удивлен, что Zfs имеет неочевидную корреспонденцию между размером файла и количеством блоков, учитывая большое количество функций, которые он предлагает и его ориентация на большие файловые системы; я не знаю детали, но количество блоков зависит не только от размера файлов, но также и на его истории (у Вас может быть больше чем один блок в пустом файле, если это - результат усечения большего файла).

Объяснить почему ls -s является неправильным: это не считает размер файла, но зависимое от файловой системы количество. Это - очень косвенный способ определить, пуст ли файл во-первых, требуя внешнего инструмента (ls) и некоторый парсинг; вместо этого, они должны использовать test -s, который не требует никакого парсинга и выполняет точно, что требуют. Если они думают это ls -s хороший путь состоит в том, чтобы протестировать, пуст ли файл, бремя должно быть на них для выравнивания по ширине этого, это работает.

3
26.11.2011, 01:42
2 ответа

Не переименовывайте каталоги баз данных непосредственно. Вместо этого разгрузите базу данных, создайте новое имя базы данных (который, в свою очередь, создаст новое имя каталога), и затем выведите базу данных назад на новое имя базы данных:

mysqldump -u username -p  olddatabase > olddbdump.sql
mysqladmin -u username -p create newdatabase
mysql -u username -p newdatabase < olddbdump.sql

После того как Вы проверили, что база данных функциональна, можно отбросить datase:

mysqladmin -u username -p drop oldatabase.

Посмотрите здесь для ссылки.

В Вашем случае Вы, вероятно, хотите создать tmp базу данных, вывести db_1 базу данных в ту временную базу данных, отбросить и воссоздать db_2 базу данных, затем вывести db_2 базу данных в недавно пустую db_1 базу данных.

4
27.01.2020, 21:17
  • 1
    Но я только хочу иметь часть таблиц в базе данных, как разгрузить часть базы данных? –  Mellon 27.11.2011, 12:15
  • 2
    Затем используйте mysqldump-u имя пользователя-p olddatabase имя таблицы> oldtablename.sql для экспорта отдельной таблицы, затем mysql-u имя пользователя-p newdatabase <oldtablename.sql для импорта. –  Rilindo 27.11.2011, 23:07

Ну, это просто перемещает файлы, таким образом, ничто сложное - всего команда на 3 мВ

#!/bin/bash

mkdir /var/lib/mysql/db_1_temp
mv /var/lib/mysql/db_1/cars* /var/lib/mysql/db_1_temp
mv /var/lib/mysql/db_1/customers* /var/lib/mysql/db_1_temp
mv /var/lib/mysql/db_2/* /var/lib/mysql/db_1_temp

Но она, если Вы планируете использовать новую базу данных, Вы более обеспечены с созданием нового пустого дб и затем используете mysqldump для импортирования таблицу, Вам нужно.

1
27.01.2020, 21:17
  • 1
    Привет, savamane, я попробовал Вашу команду, но я получил следующую ошибку: mv: не может статистика '/var/lib/mysql/db_1 /* ': Никакой такой файл или каталог. Но у меня есть то наследие личинки каталога db_1/ –  Mellon 28.11.2011, 17:56

Теги

Похожие вопросы